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.

[参考译文] MSPM0G3507:SPI DMA 接收异常

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1456841/mspm0g3507-spi-dma-receive-abnormal

器件型号:MSPM0G3507

工具与软件:

你好、专家

我使用"spi_controller_fifo_dma_interrupts_lp_MSPM0G3507_nortos_ticlang"作为基址来写入 SPI EEPROM 读取/写入模块、

接收时出现令人困惑的行为、症状是"我无法在每次接收时获得 RxPacket 数据阵列中的固定地址"

请参阅下面的步骤说明

//步骤1

在第71行(main)发送写入命令和断点、命令发送正确且 LA 获取正确数据流(P1)

//步骤2

在第75行(main)中发送读取命令和断点、获取 gRxPacket array (P2)的第7行和第8行中的响应数据

我认为 LA 中的数据流是正常的(P2_LA)、但为什么 gRxPacket 的0号和1号中没有显示数据?

//步骤3

再次发送读取命令并在第79 (main)行中发送断点、在 gRxPacket array (p3)的第4号和第5号中获取响应数据

LA 中的数据流为正常(P3_LA)、但为什么此时数据出现在 gRxPacket 的第4号和第5号中?

在我看来、我认为每次都应该获得 gRxPacket 的0号和1号数据、因为我运行相同的读取子例程

但事实似乎并非如此。

我提供了项目文件、请帮助我检查我的问题。

我非常感激。

e2e.ti.com/.../SPI_5F00_Project.rar

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

    SPI 本质上是双向的。 发送的每个 Tx 字节都会接收到一个相应的 Rx 字节。 即使您对 Rx 字节不感兴趣、也会出现这种情况。

    您的 EEPROM_WRITE 函数会发送一定数量的字节、因此会在 Rx FIFO 中产生如此多(最多4个)的字节。 这些字节将一直保留到您的代码(或 DMA)读出它们、因此它们将是您在后续 EEPROM_Read 调用中读取的第一个字节。

    有两种策略可以解决这一问题:

    1) 1)每次执行"Tx Only"事务时运行 Rx DMA 通道(使用相同的长度)、然后忽略读取到 gRxPacket 中的内容

    或者

    2) 2)在每个"Tx Only "事务(不要忘记 WREN 事务)之后、通过读取并丢弃这些 字节来清空 Rx FIFO。

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

    你好、Bruce

    感谢您的帮助、 我使用策略1、并且我可以在 gRxPacket 中获取固定的响应数据  

    再次感谢。