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.

[参考译文] CC2640R2F:I2C 挂起、无法恢复

Guru**** 2389170 points
Other Parts Discussed in Thread: CC2640, CC2640R2F, CC2544
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/803551/cc2640r2f-i2c-hang-and-cannot-recovery

器件型号:CC2640R2F
主题中讨论的其他部件:CC2640CC2544

大家好、

我们的客户使用 CC2640R2连接 I2C 从器件。 有时、CC2640R2 I2C 将挂起、无法恢复。

下面显示了 i2c 事务失败时的波形。

(1)故障事务如下所示。

(2) 在 i2c 事务失败后、cc2640执行 i2c 传输、波形如下所示。

我们找到了 mstat 寄存器(表下方)和 DATAACK_N 位 Keep 以报告1。

 

我是否可以知道如何通过设置 i2c regisgters 来清除此位? 谢谢

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

    CC2640R2F 与哪个器件通信?
    您是否尝试过与任何其他 I2C 器件通信?
    您使用的是哪款 SDK?
    您使用的是什么硬件?
    如果是定制硬件、您可以在 LaunchPad 上复制吗?

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

    CC2640R2F 与哪个器件通信?
    -->键盘 IC

    您是否尝试过与任何其他 I2C 器件通信?
    -->否 在此项目中、CC2640R2将获取键盘数据并传输到 CC2544。

    您使用的是哪款 SDK?
    -> SDK v1.50。 我们在 SDK v3.10上发现了一个已知的 I2C 问题。 因此,我们将 SDK v3.10中的 I2C 驱动程序集成到客户代码中。

    您使用的是什么硬件?
    —>CC2640R2+键盘 IC

    如果是定制硬件、您可以在 LaunchPad 上复制吗?
    —>还没有

    请重点说明在恢复 I2C 时、为什么 mstat 寄存器和 DATAACK_N 位始终保持报告1。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jerry、

    寄存器表示发送的数据没有被应答。 ACK 期间还缺少时钟脉冲、因此可能已连接这些脉冲。 您是否了解了时钟脉冲缺失的原因? 从器件是否出于某种原因进行时钟拉伸?

    信号是否会以某种方式失真? 您使用的上拉值是多少、I2C 的速度是多少?

    我没有完全按照你对所发生的情况的解释。 在逻辑分析仪捕获1中、CC2640正在尝试向键盘 IC 写入数据、对吧? 并且 DATACK 位在数据字节传输完成后置位? 此时 I2C 驱动程序代码中会发生什么情况?

    此致、
    Fredrik
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您是否了解了时钟脉冲缺失的原因? 从器件是否出于某种原因进行时钟拉伸?
    =>我不会问为什么缺少时钟脉冲。 时钟由 cc2640生成、当我们对 I2C 寄存器执行 R/W 操作时、I2C 硬件应生成9个时钟。  根据波形、信号在8个时钟后保持高电平、因此它不会被从器件拉伸。
     
    信号是否会以某种方式失真?  
    您使用的上拉值是多少、I2C 的速度是多少?
    =>在对 I2C 事务进行应力测试期间、我们从 LA 捕获 I2C 波形。 因此、我们没有来自示波器的波形、以确保 I2C 信号没有失真。
     目前、客户使用1.5k 进行400k I2C 事务。
     我们已经检查了 I2C 信号质量、它看起来很好。
    我没有完全按照你对所发生的情况的解释。 在逻辑分析仪捕获1中、CC2640正在尝试向键盘 IC 写入数据、对吧?  
    =>是的、cc2640尝试发送32个字节、但在将第二个字节写入器件时信号损坏。
    并且 DATACK 位在数据字节传输完成后置位?  
    =>是的、在数据字节被传输后、DAYACK 始终被置位。
    此时 I2C 驱动程序代码中会发生什么情况?  
    =>(A) API 读取错误状态(0x804)
        (b)如果错误状态被置位、则发送 STOP。

    我的观点是、为什么 DATAACK 总是报告"1"。  我们尝试通过 JTAG 将所有命令(如下所示)发送到0x804主控制寄存器

    但 DAYACK 位始终置位。

    #define I2C_MASTER_CMD_BURST_RECEIVE_CONT0x00000009    

    由  I2CMasterControl()引用

    #define I2C_MASTER_CMD_BURST_RECEIVE_ERROR_STOP   0x00000004

    由  I2CMasterControl()引用

    #define I2C_MASTER_CMD_BURST_RECEIVE_FINISH   0x00000005

    由  I2CMasterControl()引用

    #define I2C_MASTER_CMD_BURST_RECEIVE_START   0x0000000b

    由  I2CMasterControl()引用

    #define I2C_MASTER_CMD_BURST_SEND_CONT0x00000001    

    由  I2CMasterControl()引用

    #define I2C_MASTER_CMD_BURST_SEND_ERROR_STOP   0x00000004

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

    DATACK 位表示从机未应答数据。 这很可能以某种方式连接到缺失的时钟脉冲。

    您能否尝试将数据速率更改为100kbps、看看它是否发生了任何变化?

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

    您好、Fredrik、

    客户需要高报告率。 它们不能接受100KHz 的 I2C。 对于400KHz 的 I2C 是否有任何限制?

    您能否重点说明该位不清楚的原因?

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

    您需要了解数据未正确进行 ACKED 的原因。 以较低的时钟速度运行可能会揭示物理信号是否存在问题。 最好测试另一个 I2C 从设备、以查看问题是否与从设备有关。

    当您运行一个新的开始条件时、DATACK 位是否不清零?

    此致、
    Fredrik