STM32 IIC 流程

 

1、IIC简介

 

第二节代码会用到该部分内容,对于IIC来说,从机是不能主动发送数据的,开始条件都是由主机生成。 

 

1.1、主机发送数据流程

 

  1) 主机在检测到总线为“空闲状态”(即 SDA、SCL 线均为高电平)时,发送一个启动信号“S”,开始一次通信的开始

  2) 主机接着发送一个命令字节。该字节由 7 位的外围器件地址和 1 位读写控制位 R/W组成(此时 R/W=0)

  3) 相对应的从机收到命令字节后向主机回馈应答信号 ACK(ACK=0)

  4) 主机收到从机的应答信号后开始发送第一个字节的数据

  5) 从机收到数据后返回一个应答信号 ACK

  6) 主机收到应答信号后再发送下一个数据字节

  7) 当主机发送最后一个数据字节并收到从机的 ACK 后,通过向从机发送一个停止信号P结束本次通信并释放总线。从机收到P信号后也退出与主机之间的通信

 

1.2、主机接收数据流程

 

  1) 主机发送启动信号后,接着发送命令字节(其中 R/W=1)

  2) 对应的从机收到地址字节后,返回一个应答信号并向主机发送数据

  3) 主机收到数据后向从机反馈一个应答信号

  4) 从机收到应答信号后再向主机发送下一个数据 

  5) 当主机完成接收数据后,向从机发送一个“非应答信号(ACK=1)”,从机收到ASK=1 的非应答信号后便停止发送

  6) 主机发送非应答信号后,再发送一个停止信号,释放总线结束通信

 

1.3、处理器的I2C模块会在如下所述的情况产生中断信号

 

  RX_UNDER   当处理器通过IC_DATA_CMD寄存器读取接收缓冲器为空时置位

  RX_OVER    当接收缓冲器被填满,而且还有数据从外设发送过来时被置位;缓冲器被填满后接收的数据将会丢失

  RX_FULL    当接收缓冲器达到或者超过IC_RX_TL寄存器中规定的阈值时被置位;当数据低于阈值时标志位将被自动清除

  TX_OVER    当发送缓冲器被填满,而且处理器试图发送另外的命令写IC_DATA_CMD寄存器时被置位

  TX_EMPTY   当发送缓冲器等于或者低于IC_TX_TL寄存器中规定的阈值时被置位;当数据高于阈值时标志位将被自动清除

 

  TX_ABRT    当i2c模块无法完成处理器下达的命令时被置位,有如下几种原因:

                          * 发送地址字节后没有从机应答

                          * 地址识别成功后主机发送的数据从机没有应答

                          * 当i2c模块只能作为从机时试图发送主机命令

                          * 当模块的RESTART功能被关闭,而处理试图完成的功能必须要RESTART功能开启才能完成

                          * 高速模块主机代码被应答

                          * START BYTE被应答

                          * 模块仲裁失败

                          无论标志位什么时候被置位,发送缓冲器和接收缓冲器的内容都会被刷新 

  ACTIVITY   表明i2c模块正在活动,这个标志位将会一直保持直到用以下4种方式清除:

                          * 关闭i2c

                          * 读取IC_CLR_ACTIVITY寄存器

                          * 读取IC_CLR_INTR寄存器

                          * 系统重启

                          即使i2c模块是空闲的,这个标志仍然需要被置位直到被清除,因为这表明i2c总线上有数据正在传输

 

需要用到的:

 

  RD_REQ     当i2c模块作为从机时并且另外的主机试图从本模块读取数据时被置位  

  RX_DONE    当i2c模块作为从机发送数据时,如果主机没有应答则置位;这种情况发生在i2c模块发送最后一个字节数据时,表明传输结束

  STOP_DET   表明i2c总线上产生了STOP信号,无论模块作为主机还是从机

  START_DET  表明i2c总线上产生了START信号,无论模块作为主机还是从机

 

https://www.amobbs.com/forum.php?mod=viewthread&tid=5376328

https://blog.csdn.net/liwei16611/article/details/75258222

相关文章:

  • 2021-06-09
  • 2022-12-23
  • 2021-07-28
  • 2021-10-18
  • 2021-05-01
  • 2021-12-08
  • 2021-12-23
猜你喜欢
  • 2021-11-22
  • 2021-04-04
  • 2021-08-03
  • 2022-01-07
  • 2021-06-27
  • 2021-04-17
  • 2021-12-18
相关资源
相似解决方案