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.

[参考译文] TM4C129ENCPDT:复位引脚复位与软件启动的复位或 SSI 端口上的看门狗复位之间的关系

Guru**** 2613335 points
Other Parts Discussed in Thread: TM4C129ENCPDT

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/770673/tm4c129encpdt-impact-of-reset-by-reset-pin-vs-software-initiated-reset-or-watchdog-reset-on-ssi-port

器件型号:TM4C129ENCPDT

您好!

我们只是遇到了一个奇怪的问题、无法解释原因。

微控制器使用其 SSI 端口之一与外部串行闪存芯片通信。 在静态测试下、微控制器和闪存芯片之间的通信偶尔会进入不起作用状态。 摆脱这种情况的唯一方法是对单元进行电源复位或通过复位引脚对单元进行复位。 其他复位方法(我们尝试了软件启动的复位和看门狗复位)不会破坏该条件。

在这种情况下、我们还尝试仅为闪存芯片提供电源复位、但这不会解决问题。

看起来 MCU 的 SSI 端口卡在某个错误状态下、无法恢复软件启动的复位或看门狗复位。 只有电源复位和复位引脚复位才能解决问题。

有人有类似的经验或可以提出一些建议? 非常感谢!

天列

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

    当您说软件复位时、您是指使用 APINT 寄存器中的 SYSRESREQ 位请求软件系统复位吗? 软件复位(通过调用 SysCtlReset)应该复位大量器件、包括内核和外设。 或者您是否使用 SysCtlPeripheralReset() API 执行软件外设复位? 如果在 SSI 上使用 SysCtlPeripheralReset、那么只有 SSI 被复位、而没有其他内容。 假设引脚复用逻辑存在故障、那么 SSI 上的 SysCtlPeripheralReset 将不会复位复用逻辑。 您将需要调用 SysCtlPeripheralReset 来重置 GPIO 引脚多路复用逻辑。

    WD 复位功能不会使器件复位、我对此也感到惊讶。 WD 复位应再次重置整个器件、具体取决于您是否将 WD 超时事件配置为触发上电复位或系统复位。 这是可编程的。

    在任何情况下、您是否尝试过其他 MCU 芯片? 您能重复同样的问题吗? 如果您可以对不同的芯片或主板重复相同的问题、则很可能是软件问题。 我建议您使用示波器到逻辑分析仪来查看 SPI 总线处于非功能状态时的状态。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    感谢您的回复。

    为了澄清这一点、软件复位意味着调用 SysCtlReset()。

    到目前为止、我的理解是 看门狗复位应该具有与复位引脚相同的效果、对吧?

    我将按照您的建议对此进行更多实验、并在稍后更新此主题。

    天列

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tianlei:
    是的、WD 应该像一个复位引脚那样工作以复位器件。 让我们知道您的更新。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Charles、

    首先、让我对 MCU 类型进行更正。 它实际上是 LM3S9790。 我们在较新的设计中已切换到 TM4C129ENCPDT、但观察到的问题是在较旧的电路板上。

    我们再做几个实验、并确认 MCU 卡在某个状态、该状态只能通过电源复位或外部复位引脚恢复。 在这种状态下、MCU 的唯一工作部分似乎是以太网端口(我们使用以太网协议与 MCU 进行通信、一切看起来都很好)。 我们使用2个 SSI 端口、一个用于外部闪存、另一个用于音频编解码器。 它们都无法正常工作。

    通过以太网协议、我们可以命令器件进行看门狗复位或软件初始化复位、我们可以通过以太网日志消息观察复位情况、但器件在启动后仍会进入故障状态。

    闪存端口初始化过程从一开始就不会返回成功:

    tBoolean
    SSIFlashInit (空)

       tBoolean bRetcode;
       unsigned char Manufacturer、ucDevice;

       //
       //启用用于驱动 SSI 上 SDC 的外设。
       //
       SysCtlPeripheralEnable (SFLASH_SSI_Periph);
       SysCtlPeripheralEnable (SFLASH_SSI_GPIO_Periph);

       GPIOPinConfigure (SFLASH_SSI_CLK_MUX);
       GPIOPinConfigure (SFLASH_SSI_RX_MUX);
       GPIOPinConfigure (SFLASH_SSI_TX_MUX);

       //
       //将相应的管脚配置为 SSI 而不是 GPIO。 CS
       //配置为 GPIO、因为该板连接了2个器件
       // SSI0,每个都使用单独的 CS。
       //
       GPIOPinTypeSSI (SFLASH_SSI_GPIO_base、SFLASH_SSI_Pins);
       GPIOPinTypeGPIOOutput (SFLASH_CS_BASE、SFLASH_CS_PIN);
       GPIOPadConfigSet (SFLASH_SSI_GPIO_base、SFLASH_SSI_Pins、GPIO_Strength _4mA、
                        GPIO_PIN_TYPE_STD_WPU);
       GPIOPadConfigSet (SFLASH_CS_BASE、SFLASH_CS_PIN、GPIO_Strength _4mA、
                        GPIO_PIN_TYPE_STD_WPU);

       //
       //将用于 SD 卡和串行闪存的 SSI0芯片选择置为无效
       //
       GPIOPinWrite (SFLASH_CS_BASE、SFLASH_CS_PIN、SFLASH_CS_PIN);

       //
       //将 SSI0端口配置为10MHz 操作
       //
       SSIConfigSetExpClk (SFLASH_SSI_base、SysCtlClockGet ()、SSI_FRF_MOTO_MODE_0、
                          SSI_MODE_MASTER、10000000、8);
       SSIEnable (SFLASH_SSI_base);

       //
       //等待器件准备好接收指令。
       //
       bRetcode = SSIFlashIdleWait (MAX_BUSY_POLL_IDLE);

       //
       //如果设备未报告空闲状态,则假设没有空闲状态
       //并返回错误。
       //
       if (!bRetcode)
       {
           return (bRetcode);
       }

           退货(1);

    我们甚至尝试通过以太网协议调用此过程、但它没有帮助、也返回了失败。

    客户站点上的一些设备上出现了问题。 症状与实验练习中的症状完全相同、即静电冲击。

    如果有一种方法可以通过编程方式使 MCU 深度复位、这将非常有用。 这将解决我们的问题。

    谢谢、

    天列

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Tianlei、
    LM3S 为 NRND。 我也不熟悉这个旧器件。 我建议您查看示波器上的 SSI 端口。 您是否看到了正确的 SPICLK 和 MOSI/ MISO 行为。 似乎该错误取决于 SSIFlashIdleWait 的返回值。 SSIFlashIdleWait 有什么作用? 您是否希望从外部闪存器件接收一些数据? 如果 MCU 正在发送正确的命令、则可能需要研究闪存器件为何不返回数据。 如果 MCU 未在 SSI 接口上发送任何命令、则问题出在 MCU 侧。

    正如我在前面提到过的、软件系统复位或 WD 复位应该会复位器件。 您的最佳选择是软件系统复位。 在您的软件复位处理程序中、您是否可以尝试先复位 SSI、然后重新初始化它?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的 Tianlei:
    我没有听到你的反馈。 您是否能够充分使用软件系统复位或 WD 复位来解决应将 SSI 和整个器件的大部分复位的问题? 我现在要关闭这个线程。 如果您有新问题、您可以打开新主题、或者如果您有一些更新要报告、您可以重新打开此主题。