I2C读写命令时序如下:
这里默认I2C每次传输均按8bit模式传输
写时序:
1)Master先发送Start bit,开始一笔传输;
2)Master发送从机地址 s_addr[7:0],其中s_addr[6:0]包含从机地址。
s_addr[7]读写标志位,1:写标志位,注意这里写标志位不表示立刻进入写数据还是读数据,而是表示Master写入写操作的写寄存器地址,或者说是写入读出操作的读寄存器地址。0:表示读标志位,直接进入,读数据状态,Slave会接管SDA的控制权,输出数据。
Master发送S_addr[7:0],Slave接收完毕,若从机地址匹配,Slave会在第9个bit(S_addr[0]对应第一个bit,之后bit计数均基于此描述)接管SDA控制权,发送ACK,ACK即:第9个bit,SCL对应SDA低电平,开启接下来的操作。
若从机地址不匹配,Slave会在第9个bit(S_addr[0]对应第一个bit,之后bit计数均基于此)接管SDA控制权,发送NACK,NACK即:第9个bit,SCL对应SDA高电平,结束操作。
3)传输完从机地址,且从机地址匹配后,若s_addr[7]为1,就开始寄存器地址传输。Master会发送8bit寄存器地址。第9bit,Slave接管SDA控制权,发送ACK。
4)在获取写寄存器地址后,Master发送8bit写数据,Slave将对应数据写入对应寄存器,每接受8bit数据,Slave在第9bit接管SDA,发送ACK。
5)如果是连续写,那么地址会基于第一次发送的寄存器地址值自动进行累加,Master 不发送stop bit,而是紧接着继续发送下一笔8bit数据,继续写入更新的寄存器地址。同时,Slave在第9bit接管SDA,发送ACK。
6)连续写入N(N>=1)笔数据后,Master想停止写入,那么就发送Stop bit 或者 Start bit,停止数据传输,状态机复位(Stop bit)或是直接开启下次传输(Start bit),相关计数器等控制逻辑复位。
读时序:
1)Master先发送Start bit,开始一笔传输;
2)Mast

本文详细介绍了I2C通信协议的读写时序,包括写操作时的启动、从机地址匹配、寄存器地址和数据传输,以及读操作时的特殊步骤和速度限制。在读写过程中,SDA控制权在主从机间切换,SCL由主机控制。

388

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



