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.

[参考译文] TMS320F28388D:针对 SPI 使用 TX/RX DMA 时的数据对齐问题

Guru**** 2563960 points
Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1273343/tms320f28388d-data-alignment-issue-using-tx-rx-dma-with-spis

器件型号:TMS320F28388D
主题中讨论的其他器件:SysConfig

您好!

我将使用 SysConfig 设置我的项目、并且为了与另一个 F28388D 微控制器通信、我将使用 DMA 测试 SPI 通信、以便 TX 和 RX 都位于同一个内核。

我可以成功地将数据从 SPIB 发送到 SPIA、但无法获得数据对齐。 我应该只对硬件配置进行数据调整、即具有正确的 TXFFIL/RXFFIL 和 DMA_BURST_SIZE 以及 DMA_TRANSMIT_SIZE、但不起作用:可以通过硬件配置来确保这一点、或者我应该用简单的协议来实现它吗?

谢谢、此致、

法比奥

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

    您好 Fabio、

    Unknown 说:
    我可以成功地将数据从 SPIB 发送到 SPIA、但无法获得数据对齐。 我应该只具有硬件配置的数据定位[/报价]

    您能解释一下这个问题吗? 我不明白您在寻找什么。  

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

    您好、Gus:

    事实上、我将使用 DMA   从 SPIB 发送到 SPIA 中的数据缓冲区 uint16_t spiBTxDataBuff[MCU2_TO_1_DATASIZE]、然后我将其收集到  uint16_t spiARxDataBuff[MCU2_TO_1_DATASIZE] 、其中 MCU2_TO_1_DATASIZE  = 60。

    例如、在 SysConfig 中、我为 SPIB 配置:

    TXFFIL = 12、 DMA_BURST_SIZE=4和 DMA_TRANSMIT_SIZE=15

    对于 SPIA:

    RXFFIL = 12、 DMA_BURST_SIZE=12和 DMA_TRANSMIT_SIZE=5

     每5ms 手动更新一次 spiBTxDataBuff、我 可以在  spiARxDataBuff 中看到数据刷新 、但每次都有一个移位:在这个示例中、使用此配置参数、每次发送都可以看到24个字 每次移位。

    我还尝试遵循《技术参考手册》中的说明、但存在类似的换档问题。

    我的问题是:是否有用于通过 DMA 发送和接收 SPI 的参数配置、以便接收没有移位的数据、或者我应该以某种方式在接收侧对齐数据?

    我希望它更加清晰。

    谢谢。

    法比奥

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

    Fabio、

    我的问题是:是否有用于发送和接收带有 DMA 的 SPI 的参数配置,以便接收没有移位的数据,或者我应该以某种方式在接收端对齐数据?

    我认为不需要任何数据操作。

    为了让我更好地理解这个问题、您能提供一个传输和接收缓冲区的屏幕截图吗? 您使用的 SPI 字符大小是多少?  

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

    感谢 Gus、

    以下是屏幕截图、但很抱歉、因为我正在继续开发、此刻我将缓冲数据从60个字更改为48个字:

    SPIB:

    运行代码:

    考虑到 xLastWakeTime (FreeRTOS 变化)、您基本上可以看到 Tx 缓冲区没有改变。

    而对于 SPIA:

    调试期间:

    在 Rx 缓冲区中、您可以进行数据移位、并且使用48个字、现在、有时数据会对齐、但我当然可以将其用于任何字数。

    更清晰:

    uint16_t spiARxDataBuff[MCU2_TO_1_DATASIZE];              // Receive data buffer
    
    uint16_t spiBTxDataBuff[MCU2_TO_1_DATASIZE];                // Send data buffer
    
    
    // Addresses for SPI DMA channels
    const void *dma1TxAddr = (const void *)spiBTxDataBuff;
    
    const void *dma4RxAddr = (const void *)spiARxDataBuff;
    
    

    我希望这就足够了。

    非常感谢、

    法比奥

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

    Fabio、

    应用程序运行时的仿真器访问会影响代码的运行。 当您有一个表达式窗口不断刷新时、它将导致 SPI 传输/DMA 操作发生一些中断。 这称为仿真挂起。 我想知道这是否会导致您的数据错位。 请在 SPI 和 DMA 配置中更改仿真模式、以允许这些块继续运行、而不受仿真挂起的影响。

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

    非常感谢、祝您一切顺利。

    法比奥