我要写数据到从I2C设备,对其采样频率进行配置。I2C每次传输是8位数据一组,而控制寄存器只有其中的4位为采样频率控制位,其他位用作其他用途。如果我只想改变从设备采样频率,按要求只要修改控制寄存器的4位就行了;但是现在传输的是8位数据,如何保证只修改4位,对其他位不影响? 是不是所有的I2C设备寄存器位写0都是无效的?

------解决方案--------------------
先读再写,先读再写
------解决方案--------------------
读,修改,写
------解决方案--------------------
u8_tmp=i2w_read(slv_addr,reg_addr);
u8_val=(u8_tmp&0x0f)
------解决方案--------------------
(freq<<4);//修改高4位
i2c_write(slv_addr,reg_addr,u8_val);
------解决方案--------------------
我不知道你是什么平台和什么驱动。一般来说嵌入式里,这个都是封在对应这个设备的驱动中的。
如果为了高效一点,又能重新定义寄存器的值,而不采用系统重置的默认值,是不是应该在初始化的时候设定所有寄存器的自定义值。
没错。只要寄存器不存在反复配置的情况,就可以把正常工作时候的寄存器值当作初始值