大家好、
我们收到了一位客户关于 TM4C1294的询问。 据他说、他们尝试将其与 I2C 从设备配合使用、该从设备的时钟在发送 ACK/NAK 位之前延伸、MCU 似乎无法很好地处理该问题。 他认为高速 I2C 中不允许使用该器 件、但根据到该链接 www.i2c-bus.org/.../的信息、可以在低速(100/400kHz)下使用。
他想确认 TM4C 是支持位之间的时钟扩展、还是仅支持 ACK/NAK 位之后的字节之间的时钟扩展。
此致、
Danilo
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
我们收到了一位客户关于 TM4C1294的询问。 据他说、他们尝试将其与 I2C 从设备配合使用、该从设备的时钟在发送 ACK/NAK 位之前延伸、MCU 似乎无法很好地处理该问题。 他认为高速 I2C 中不允许使用该器 件、但根据到该链接 www.i2c-bus.org/.../的信息、可以在低速(100/400kHz)下使用。
他想确认 TM4C 是支持位之间的时钟扩展、还是仅支持 ACK/NAK 位之后的字节之间的时钟扩展。
此致、
Danilo
您好 Danilo、
是的、TM4C129 MCU 支持其 I2C 模块的时钟扩展。 有关详细信息、请参阅数据表。 以下是摘录。
I2C 从设备可以通过定期将时钟拉低来扩展传输、从而创建一个慢速位
传输速率。 I2C 模块具有一个12位可编程计数器、用于跟踪的时长
时钟保持低电平。 计数值的高8位可通过进行软件编程
I2C 主机时钟低电平超时计数寄存器(I2CMCLKOCNT)。 低四位不是
用户可见且为0x0。 在 I2CMCLKOCNT 寄存器中编程的 CNTL 值必须为
大于0x01。 应用程序可以将计数器的八个最高有效位编程到
反映交易中可接受的累计低电平周期。 计数在开始时加载
并在主器件内部总线时钟的每个下降沿进行倒计数。 请注意
为该计数器生成的内部总线时钟以编程的 I2C 速度持续运行
如果 SCL 在总线上保持低电平。 达到终端计数后、主状态机强制中止
在 SCL 和 SDA 释放时发出停止条件、从而在总线上产生中断。
例如、如果 I2C 模块以100kHz 的速度运行、则对 I2CMCLKOCNT 进行编程
寄存器更改为0xDA 将转换为值0xDA0、因为低四位设置为0x0。 这种情况
将转换为3488个时钟的十进制值或34.88ms 的累积时钟低电平周期
100 kHz。
时钟启用时、I2C 主机原始中断状态(I2CMRIS)寄存器中的 CLKRIS 位被置位
超时时间已到、允许主器件开始纠正措施以解决远程从器件问题
状态。 此外、I2C 主机控制/状态(I2CMCS)寄存器中的 CLKTO 位也会置位;该位也会置位
在发送停止条件或 I2C 主机复位期间清零。 原始 SDA 的状态
和 SCL 信号可由软件通过 I2C 主总线中的 SDA 和 SCL 位读取
监视器(I2CMBMON)寄存器、用于帮助确定远程从机的状态。
在 CLTO 条件下、应用软件必须选择尝试总线的方式
恢复。 大多数应用可能会尝试手动切换 I2C 引脚、以强制从器件执行 LET 操作
时钟信号的频率(一种常见的解决方案是尝试在总线上强制停止)。 CLTO 为
在突发传输结束前检测到、并且总线已由主器件成功恢复、
主硬件尝试完成挂起的突发操作。 具体取决于的状态
从器件在总线恢复后、总线上的实际行为会有所不同。 如果从器件恢复到某个状态
它可以确认主器件(基本上、它在总线挂起之前的位置)、它继续在哪里
它离开了。 但是、如果从器件恢复到复位状态(或者如果主器件强制停止导致)
从器件进入空闲状态)、它可能会忽略主器件完成突发操作的尝试
NAK 是主器件发送或请求的第一个数据字节。
由于无法始终预测从器件的行为、因此建议使用应用软件
在 CLTO 期间、始终向 I2C 主机配置(I2CMCR)寄存器中的 STOP 位写入数据
中断服务例程。 这限制了主器件尝试发送或接收的数据量
总线恢复到单个字节、在单个字节在线后、主器件发出 STOP。
另一种解决方案是让应用软件在尝试之前复位 I2C 外设
以手动恢复总线。 此解决方案允许 I2C 主硬件返回到已知的
在尝试恢复阻塞的总线并防止任何不需要的数据之前处于良好(和空闲)状态
出现在线路上。
注:主时钟低电平超时计数器计算 SCL 保持低电平的整个时间
连续。 如果 SCL 在任何时候失效、主时钟低电平超时计数器为
重新载入 I2CMCLKOCNT 寄存器中的值、并从此开始递减计数
值。