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:是否复位与软件复位类似的 I2C 通道?

Guru**** 2537610 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1233446/tm4c1294ncpdt-resetting-an-i2c-channel-similar-to-a-software-reset

器件型号:TM4C1294NCPDT

您好、我们有一个定制电路板在 I2C 通信期间挂起、这似乎是随机发生的、在这种情况下 SCL 和 SDA 都无限期地保持高电平、并且 I2CMCS 寄存器显示 I2C_MC_BUS 和 I2C_MC_BUSBSY 都设置为1。

我们认为这可能是硬件问题、该硬件问题目前正在调查中、但是、最好也在软件中进行重置以解决该问题。

我已经尝试 调用 SysCtlPeripheralDisable (),然后调用 SysCtlDelay (2000),再调用  SysCtlPeripheralEnable ()并重新初始化 I2C 通道,但没有修复它。

我还尝试了以下方法:

// Disable the I2C module
MAP_I2CMasterDisable(I2C9_BASE);

// Clear any pending interrupts
MAP_I2CMasterIntClear(I2C9_BASE);

// Re-enable the I2C module
MAP_I2CMasterEnable(I2C9_BASE)

这也没有解决这个问题。

不过、我们发现通过调用 SysCtlReset ()执行 Tiva 软件复位确实会导致该通道上的 I2C 通信再次开始。

是否可以执行 SysCtlReset ()()正在执行的操作,但只能执行特定的 I2C 通道?

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

    您好、Terence:

     请尝试 SysCtlPeripheralReset ()。  

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

    非常感谢 。  我们刚刚尝试了 SysCtlPeripheralReset (SYSCTL_Periph_I2C9)、运气不好。  它 的结果与 SysCtlReset ()不同。

    问题:调用  SysCtlPeripheralReset (SYSCTL_Periph_I2C9)后  ,我应该像启动时一样通过调用 SysCtlPeripheralEnable  ()、SysCtlPeripheralEnable ( )、GPIOPinConfigure ()、MAP_I2CMasterInitExpClk ()等来重新初始化 I2C?

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

    您好、Terence:

    问题:调用  SysCtlPeripheralReset (sysctl_Periph_I2C9)后  ,我应该通过调用 SysCtlPeripheralEnable   ()、SysCtlPeripheralEnable ()、GPIOPinalEnable ()、MAP_I2CMSterInitClk ([/ quote)重新初始化 I2C,还是不这样?

    是的、您需要重新初始化 I2C、但我不确定如果从器件也处于挂起状态、这是否能完全解决问题。 原因是主器件已经因为任何原因丢失了与从器件的同步。 您之前提到过、可能会出现一些硬件问题。 从器件可能处于未完成(非空闲)状态。 例如、从机可能需要来自主机的另一个时钟、或者等待来自主机的停止位。 因此、您不仅需要重新初始化主器件、我认为您还应该重新初始化从器件、以便将其从挂起状态中断。  

    我认为在这篇文章中、Bob 帮助您解决了一个类似的问题、您的问题得到了解决。  

    https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/954162/tm4c1294ncpdt-problems-resetting-i2c-communication

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

    你好,查尔斯,谢谢你的答复。  调用  SysCtlPeripheralReset ()后重新初始化导致"修复"问题,或至少让 I2C 通信继续。  但是、我们仍然认为这是一个硬件问题、因为我们 在不同电路板和各种其他外设上使用这些相同的传感器以完全相同的方式完成了很多 I2C 通信 、从未出现过这个问题。

    是的,你从几年前与鲍勃·克罗斯比引用的帖子确实是我的想法。   但也存在一些差异:   在这个最近的例子中、我们没有看到 I2C_MASTER_ERR_ARB_LOSS 错误。  此外,在这种情况下,线条似乎是卡在高,我 没有想到一点拆裂会修复.  我希望位拆裂在 SDA 卡在低电平、但不像在这种情况下卡在高电平的情况下有所帮助。

    无论如何、我们非常感谢您对此提供的帮助。  谢谢你。