新闻  |   论坛  |   博客  |   在线研讨会
STM32I2C协议
15695104076 | 2023-06-16 13:15:53    阅读:89   发布文章

第三天

今天我学的是STM32的I2C协议。

在一个 I2C 通讯总线中,可连接多个 I2C 通讯设备,支持多个通讯主机及多个通讯从机。一个 I2C 总线只使用两条总线线路,一条双向串行数据线(SDA) ,一条串行时钟线(SCL)。每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。总线通过上拉电阻接到电源。当 I2C 设备空闲时,会输出高阻态,而当所有设备都空闲,都输出高阻态时,由上拉电阻把总线拉成高电平。

I2C传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时,SDA 由高电平向低电平跳变,开始传送数据。结束信号:SCL 为高电平时,SDA 由低电平向高电平跳变,结束传送数据。应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号,CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。应答信号为低电平时,规定为有效应答位,表示接收器已经成功地接收了该字节;应答信号为高电平时,规定为非应答位,一般表示接收器接收该字节没有成功。 在一个字节传输的第九个时钟期间内,接收数据方必须回一个ACK应答信号给发送方。

因为有上拉电阻的存在,所以在空闲时刻保证了SDA和SCL保持高电平状态.。SDA线上的数据在SCL时钟“高”期间必须是稳定的,只有当SCL线上的时钟信号为低时,数据线上的“高”或“低”状态才可以改变。输出到SDA线上的每个字节必须是8位,数据传送时,先传送最高位,每一个被传送的字节后面都必须跟随一位应答位。当一个字节按数据位从高位到低位的顺序传输完后,紧接着从设备将拉低SDA线,回传给主设备一个应答位ACK, 此时才认为一个字节真正的被传输完成。向从机发送数据总体的一个过程:1-主机发送start信号;2-主机发送从机地址,高7bit是地址,bit0是读写控制位,0表示写,1表示读;3-从机返回ACK响应信号;4-主机发送要给从机写入数据的地址;5-从机返回ACK响应信号;6-主机发送数据;7-从机返回ACK响应信号;8-重复第6和7步,直到从机返回一个NACK非响应信号;9-主机发送停止信号,结束数据传输。读取从机发来数据的一个过程: 1-主机发送start信号;2-主机发送从机地址,高7bit是地址,bit0是读写控制位,0表示写,1表示读;3-从机返回ACK响应信号;4-主机发送要给从机写入数据的地址;5-从机返回ACK响应信号;6-重新启动IIC总线,发送start信号;7-主机发送从机地址,高7bit是地址,bit0是读写控制位,0表示写,1表示读;8-从机返回ACK响应信号;9-主机接收数据;10-从机返回ACK响应信号;11重复第9和01步,直到从机返回一个NACK非响应信号;12主机发送停止信号,结束数据传输。


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
最近文章
RT-Thread线程同步
2023-06-16 13:49:45
RT-Thread中断管理
2023-06-16 13:17:38
STM32I2C协议
2023-06-16 13:15:53
推荐文章
最近访客