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.

[参考译文] LAUNCHXL-RM42:SPI 从器件、卡在函数 spiTransmitAndReceiveData 中

Guru**** 2525970 points


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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1227986/launchxl-rm42-spi-slave-stuck-in-the-function-spitransmitandreceivedata

器件型号:LAUNCHXL-RM42

高支持、

我将  RM42 SPI1配置为 SPI 从设备、并使用 AM65x MCU 作为 SPI 主设备。 这两个电路板连接至 SOMI、SIMO、CLK、CS 和 GND。  

AM65x MCU 将在启动时从 RM42板循环读取 SPI。

如果 AM65X 板比 RM42板更早启动、则一切似乎都正常。 但是、如果 RM42x 板较早启动、它将卡在函数 spiTransmitAndReceiveData 中。

下面是代码 RM42 SPI 从器件:

    // SPI
    spiInit();

    for (;;) {

        // Transmit SPI
        spiTransmitAndReceiveData(spiREG1, &dataconfig1_t, 16, spiTxData, spiRxData);

        // Toggle LED when success
        gioToggleBit(gioPORTA, 2);
    }

卡住时、它会停留在 spi.c 文件中函数 spiTransmitAndReceiveData 中的无限循环中:

        /*SAFETYMCUSW 28 D MR:NA <APPROVED> "Hardware status bit read check" */
        while((spi->FLG & 0x00000100U) != 0x00000100U)
        {
        } /* Wait */

SPI->FLG 的值为0x201,有时为0x211。

发生这种情况时、如果我对 RM42板进行下电上电、这样在 AM65x 板之后引导、它将正常工作。  

那么问题可能出在哪呢? 如何清除误差并跳出无限循环?

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

    我已使用以下方法修复了此问题。  

    我修改了函数 spiTransmitAndReceiveData、如果出现错误、请从函数返回:

            while((spi->FLG & 0x00000100U) != 0x00000100U)
            {
                if((spi->FLG & 0x000000FFU) !=0U)
                {
                    return (spi->FLG & 0xFFU);
                }
            } /* Wait */

    然后、如果出现错误、再次初始化 SPI:

            ret = spiTransmitAndReceiveData(spiREG1, &dataconfig1_t, 16, txData, rxData);
            if (ret != 0U)
            {
                spiInit();
            }

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

    尊敬的 Kevin:

    我已开始处理您的问题、并将很快提供更新。

    --

    谢谢。此致、
    Jagadish。

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

    尊敬的 Kevin:

    实际上、我使用 RM57作为从器件进行了测试、因为我没有 RM42板。 在这里、我没有看到您提到的问题。

    我同意如果从器件重新启动之前、它会卡在函数"spiTransmitAndReceiveData"中  

    但它从未停留在这里、一旦主器件发送数据、它就会并行发送数据、并且一旦接收到所需的帧、它就会退出该功能。

    我将在此处附上代码、如果需要进行更改、请设置外观并进行修改。 如果仍无法解决问题、我们将进一步分析。

    --

    谢谢。此致、
    Jagadish。