STM32F4驱动IIC

1 物理层

 1.1  两线

  一个IIC总线只使用两条总线线路,一条双向串行数据线(SDA)用于双向传输数据,一条串行时钟线(SCL)用于保证时钟同步;

1.2 多主机多从机

  支持多个通讯主机和多个通讯从机;

1.3 上拉和线与

  当IIC设备空闲时,会输出高阻态,而当所有设备都空闲时,都输出高阻态,由上拉电阻把总线拉成高电平。而IIC具有线与特性,所以当设备不输出高阻态(也就是0)时,别的设备就能马上感知到IIC总线的变化。

1.4 设备地址

  每一个连接到总线的设备都有一个独立的地址,当主机广播的地址与某个设备地址相同时,这个设备就被选中。从机地址一般为7位(高四位为器件类型地址,低三位为器件引脚地址,由硬件电路A0、A1、A2电平决定)。

1.5 仲裁

  多个主机同时使用总线时,为防止冲突,会利用仲裁方式决定由那个设备占用总线

1.6 IIC总线传输模式

  标准模式:100Kbits(总线负载最大容限400pf)

  快速模式:400Kbits(总线负载最大容限200pf)

  高速模式:3.4Mbits(大多数设备尚不支持)

2 协议层

2.1 IIC基本读写过程

  (1)主机先产生一个起始信号(S),这时连接到IIC总线上的所有从机都会接收到这个信号。

  (2)起始信号产生后,所有从机就开始等待主机广播从机地址信号,当广播地址与某个设备地址相同时,这个设备就被选中了。没有被选中的设备会忽略之后的数据信号。

  (3)在地址位(A7~A1)之后是传输方向选择位(A0),0:代表主机向从机写数据;1:代表主机由从机读数据。

  (4)从机地址匹配成功后,会发送一个应答信号(A),主机收到应答信号后,主机才继续发送或接收下一数据。若是作为接收方的从机希望结束数据传输,就向主机发送“非应答信号”,主机收到这个信号后会产生一个停止信号,结束信号传输。

  (5)若配置为“写数据”,主机收到应答信号后,开始向从机传输数据(DATA),数据包大小8位,主机每发送完一个字节,都要等待从机应答信号,可以重复传输N个数据。直到主机向从机发送一个停止信号(P),表示数据传输完成(从机想结束接收数据可以回复一个“非应答信号”,主机收到后会发送一个停止信号(P)给从机)。

  (6)若配置为“读数据”,主机收到应答信号后,从机开始向主机传输数据(DATA),数据包大小8位,从机每发送完一个字节,都要等待主机应答信号,可以重复传输N个数据。直到从机向主机发送一个停止信号(P),表示数据传输完成(主机想结束接收数据可以回复一个“非应答信号”,主机收到后会发送

 2.2 起始和停止信号

  SCL高电平期间,SDA下降沿是起始信号;SDA上升沿是停止信号。

2.3 有效数据

   SCL低电平期间,SDA数据交换

   SCL高电平时,SDA数据有效

2.4 应答信号

 2.5 设备地址

  从机地址一般为7位(高四位为器件类型地址,低三位为器件引脚地址,由硬件电路A0、A1、A2电平决定)

2.6 仲裁

  SDA线的仲裁也是建立在总线具有线“与”逻辑功能的原理上的。节点在发送1位数据后,比较总线上所呈现的数据与自己发送的是否一致。是,继续发送;否则,退出竞争。SDA线的仲裁可以保证I2C总线系统在多个主节点同时企图控制总线时通信正常进行并且数据不丢失。总线系统通过仲裁只允许一个主节点可以继续占据总线

猜你喜欢

转载自www.cnblogs.com/Mike2019/p/12530379.html