学习单片机入门你需要了解的知识之通信协议I2C总线

I2C是由飞利浦公司在80年代设计的一种串行通讯总线,使用多组从构架,主要运用于系统中主芯片和传感器、EEPROM等周边设备组件之间的通信。

I2C总线上的所有设备都存在主从关系,支持多个主设备在线,而且支持仲裁和冲突检测。

I2C总线支持最大的从机数理论上是127个,每个设备都只有一个唯一的地址,以便于主设备选择对应的设备进行通信。

I2C协议仅需要SCL和SDA两条线。

SCL是串行时钟线的缩写,同步时钟由主设备产生,负责传输时钟信号。

SDA是串行数据线的缩写,用于传输数据信号。

由于两条数据线都是开漏输出,所以在通讯时是需要接上拉电阻的。通常在标准模式100KBPS使用10K的上拉电阻,在快速模式400KBPS使用2K的上拉电阻。I2C总线还有高速模式3.4MBPS和超快速模式5MBPS可以选择。

主设备和重设备进行数据传输时需要遵循相应的数据结构序列。

第一部分是开始信号,在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将会变为活动状态并等待接收地址位。

第二部分是地址位和读写位,通常地址位占七位数据,主设备需要发送对应的从机地址,匹配总线上挂载的从机。I2C还支持十位寻址,读写位已经指定了数据的传输方向。

第三部分为应答位,主机每次发送完数据之后都会等待从设备的应答信号ACK。

第四部分为内部寄存器的地址或者从设备的指令数据。

第五部分就是发送的数据块。

最后是停止位。

接下来我们就从时序表来看一下I2C协议,开始信号发生的条件是SCL为高电平的时候,SDA由高电平向低电平跳变,在此之后,SDA开始随着SCL的时钟发送设备地址数据,8bit的数据中包含了七位设备地址数据和读学位数据。

对于读写位而言,如果主设备发送到从设备则为0,如果反过来从设备发送到主设备则为1,紧接着就是应答位,这个数据在第9个时钟信号周期表达。

如果从设备发送应答信号ACK,那么SDA会被拉低,如果没有应答信号,则表示从设备没有收到之前的地址数据,SDA会输出为高电平。

引起NACK的原因比较多,比如主设备发送了错误的地址数据,或者从设备正忙无法应答等,相应的主设备会根据对应的情况选择重新发送或者停止。

如果主设备收到应答信号之后,则会发送同设备的内部寄存器的地址信息,比如我们想要读取ADSL345加速度传感器X轴的数据,ADSL的设备地址为0x53,X轴数据的内部寄存器地址为0x32,相应的主设备配对道从设备地址之后需要访问ADSL内部寄存器地址0x32才能读取到X轴的数据信息。

在每次发送完之后会紧跟着一个应答位,如果接收器成功接收到数据,则设置为0,否则保持逻辑1,之后就是八位的数据帧和对应的应答为,最后是结束为,结束条件是SCL为高电平的时候,SD A就会由低电平向高电平跳变。

喜欢的帮忙收藏点个赞哦,谢谢大家的支持与鼓励!

 

 

 

学习单片机,我华维林北是认真的,童鞋们有什么疑问都可以来找我,及时回复林北能得到非常实用的干货,能帮助你们成长我会得到很大的满足感!好了,这期就说到这,我们下期见!

华维林北

版权声明:本文为CSDN博主「华维单片机林北」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_66707146/article/details/122927805

I2C是由飞利浦公司在80年代设计的一种串行通讯总线,使用多组从构架,主要运用于系统中主芯片和传感器、EEPROM等周边设备组件之间的通信。

I2C总线上的所有设备都存在主从关系,支持多个主设备在线,而且支持仲裁和冲突检测。

I2C总线支持最大的从机数理论上是127个,每个设备都只有一个唯一的地址,以便于主设备选择对应的设备进行通信。

I2C协议仅需要SCL和SDA两条线。

SCL是串行时钟线的缩写,同步时钟由主设备产生,负责传输时钟信号。

SDA是串行数据线的缩写,用于传输数据信号。

由于两条数据线都是开漏输出,所以在通讯时是需要接上拉电阻的。通常在标准模式100KBPS使用10K的上拉电阻,在快速模式400KBPS使用2K的上拉电阻。I2C总线还有高速模式3.4MBPS和超快速模式5MBPS可以选择。

主设备和重设备进行数据传输时需要遵循相应的数据结构序列。

第一部分是开始信号,在主设备发送开始条件信号之后,所有从机即使处于睡眠模式也将会变为活动状态并等待接收地址位。

第二部分是地址位和读写位,通常地址位占七位数据,主设备需要发送对应的从机地址,匹配总线上挂载的从机。I2C还支持十位寻址,读写位已经指定了数据的传输方向。

第三部分为应答位,主机每次发送完数据之后都会等待从设备的应答信号ACK。

第四部分为内部寄存器的地址或者从设备的指令数据。

第五部分就是发送的数据块。

最后是停止位。

接下来我们就从时序表来看一下I2C协议,开始信号发生的条件是SCL为高电平的时候,SDA由高电平向低电平跳变,在此之后,SDA开始随着SCL的时钟发送设备地址数据,8bit的数据中包含了七位设备地址数据和读学位数据。

对于读写位而言,如果主设备发送到从设备则为0,如果反过来从设备发送到主设备则为1,紧接着就是应答位,这个数据在第9个时钟信号周期表达。

如果从设备发送应答信号ACK,那么SDA会被拉低,如果没有应答信号,则表示从设备没有收到之前的地址数据,SDA会输出为高电平。

引起NACK的原因比较多,比如主设备发送了错误的地址数据,或者从设备正忙无法应答等,相应的主设备会根据对应的情况选择重新发送或者停止。

如果主设备收到应答信号之后,则会发送同设备的内部寄存器的地址信息,比如我们想要读取ADSL345加速度传感器X轴的数据,ADSL的设备地址为0x53,X轴数据的内部寄存器地址为0x32,相应的主设备配对道从设备地址之后需要访问ADSL内部寄存器地址0x32才能读取到X轴的数据信息。

在每次发送完之后会紧跟着一个应答位,如果接收器成功接收到数据,则设置为0,否则保持逻辑1,之后就是八位的数据帧和对应的应答为,最后是结束为,结束条件是SCL为高电平的时候,SD A就会由低电平向高电平跳变。

喜欢的帮忙收藏点个赞哦,谢谢大家的支持与鼓励!

 

 

 

学习单片机,我华维林北是认真的,童鞋们有什么疑问都可以来找我,及时回复林北能得到非常实用的干货,能帮助你们成长我会得到很大的满足感!好了,这期就说到这,我们下期见!

华维林北

版权声明:本文为CSDN博主「华维单片机林北」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_66707146/article/details/122927805

生成海报
点赞 0

华维单片机林北

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

CH579(M0内核)中断向量表偏移处理

通常情况下,为了产品后续的升级,程序都会分为两部分BootloaderApp,因为有两个程序,所以需要对中断向量表进行处理,否则,当程序已经跳转到app中运行,当中断产生的时候,响应函数仍然是Bootloader的中断函数,而不是app的 在S

基于STM32F103的智能门锁系统

基于STM32F103的智能门锁系统 直接说明实现了什么效果 1 指纹解锁(基于AS608) 2 RFID解锁(基于RC522) 3 密码解锁 (基于LCD电容屏触摸控制) 4 蓝牙解锁