I2C协议——读写EEPROM
关注我,共同交流,一起成长
- 前言
- 一、协议简介
- 二、I2C特性及架构
- 三、通信过程
前言
这是一种主要用于集成电路和集成电路(IC)通信,计算机中复杂的问题大多数就是用分层来进行解决,这个通讯也是一样的道理,这里就是会分为物理层和协议层,物理层就是确保了我们的原始数据在物理媒体的传输,协议层主要规定了通讯相关逻辑。
一、协议简介
这个地方物理层其实作用不大,主要是这个地方的相关的协议层的东西。物理层的一个特点就是每一个主机和从机都引出来两条线交接到这个SCL总线和SDA总线上面去。主机通过这个总线输出一个时钟,然后从机就依靠这个时钟信号来进行数据采集和数据发送,然后依靠这个时钟来协调通讯和同步。
数据包要搞清楚,能够理解好
具体来说就是关于基本读写、通讯起止、数据有效性、地址及数据方向、响应等等的东西。(写程序的时候对这个协议是必须要搞得滚瓜烂熟才行的。)这个协议传输过程的逻辑还是比较清晰的存在的。通过两个总线的不同状态来表示一个数据包,具体有起点、终点、读、写、复合格式,例如说:
这个起始点就是相当于上课了,那么接在这个总线上边的各个从机就要去听老师有没有点自己的adress名字了。
数据是否有效性也是通过两根总线的这种交互产生的
二、I2C特性及架构
STM32的I2C外设可用作通讯的主机以及从机,支持100Kbit/s和400Kbit/s的速率,支持7位、10位设备地址,支持DMA数据传输,并具有数据校验功能。
如果我们直接控制STM32的两个GPIO引脚,分别用作SCL和SDA,分别用作SCL及 SDA,按照上述信号的时序要求,直接像控制LED灯那样控制引脚的输出(若是接收数据时则读取SDA电平),就可以实现I2C通讯。同样,假如我们按照USART的要求去控制引脚,也能实现USART通讯。所以只要遵守协议,就是标准的通讯,不管您如何实现它,不管是ST生产的控制器还是ATMEL生产的存储器,都能按通讯标准交互。
意思就是,这里其实就是一种联对的逻辑,我们只需要更高级地设定好一个存在之后,然后系统的内部设定就会根据你的这个选择将两根总线的输出进行一定的调节控制,然后就用不着直接去控制相关总线了。
硬件实现协议:由STM32的I2C片上外设专门负责实现I2C通讯协议,只要配置好该外设,它就会自动根据协议要求产生通讯信号,收发数据并缓存起来,CPU只要检测该外设的状态和访问数据寄存器,就能完成数据收发。这种由硬件外设处理I2C协议的方式减轻了CPU的工作且使软件设计更加简单。
然后,这里有一个架构图的存在,通过这个架构图可以从中看到很多的别的东西,对于架构剖析来说的话,主要有这个通讯引脚、时钟控制逻辑(SCL线)、数据控制逻辑(SDA线)、整体控制逻辑(SMBA)之分。就是说,因为这个I2C里面存在着这样子的一个结构,就能够直接去控制那些引脚,就不用再去进行软件模拟了。
三、通信过程
使用12C 外设通讯时,在通讯的不同阶段它会对“状态寄存器(SR1及 SR2)”的不同数据位写入参数,我们通过读取这些寄存器标志来了解通讯状态。
只有了解了这个过程流程,此后在书写软件来进行数据的收发的时候就会方便很多了。那么我们通过这个状态寄存器就能够发现在这个背后传输过来的这个事件,
上面那行东西是控制寄存器发送的内容,而下面的那一行则是状态寄存器最终检测的内容了,控制寄存器每做一个步骤,状态寄存器都会产生一个事件,为了看是否进行控制下一个步骤。
关注我,持续了解行业知识;如果本文让你有所收获,期待你的点赞。
如果想要获取相关知识资料,请扫码关注微信公众号: