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.

[参考译文] MSP432E401Y:在 SSI0 的 MISO 中偶尔错误读取数据

Guru**** 2524460 points
Other Parts Discussed in Thread: MSP432E401Y

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561025/msp432e401y-data-wrongly-read-sporadically-in-miso-of-ssi0

器件型号:MSP432E401Y


工具/软件:

您好团队:

我目前在 SSI0 MISO 引脚上遇到问题。 我们通过 SSI 使用 MSP432E401Y 刷写 FPGA、其中 MOSI 写入操作非常好、仅从 MISO 读取数据是随机错误的。 我们需要验证数组中有 2 个以上的 lakh 数据,其中只有几个索引是错误的。

在检查示波器时、来自 FPGA MISO 引脚的数据符合预期、但只有微控制器被错误解码、如下所示。

预期数据为 0x08、但读作 0xf8。 该错误是非常随机的、并不总是在同一个索引中发生。

从 MISO 接收数据的代码:

void SPI_RECEIVE(无符号字符* buff、uint8_t 字节)

   uint32_t i = 0;
   while (SSIDataGetNonBlocking (SSI0_BASE、&buff[0]))
                    {
                    }
   对于 (i = 0;i < bytes;i++){
           MAP_SSIDataPut (SSI0_BASE、0x00);
           MAP_SSIDataGet (SSI0_BASE、&buff[i]);
           MAP_SysCtlDelay (10000);
   }

}

请支持我们进一步进行调试。

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

    嗨、Monica、

     有多少字节被传递到  SPI_RECEIVE ()? 是 2000 年吗? 如何知道有多少个字节来自 FPGA?

     调用 MAP_SysCtlDelay (10000) 来插入延迟的原因是什么? 如果您 缩短或增加 延迟、这是否会产生影响?

     您能否先使用已知模式(如 0x55)来初始化阵列?  

     您能否向 Receive 函数发送临时代码、当其与预期数据不匹配时、您会立即停止、以便调试发生的情况?

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

    您好 Charles、

    下面的代码是我们使用 SPI_RECEIVE 阅读的地方,对于您的问题“有多少字节传递到  spi_receive ()?“ 我们写入 257984、并期望从 FPGA 获得 257984 数据。

    const unsigned char g_pucDataArray[257984];

     void verify_flash (int CFG){

            unsigned char READ_OPERATION[4]={0x73、0x00、0x00、0x00};
           unsigned char READ_DATA[16];
    uint16_t count=0、ii;
           UARTprintf(“验证内部闪存...\n“);
           for (k=0;k<num_clocks;k++){
                CS_FPGA (1);
                MAP_SysCtlDelay (DELAY_1ms);
                CS_FPGA (0);
                unsigned char READ_OPERATION[4]={0x73、0x00、0x00、0x00};
                UARTprintf(“\n")“);
                SPI_TRANSMIT (READ_OPERATION、4);
                SPI_RECEIVE (READ_DATA、16);
               CS_FPGA (1);
               if (areArraysEqual (&g_pucDataArray[k*16]、READ_DATA、16)){
                   MAP_SysCtlDelay (DELAY_1us);
               }

               否则{
                   G_ui32LEDState = 5;
                   UARTprintf(“验证失败\n“);
                   for (ii=1;ii<=16;i++){
                       UARTprintf(“expected [%d]:%02x 实际值[%d]:%02x \n“、ii、g_pucDataArray[k*16 +(i-1)]、ii、read_data[ii-1]);
                   }
                   udp_send_func (upcb、&verify_fail、sizeof (verify_fail));
                  // EXIT (0);
                   count++;
               }
           }


           UARTprintf(“验证成功\n“);
           UARTprintf(“COUNT =%d\n“、count);
       }

    您能否为接收函数临时编码:如果接收函数与预期数据不匹配、那么您将立即停止、以便调试发生的情况?

    之前、我们使用 exit(0) 立即停止代码。 但是、为了确定失败计数的数量、我们注释掉了 exit (0)。

    代码停止后应采取哪些步骤来了解发生了什么情况?

    该系统可与 LaunchPad 和我们现有的定制 PCB 完美配合。

    仅在全新制造的定制电路板中才会出现此问题、即使没有堆栈更改 ( SSI) 进行编程。 如前所述、这种故障是非常随机的、只影响不同索引上的两三个计数、有时这些计数甚至是正确的。

    我们最新电路板中使用的微控制器芯片是否存在问题、或者是否存在其他潜在原因?

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“577647" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561025/msp432e401y-data-wrongly-read-sporadically-in-miso-of-ssi0/6010588

    下面的代码是我们使用 SPI_RECEIVE 阅读的地方,对于您的问题“有多少字节传递到  spi_receive ()?“ 我们写入 257984、并期望从 FPGA 获得 257984 数据。

    const unsigned char g_pucDataArray[257984];

    [/报价]

    您好、

      首先、MSP432E MCU 只有 256KB 的 SRAM。 您如何保留比实际可用的 SRAM 更多的 SRAM、更不用说您的应用程序需要 SRAM 来执行其他功能。  

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

    您好:

    此变量存储在闪存中、因为它是一个常量。

    固件的观点是、我们找不到任何问题、因为它在 Launchpad 和现有的定制 PCB 中运行良好、但我们担心新 PCB 中会出现什么问题。

    [引述 userid=“577647" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561025/msp432e401y-data-wrongly-read-sporadically-in-miso-of-ssi0/6010588

    之前、我们使用 exit(0) 立即停止代码。 但是、为了确定失败计数的数量、我们注释掉了 exit (0)。

    代码停止后应采取哪些步骤来了解发生了什么情况?

    [/报价]

    您能告诉我吗?我可以进一步调试。

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引述 userid=“577647" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561025/msp432e401y-data-wrongly-read-sporadically-in-miso-of-ssi0/6015268

    此变量存储在闪存中、因为它是一个常量。

    [/报价]

    好的。  

    从固件的角度来看、我们找不到任何问题、因为它在 Launchpad 和我们现有的定制 PCB 中运行良好、但我们担心新 PCB 中会出现什么问题。

    好的。 您说 LaunchPad 和当前的 PCB 运行良好、没有任何问题、那么我认为您的软件不存在问题。 如果您只在新 PCB 上收到错误数据、则需要对硬件设计进行研究。 您应仔细查看电气特性、以了解接收到的数据是否满足  MCU 上的建立时间和保持时间要求。 您应该特别查看 S8 参数。 请参阅下面的。  

    [引述 userid=“577647" url="“ url="~“~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1561025/msp432e401y-data-wrongly-read-sporadically-in-miso-of-ssi0/6015268

    之前、我们使用 exit(0) 立即停止代码。 但是、为了确定失败计数的数量、我们注释掉了 exit (0)。

    代码停止后应采取哪些步骤来了解发生了什么情况?

    您能告诉我吗?我可以进一步调试。

    [/报价]

    我将建议您将预期数据与接收到的数据进行比较。 如果它们不匹配、您可以立即将代码放入 while 循环中。 当您使用调试器连接到设备时、您可以检查变量中接收到的数据。 我还建议您首先将接收到的变量初始化为一个已知的模式。 当接收到的数据存储到变量中时、它将覆盖初始化值。  

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

    您好 Charles、

    您应该特别查看 S8 参数。 [/报价]

    探测示波器发生故障时的建立时间和保持时间。 建立时间= 83.2ns、保持时间= 116.6ns。

    SSI 时钟频率为 5MHz、还尝试将频率降低至 500kHz、但仍会出现问题。

    如果它们不匹配、您可以立即将代码放入 while 循环中。 当您使用调试器连接到设备时、您可以检查变量中接收到的数据。 我还建议您首先将接收到的变量初始化为一个已知的模式。 当接收到的数据存储到变量中时、它将覆盖初始化值。  [/报价]

    每次迭代均使用 0xAA 初始化 READ_DATA 数组并覆盖数据。 接收到的数据如下所示、其中第 5 个索引是错误的。

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

    您好、

     您可以放大交易吗? 这不是预期值 0x40 的事务。 您能否放大显示预期值等于 0x40 的事务?

     您是否还能再次确认 LaunchPad 上运行的相同代码和之前的 PCB 是否正常工作?

     主器件侧的极性和相位是什么?从器件侧所需的极性和相位是什么?