Spec:

Read:
./i2c_read_write -b 0 -a 0xd0 -f A8D8 -r 0x75
Reg value: 0x68

上图是往7bit slave addr为0x68(write addr 0xD0)的设备读取reg 0x75 值的波形。需要注意的地方如下:
1. scl & sda在空闲没有设备控制时的默认状态是high;
2. 在传输数据的过程中,只有scl为低时,sda的状态才能发生改变,否则就是发送start或者是stop信号。start:scl high & sda low,end:scl high & sda high;
3. 传输数据时,scl为high,sda数据有效;
4. 读写标志位,读为1,写为0;
5. 握手ack/nak信号,都是发送设备数据发送完成后,释放sda控制权等接收设备拉低sda,然后将scl拉高确认sda是否为low看握手是否成功。ack:slave向master发送应答信号,nak:master向slave发送应答信号;
write:
./i2c_read_write -b 0 -a 0xd0 -f A8D8 -w 0x6b 0

上图是往7bit slave addr为0x68的设备,reg 0x6b写入0的波形
本文深入剖析了I2C通信协议在读写操作中的工作原理,通过波形图展示了7位从设备地址为0x68的设备读取0x75寄存器值和写入0x6b寄存器0的流程。关键点包括空闲时SCL和SDA的状态,数据传输中的信号转换规则,读写标志位,以及ACK/NAK握手信号的角色。了解这些对于理解和调试I2C通信至关重要。
8万+

被折叠的 条评论
为什么被折叠?



