ZHCUAN6E October 2022 – May 2025 MSPM0L1105 , MSPM0L1106 , MSPM0L1116 , MSPM0L1117 , MSPM0L1227 , MSPM0L1227-Q1 , MSPM0L1228 , MSPM0L1228-Q1 , MSPM0L1303 , MSPM0L1304 , MSPM0L1304-Q1 , MSPM0L1305 , MSPM0L1305-Q1 , MSPM0L1306 , MSPM0L1306-Q1 , MSPM0L1343 , MSPM0L1344 , MSPM0L1345 , MSPM0L1346 , MSPM0L2227 , MSPM0L2227-Q1 , MSPM0L2228 , MSPM0L2228-Q1
所有总线事务都带有所需的确认时钟周期,该时钟周期由控制器产生。在确认周期中,发送器(可以是控制器或目标)会释放 SDA 线。为了响应传输,接收器必须在应答时钟周期过程中拉低 SDA。确认周期必须符合数据有效性要求。
当目标接收器没有确认目标地址时,SDA 必须由目标方保持为高电平,这样控制器可以产生一个停止条件并中止当前传输,或者产生一个重复的启动条件来启动一个新的传输。如果控制器器件在传输期间充当接收器,则它负责确认目标进行的每次传输。因为控制器控制传输中的字节数,所以它会通过不对最后一个数据字节产生确认来向目标发送器发出数据结束的信号。然后目标发送器必须释放 SDA 以允许控制器生成停止或重复的启动条件。
目标可以手动或自动生成 ACK/NACK。当 I2Cx.SACKCTL.ACKOEN=0 时,目标将发送自动 ACK。请注意,由于 FIFO,器件将自动接收并确认所有字节,直到 RX FIFO 已满。设置 SACKCTL.ACKOEN =1 会启用手动 ACK。当不需要自动 FIFO 接收时,可以使用手动 ACK 覆盖来评估每个接收到的字节或减慢通信速度。手动 ACK 覆盖操作启用后,在最后一个数据位之后,I2C 目标模块的时钟被拉低,直到该 SACKCTL.ACKOVAL 被写入指示的响应。新数据的接收由 SRXDONE 中断标志指示。
如果控制器在发送数据时接收到 NACK,则 RIS 寄存器中的 NACK 和 MTXDONE 位将置位。如果 FIFO 中仍有数据,TXEMPTY 位将不会置位,从而通知软件可能需要清空 TX FIFO。