I2C协议通讯过程(个人理解记录)

I2C协议通讯过程

发送时
1.产生起始信号s,产生EV5事件,SR1<-SB置1(起始信号已发送)

2.主机等待应答信号,应答后产生
EV6事件 SR1<-ADDR置(地址已发送)
和EV8事件 SR1<-TxE置1(数据寄存器为空)

3.对ADDR位清零后,对数据寄存器 DR写入发送数据,此时TxE重置为0*数据寄存器非空),
发送后 等待答应信号 接收到答应信号后又产生 EV8 事件SR1<-TxE置1(数据寄存器为空)循环此步骤

**4.**当数据发送完成,设置控制寄存器CR<-STOP位,发送完成后产生EV8_2事件, SR<-TxE 和 SR<-BTF 置1,
随后 产生停止信号P通讯结束

接收时
1.产生起始信号s,产生EV5事件,SR1<-SB置1(起始信号已发送)

2.从机等待应答信号,应答后产生
EV6 事件 SR1<-ADDR置1(地址已发送)

3. 从机接收地址后,向主机发送数据,主机接收后产生 EV7 事件,SR1<-RxNE置1,表示接数据收寄存器为空,接收完成后读取数据并清空数据接收寄存器(准备接收下一次数据),控制主机发送应答信号或应答信号,若应答则重复上述步骤

4. 主机发送非应答信号,产生停止信号P产生EV7 事件方便下次传输,传输结束

下图为转载I2C协议通讯过程(个人理解记录)_第1张图片
发送
S
EV5
Send ADDR
ACK
EV6 EV8
Send data1
ACK
EV8 Send data1
ACK
…n
Send data(last)
ACK
EV8_2
P

接收
S
EV5
Send ADDR
ACK
EV6
Send data1
ACK
EV7 Send data2
ACK
EV7_1 Send data3(last)
NACK
P EV7

你可能感兴趣的:(I2C协议通讯过程(个人理解记录))