STM32 I2C数据接收机制概述

一 I2C从设备接收数据原理

在I2C通信中,主设备向从设备发送数据的标准过程确实包括开始信号(START)、从设备地址加上读/写方向位、数据本身,以及在数据传输结束后的一个停止信号(STOP)。这个过程概括如下:

  1. 开始信号(START):主设备通过将时钟线(SCL)保持高电平的同时将数据线(SDA)从高电平拉低产生一个下降沿,标志着一次新的传输开始。

  2. 地址/方向位:紧接着开始信号之后,主设备会发送一个7位或10位的从设备地址,后面跟着一个读/写方向位(R/W)。如果主设备打算向从设备写入数据,则方向位为0;如果是请求读取数据,则方向位为1。

  3. 数据:在从设备通过发出应答信号(ACK)确认其地址和方向位之后,主设备开始发送数据字节。对于每个发送的数据字节,从设备都会回复一个应答位。

  4. 停止信号(STOP):在所有数据发送完毕后,为了结束这次传输,主设备会发出停止信号。这通过将SCL保持在高电平,然后将SDA从低电平释放为高电平(产生上升沿)来实现。停止信号标志着总线交易的完成,释放总线以便其他主设备或相同的主设备开始新的传输。

总之,在大多数情况下,为了完整地完成一次数据传输并确保数据完整性,主设备在发送完数据后应当发出停止信号。但是,也有例外情况,比如当主设备需要在同一事务中连续访问多个从设备或进行连续读写操作时,它可能会发出重复开始信号(REPEAT START, Sr)而不是停止信号,以保持对总线的控制而不释放总线状态。

二 从设备接收数据流程

在I2C通信中,当主设备向从设备发送数据时,整个过程涉及多个步骤,包括硬件和软件层面的交互。以下是主设备发送开始信号后,从设备的详细流程,涵盖中断处理、接收数据寄存器更新等方面:

1. 开始信号检测

  • 硬件层面:从设备通过监视SCL(串行时钟线)和SDA(串行数据线)的电平变化来检测开始信号。当SCL为高电平时,SDA从高到低的转换标志着开始信号的开始。
  • 中断触发:一旦检测到开始信号,从设备的硬件逻辑通常会设置一个中断标志(如START或ADDR中断),通知处理器有新的I2C事务开始。

2. 地址匹配

  • 地址发送:主设备在开始信号后紧接着发送从设备的7位或10位地址,加上读/写方向位。
  • 地址比较:从设备的硬件电路会比较接收到的地址与其预设地址是否匹配。
  • 中断处理:如果地址匹配,从设备通常会通过拉低SDA线一周期来发送应答(ACK),同时设置ADDR中断或ACK中断,通知CPU地址已被正确识别。

3. 中断服务例程(ISR)执行

  • 中断响应:CPU响应中断,进入中断服务例程(ISR)。
  • 状态处理:ISR中,首先会检查中断源(如ADDR中断),并根据中断类型进行处理。对于地址匹配中断,会准备接收数据,例如配置接收模式,清零接收计数器(如果有的话),并使能接收中断(如RXI中断)。

4. 数据接收

  • 硬件接收:随着主设备开始发送数据字节,从设备的硬件自动将SDA线上的数据采样,并在每个时钟脉冲(SCL的上升沿)上移位接收。
  • 数据存储:接收到的每个字节数据通常会自动加载到从设备的接收数据寄存器(如RXDR)中。
  • 中断触发:每当一个字节完全接收并存储后,硬件可能会设置一个接收完成中断(RXI),表明有新数据可用。

5. 中断服务例程处理接收数据

  • 中断响应:CPU再次响应RXI中断,进入ISR。
  • 数据处理:在ISR中,软件从RXDR中读取接收到的数据,并根据应用需求进行处理,如存储到内存或进行计算。
  • 应答发送:根据应用逻辑,从设备可能需要通过拉低SDA线一个时钟周期来发送ACK(如果还有更多数据待接收),或者不拉低SDA线发送NACK(如果数据接收完成)。
  • 状态更新:更新接收计数器(如XferCount),判断是否所有预期的数据都已接收完成。

6. 停止信号与传输结束

  • 停止信号检测:主设备发送STOP信号后,从设备会检测到SCL为高电平且SDA由低变高的情况,表示传输结束。
  • 状态更新与清理:从设备可能需要在软件层面响应这一变化,例如清除中断标志,重置状态机,准备下一次通信。

整个过程中,硬件和软件紧密配合,确保数据的可靠传输和处理。从设备的中断处理机制是确保及时响应和高效处理的关键。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值