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.

[参考译文] TMS320F28069:F28069 i2c 挂起问题

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/732244/tms320f28069-f28069-i2c-hang-up-issue

器件型号:TMS320F28069

你好

我有一个 i2c 数据、CLK 将保持低电平问题。 我有一个逻辑分析仪来捕获波形。 我从  从器件(28069)执行一个到主器件(PC 工具)的64字节数据传输。

从我的逻辑分析仪中、我注意到某些字节上存在噪声。 此噪声发生在14个字节上、数据和 CLK 挂起在19个字节上。 19字节只有3个 CLK 信号。

我注意到逻辑分析仪在15字节显示"写入地址"、而不是它应该显示的字节数据。

我 不确定 DSP 是否将噪声视为 起始位??

请 帮您解决此问题? 我 知道 为什么数据和 CLK 同时保持低电平?

我的 I2CMDR 设置为28069上的0x0020。

谢谢你。

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

    每次迭代时、该噪声和挂起是否在同一个点发生? 看起来所看到的噪声仅影响逻辑分析仪。 从器件和主器件看起来正常、完成字节并移至下一个字节。

    至于线路保持问题、SCL 和 SDA 是否都保持低电平? 通信会在一段时间后继续还是无限期保持低电平? 您能否在我开始保持线的末尾提供波形特写?

    在这种挂起发生后、可能还需要检查 C2000的 I2CMDR 和 I2CSTR 寄存器、以了解 I2C 模块的状态。

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

    大家好、Kevin

    当我轮询这个64字节命令时、这个噪声并不总是在同一个位置发生。

    发生此问题时、数据和 CLK 将同时保持低电平、并在超时过期前无限期保持低电平。我运行 i2c 复位(I2CMDR.BIT.IRS=1)、以便在超时释放 i2c 总线。  

    我的器件正在为服务器供电并同时运行 i2c 通信、我无法在实时时监测 I2CMDR 和 I2CSTR 寄存器。

    请参阅我的附加文件、如下所示。 谢谢你。

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

    您好、Jackson、

    感谢您提供额外的屏幕截图。 逻辑分析仪上出现了两个问题、我将在下面单独讨论。

    逻辑分析仪捕获的 SDA 线上的中字节噪声。

    SDA 线上捕获的噪声实例无疑会使逻辑分析仪混淆、这就是顺序字节(蓝色突出显示的十六进制格式)完全未对齐的原因。 但是、这似乎不会破坏实际的 I2C 通信(大概是这样)、因为之后的时钟和数据继续对几个字节有效。 更大的噪声可能会导致实际的 I2C 通信损坏、即字节中间可能会出现意外的启动/停止条件。 C2000 I2C 模块确实具有一些内部噪声滤波功能来防止这种情况、但理想情况下、您希望在系统设计中尽可能限制 I2C 总线上的噪声。

    SCL 和 SDA 线被无限期地保持在低电平中间字节。

    此问题可能是由线路上的噪声引起的、这会导致 i2c 通信超出规范、从而导致总线混乱。

    下面的 wiki 中的"通过保持 SDA 为低电平挂起总线的外部从器件"部分可能对您有所帮助。 背景是 C2000器件是否是主器件、但我认为它可能仍会为您提供一些见解和想法。

    http://processors.wiki.ti.com/index.php/I2C_Tips

    您有一些问题:

    1.您的系统环境是否固有噪声?

    2.主设备在 SCL 上的驱动频率是多少?

    3、SDA/SCL 线路上是否都有适当的上拉电阻? 如果您使用的是内部 C2000上拉电阻器、我建议您针对 I2C 使用该上拉电阻器。

    4.你知道总线电容吗? 您是否有任何串联电阻来帮助解决电压尖峰问题(可以尝试一下、相关资源可在线获取)?

    最棒的

    Kevin

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

    感谢您的链接。

    请参阅我的更新、如下所示。

    1.您的系统环境是否固有噪声?
    是的、我有三个并联的电源单元为服务器供电、它们运行 i2c 通信。

    2.主设备在 SCL 上的驱动频率是多少?
    我的主设备通信频率为100K。

    3、SDA/SCL 线路上是否都有适当的上拉电阻? 如果您使用的是内部 C2000上拉电阻器、我建议您针对 I2C 使用该上拉电阻器。
    是的、我们在 SDA/SCL 上都有10k 上拉电阻。

    4.你知道总线电容吗? 您是否有任何串联电阻来帮助解决电压尖峰问题(可以尝试一下、相关资源可在线获取)?
    我们在 SDA/SCL 上都有一个 RC 滤波器(22R 和10pF)。 我们的 EE 工程师将帮助您尝试此方法。

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

    好的、听起来不错。 假设您不能将 I2C 信号从任何引入噪声的信号中移除、那么深入研究噪声抗扰度的形式可能是解决此问题的最佳选择。

    使用示波器而不是数字逻辑分析仪观察波形可能会更清楚地说明这一点。

    请随时向我们发布!

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

    您好、Allen

    请参阅我的更新、如下所示

    我有2个 PSU (电源设备)并联、并与 PC 工具(主设备)进行通信。 我的主设备始终使用 PSU_#1轮询数据。

    PSU #2始终处于空闲状态。

    当问题发生时(主 CLK 和数据保持低电平)、我们注意到是 PSU#2上的信号。 此信号似乎导致 PSU#2看到

    常规调用、并在 I2C 总线上强制进行响应。 几个字节后、PSU#2似乎挂起。

    观察结果。

    1.我只使用 PSU#1轮询数据、但 PSU#2上的意外信号会导致它响应(常规调用)、即使它处于空闲状态也是如此。

    根据信号、I2C 总线由于 PSU#2 (空闲状态)而不是 PSU#1 (工作状态)而挂起

    问题:

    I2C 文档对 F28068常规调用的描述很少、您能否分享更多有关这方面的文档?

    2.由于常规调用,导致 PSU#2回复的意外信号。 在我们的硬件工程师能够解决此意外信号之前、我们可以对固件端的"常规调用"执行什么操作、即使此命令意外发生也是如此? 我们是否可以拒绝此命令?

    请提供相关建议。 谢谢你。  

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

    常规调用不是特定于我们的 I2C 模块的东西。 如需更多信息、请阅读 NXP (以前为飞利浦) I2C 规范。

    常规调用仅用于将"一般"信息从主器件发送到所有从器件、以及需要信息 ACK 的任何从器件。 不需要它的从器件将忽略该信息。 不应有任何数据从从器件发送回主器件。

    为什么要使用常规调用? 我想 PSU 上的 I2C 模块具有特定的从地址。

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

    我们不使用常规调用命令。 主器件始终从 PSU#1请求一个64字节数据的命令。 0x00数据是64字节的一部分。

    Pus#2上出现意外信号、导致开始位、然后 PSU#2会在 I2C 总线上看到0x00数据。

    1. 0x00数据是发送到主机的 PSU#1 (地址0x40)的一部分。
    2.意外信号导致 PSU#2 (地址0x41)上的 Start 位

    实际上、PSU 后面有一个热插拔 IC (PCA9512A)。 然后在热插拔 IC 之后将 I2C 并联。

    我们注意到意外信号(导致起始位)似乎被 PSU 2上的热插拔 IC 上拉(在它之前、它是一个小毛刺脉冲)。
    从波形中、PSU#1未看到此信号、但它出现在 PSU#2上。

    顺便说一下、我们只希望主器件与 PSU#1通信。
    在 PSU#1将64字节数据发送回主器件的同时、PSU#2请参阅常规调用、然后它响应 I2C 总线。
    这会导致 I2C 总线混淆。

    因为主设备仅与 PSU#1通信。 我们不希望 PSU#2响应由(热插拔 IC 意外行为)引起的常规调用命令
    您是否建议任何固件解决方案、PSU#2不会影响 I2C 总线(主设备正在与 PSU#1通信)?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Jackson Chen、

    好的、我看到了。 在并行 I2C 接口之前、是否在 PSU#1和#2两侧都有热插拔? 您是否知道热插拔导致 SDA 线像这样变为高电平的原因? 如果这是意外行为、我会联系 NXP。

    出于好奇、如果只有主 C2000和 PSU#1正在通信、为什么 I2C 接口上的 PSU#2会进行通信?

    至于固件、我真的不明白为什么 PSU #2在 I2C 总线上、您能进一步解释一下、以便我能提供更好的建议吗? 您在主设备接口上是否有此问题的屏幕截图? 该干扰不会出现在 PSU#1数据线路上、因此我想知道它是否出现在主器件的线路上。

    如果在主接口上发生这种意外启动情况、我认为您没有太多可以忽略它的事情。

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

    很抱歉耽误你的回答。

    我们将三个电源并联在一起、并为服务器供电。 主设备仅与 PSU 1通信。
    当问题发生时、我们可以观察到 PSU 2和 PSU 3上出现意外信号。 在师父或上没有发现奇怪的辛加尼尔
    PSU 1。
    这种意外的 siganl 仅出现在热插拔 IC 的输出侧。 我们认为该信号是由热插拔 IC 引起的。

    1.我们已将 PCA9512A (热插拔)替换为 PCA9617A (中继器)。 执行此操作后、此问题将消失。
    2.向 NXP FAE 发送了一个会议以讨论此问题。

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

    不用担心! 好的、很高兴听到您能够找到可能的根本原因。

    最棒的
    Kevin