Detailed block diagrams and the STM32 I2C communication process

  The STM32 I2C characteristics and architecture

  If we direct control of the STM32 two GPIO pins, SDA and SCL are used, in accordance with the timing requirements of the signal, as direct control of LED lights that control output pins (SDA is read if the reception level when data), it can achieve I2C communications. Similarly, if we follow the requirements of the USART to control pin can also be achieved USART communication. So long as they follow protocol, is the standard of communication, no matter how you achieve it, whether it is produced by ST ATMEL controller or the production of memory, according to the communication standard can interact.

  Since the direct control of GPIO pin when the communication timing generation level, the state of each pin timing needs to be controlled by a CPU, so called "protocol software simulation" mode.

  In contrast, there are "hardware protocol" mode, on the STM32 I2C chip peripherals dedicated to implement the I2C protocol, as long as the configured peripheral, it automatically generates a signal according to the communication protocol requirements, and receive data and cached, so long as the CPU detection of the peripheral status data and access registers, data transmission and reception can be completed. This manner of hardware peripherals I2C protocol reduces the work of the CPU and the software design easier.

  About the STM32 I2C peripherals

  The STM32 I2C peripherals used as host communications and slave supported rates 100Kbit / s and 400Kbit / s, the 7-bit, 10-bit device address, a DMA data transfer, and has a data checking function. It also supports I2C peripheral SMBus2.0 agreement, SMBus and I2C protocol similar, mainly used in laptop battery management.

  The STM32 I2C architecture analysis

  Figure 24-9 I2C Chart

  

 

  Communications pin

  I2C architectures are all expanded in accordance with FIG SCL line and the SDA line on the left side (where the warning signal line for the SMBUS SMBA, I2C communication is not used). A plurality of chip STM32 I2C peripherals thereof I2C communication signals lead to different GPIO pins, must be configured to use these designated pins Table 24-1. About GPIO pin multiplexing function to specification shall prevail.

  

 

  Clock control logic

  SCL 线的时钟信号,由I2C 接口根据时钟控制寄存器(CCR)控制,控制的参数主要为时钟频率。配置I2C 的CCR 寄存器可修改通讯速率相关的参数:

  可选择I2C 通讯的“标准/快速”模式,这两个模式分别I2C 对应100/400Kbit/s 的通讯速率。

  在快速模式下可选择SCL 时钟的占空比,可选Tlow/Thigh=2 或Tlow/Thigh=16/9模式,我们知道I2C 协议在SCL 高电平时对SDA 信号采样,SCL 低电平时SDA准备下一个数据,修改SCL 的高低电平比会影响数据采样,但其实这两个模式的比例差别并不大,若不是要求非常严格,这里随便选就可以了。

  CCR 寄存器中还有一个12 位的配置因子CCR,它与I2C 外设的输入时钟源共同作用,产生SCL 时钟,STM32 的I2C 外设都挂载在APB1 总线上,使用APB1 的时钟源PCLK1,SCL 信号线的输出时钟公式如下:

  

 

  计算结果得出CCR 为30,向该寄存器位写入此值则可以控制IIC 的通讯速率为400KHz,其实即使配置出来的SCL 时钟不完全等于标准的400KHz,IIC 通讯的正确性也不会受到影响,因为所有数据通讯都是由SCL 协调的,只要它的时钟频率不远高于标准即可。

  数据控制逻辑

  I2C 的SDA 信号主要连接到数据移位寄存器上,数据移位寄存器的数据来源及目标是数据寄存器(DR)、地址寄存器(OAR)、PEC 寄存器以及SDA 数据线。当向外发送数据的时候,数据移位寄存器以“数据寄存器”为数据源,把数据一位一位地通过SDA 信号线发送出去;当从外部接收数据的时候,数据移位寄存器把SDA 信号线采样到的数据一位一位地存储到“数据寄存器”中。若使能了数据校验,接收到的数据会经过PCE 计算器运算,运算结果存储在“PEC 寄存器”中。当STM32 的I2C 工作在从机模式的时候,接收到设备地址信号时,数据移位寄存器会把接收到的地址与STM32 的自身的“I2C 地址寄存器”的值作比较,以便响应主机的寻址。STM32 的自身I2C 地址可通过修改“自身地址寄存器”修改,支持同时使用两个I2C 设备地址,两个地址分别存储在OAR1 和OAR2 中。

  整体控制逻辑

  整体控制逻辑负责协调整个I2C 外设,控制逻辑的工作模式根据我们配置的“控制寄存器(CR1/CR2)”的参数而改变。在外设工作时,控制逻辑会根据外设的工作状态修改“状态寄存器(SR1 和SR2)”,我们只要读取这些寄存器相关的寄存器位,就可以了解I2C的工作状态。除此之外,控制逻辑还根据要求,负责控制产生I2C 中断信号、DMA请求及各种I2C 的通讯信号(起始、停止、响应信号等)。

  通讯过程

  使用I2C 外设通讯时,在通讯的不同阶段它会对“状态寄存器(SR1 及SR2)”的不同数据位写入参数,我们通过读取这些寄存器标志来了解通讯状态。

  主发送器

  见图 24-10。图中的是“主发送器”流程,即作为I2C 通讯的主机端时,向外发送数据时的过程。

  图 24-10 主发送器通讯过程

  

 

  主发送器发送流程及事件说明如下:

  (1) 控制产生起始信号(S),当发生起始信号后,它产生事件“EV5”,并会对SR1 寄存器的“SB”位置1,表示起始信号已经发送;

  (2) 紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”及“EV8”,这时SR1 寄存器的“ADDR”位及“TXE”位被置1,ADDR 为1 表示地址已经发送,TXE 为1 表示数据寄存器为空;

  (3) 以上步骤正常执行并对ADDR 位清零后,我们往I2C 的“数据寄存器DR”写入要发送的数据,这时TXE 位会被重置0,表示数据寄存器非空,I2C 外设通过SDA 信号线一位位把数据发送出去后,又会产生“EV8”事件,即TXE 位被置1,重复这个过程,就可以发送多个字节数据了;

  (4) 当我们发送数据完成后,控制I2C 设备产生一个停止信号(P),这个时候会产生EV8_2 事件,SR1 的TXE 位及BTF 位都被置1,表示通讯结束。

  假如我们使能了I2C 中断,以上所有事件产生时,都会产生I2C 中断信号,进入同一个中断服务函数,到I2C 中断服务程序后,再通过检查寄存器位来判断是哪一个事件。

  主接收器

  再来分析主接收器过程,即作为I2C 通讯的主机端时,从外部接收数据的过程,见图24-11。

  图 24-11 主接收器过程

  

 

  主接收器接收流程及事件说明如下:

  (1) 同主发送流程,起始信号(S)是由主机端产生的,控制发生起始信号后,它产生事件“EV5”,并会对SR1 寄存器的“SB”位置1,表示起始信号已经发送;

  (2) 紧接着发送设备地址并等待应答信号,若有从机应答,则产生事件“EV6”这时SR1 寄存器的“ADDR”位被置1,表示地址已经发送。

  (3) 从机端接收到地址后,开始向主机端发送数据。当主机接收到这些数据后,会产生“EV7”事件,SR1 寄存器的RXNE 被置1,表示接收数据寄存器非空,我们读取该寄存器后,可对数据寄存器清空,以便接收下一次数据。此时我们可以控制I2C 发送应答信号(ACK)或非应答信号(NACK),若应答,则重复以上步骤接收数据,若非应答,则停止传输;

  (4) 发送非应答信号后,产生停止信号(P),结束传输。

  在发送和接收过程中,有的事件不只是标志了我们上面提到的状态位,还可能同时标志主机状态之类的状态位,而且读了之后还需要清除标志位,比较复杂。我们可使用STM32 标准库函数来直接检测这些事件的复合标志,降低编程难度。

 

视频资料

(stm32直流电机驱动)
http://www.makeru.com.cn/live/1392_1218.html?s=45051

PWM脉宽调制技术
http://www.makeru.com.cn/live/4034_2146.html?s=45051
基于STM32讲解串口操作
http://www.makeru.com.cn/live/1758_490.html?s=45051

( ADC读取光照传感器)
http://www.makeru.com.cn/live/1392_1004.html?s=45051

Guess you like

Origin www.cnblogs.com/923327iu/p/12073485.html