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.

[参考译文] TMS320F28P650DH:SPI_Ex5_loopback_DMA

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1524972/tms320f28p650dh-spi_ex5_loopback_dma

器件型号:TMS320F28P650DH

工具/软件:


您好、专家。 目前、我正在处理 F28P65 上部计算机的通信。 DSP 是 SPI 从器件、上部计算机(由 QT 制造)是主器件。 在-spi_ex5_loopback_dma 的过程之后、我重写了代码。 当我调试上层计算机时、它能够正确地发送和接收 180 个字符、如图 1 所示。 在调试过程中、上层计算机一直发送和接收 270 个字符、但遇到如图 2 所示的错误。

1.question:如果我们只需要修改 SPI_DMA 来发送固定数量的字节数并接收固定数量的字节数,那么应该修改什么代码?

首先

RDATA[]是 SPI_DMA 的接收数组

图 1.  

----- 这个固定字节的长度为 180 个字符、发送和接收都正确。

下一步

上部计算机首次发送数据、然后进入 DSP 接收中断。 数据正确。

RDATA[]是 SPI_DMA 的接收数组

上层计算机第二次发送数据、但它触发了 DSP 的接收中断。 数据不正确。

上层计算机第三次发送数据、但它进入了 DSP 接收中断、但数据不正确。

SPI 配置

图 2.

3.270 字符固定发送和接收以及 180 字符固定发送和接收 — 修改点--主要任务是修改传输和突发数据长度、同时调整发送和接收数组的长度。

问题:如果我们只需要修改 SPI_DMA 来发送固定数量的字节并接收固定数量的字节、那么应该修改哪些代码?

图 3.

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

    嗨、Nie、

    这些是针对 SPI DMA 操作要修改的相关配置。

    此致、

    Aishwarya

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

    您好、专家。 非常感谢您的答复。

      我的问题是:首先、收发 180 个字符的配置是正确的。 由此可以看出、必须正确配置。 现在我要更改发送的数据的长度和接收到的数据的长度、但配置不正确。 我进行了如图所示的配置。 DMA_BURST_SIZE 的大小等于 TX FIFO 和 RX FIFO。 根据要发送和接收的总字节计算 DMA_TRANSFER_SIZE。

      我想问的是、我第一次收到的数据是正确的、第二次收到的数据是错误的、原因是什么? 如上次所示 — 图 3;如果我配置不正确、我也不会在第一次正确接收

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

    NIE、

    让我回到您的身边。 谢谢。

    此致、

    Aishwarya

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

    NIE、

     传输时的数据可能不对齐?  您可以发送突发/传输大小等寄存器的屏幕截图吗 并确认所需的配置?  

    在 传输之间、RX/TX FIFO 中是否有数据? 它应该是 eMott、 在不使用时在硬件中进行保养。

    DMA 是否被正确触发并且 在传输之间清除相应的 SPI 标志?  

    此致、

    Aishwarya  

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

    您好、专家。 非常感谢您的答复。 主机 QT-PC 软件使用 SPI 转换为 USB PHY 芯片。 发送-DMA_CH5_BASE;接收 — DMA_CH6_BASE;

    <<<< 当前配置 — DMA 固定发送 270-16 位;固定接收 270-16 位;DMA 接收完成中断、DMA 发送完成中断。

    <<<< 目前、当调试 (QT) 主机传输数据而 DSP 接收到数据时、出现字符乱码问题;
    调试现象:(QT) 器件传输数据。 从器件在第一次传输时不进入接收中断。 (QT) 主机第二次发送、从器件可以进入接收中断。
    但是、接收现象是不同的。
    ----- 从器件接收的数据包标头正确、但尾字段包含 10 个数据乱码字符;
    ----- 接收到的数据包的前 10 个数据出现乱码、然后接收到正确的数据包。

    下面是主机不发送任何数据时 DSP(从器件)的寄存器配置。

    DM5

    DMA6

    SPIA

    这是主机发送 270-16 位(540-8 位)的第一个数据时 DSP(从器件)的寄存器配置。

    DMA5

    DMA6

    SPIA

    在正常主机发送 540-8 位后、DSP 从设备应进入 DMA 接收完成中断。 分析寄存器、了解没有发生 DMA 接收完成中断的原因。

    3.这是主机第二次发送 270-16 位(540-8 位)数据时 DSP(来自器件)的寄存器配置。

    当主机第二次发送 270-16 位(540-8 位)数据时、DSP(从器件)进入 DMA 接收完成中断。 通常、末尾的数据始终为 0x55。 从上图可以看出、DSP(从器件)的接收阵列中的最后几个数据出现乱码。

    DMA5

    DMA6

    SPIA

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

    您好、专家。 我这些天执行了多项测试、修改了 SPI_DMA、BURST_SIZE 和 TRANSFER_SIZE。 我发现发送和接收 200 个 16 位数据是正确的。 当超过 200 位时、当主机发送数据而从器件接收到数据时、会出现不正确的数据。 我想问一下您是否知道这是主机还是从机 (DSP) 有问题? 如果是 DSP 问题、应该如何识别问题

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

    NIE、

    对延迟深表歉意。 如果您有任何更新或任何其他问题、想检查一下?  

    听起来传输之间存在一些 DMA 同步问题、导致数据不匹配。 我建议清除传输之间的内存缓冲区。  首先、确保在开始执行之前禁用 DMA 通道并清除 FIFO/DMA 标志。  

    要确定它是否是主机问题、请进行检查以确保目标已就绪、并且传输之间的时序正确。  要确定它是否是 DSP 问题、您可以检查 SPI FIFO 和 DMA 配置。  

    此致、

    Aishwarya