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.

[参考译文] TM4C1294NCPDT:时钟扩展

Guru**** 2551110 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/945675/tm4c1294ncpdt-clock-stretching

器件型号:TM4C1294NCPDT

大家好、

我们收到了一位客户关于 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 寄存器中的值、并从此开始递减计数
    值。