工具/软件:
1.DUT:使用的器件是具有 GESI 板扩展板的 Jacinto J721e EVM 载板。
2.处理器内核:我正在 MCU2_1 R5F 内核上进行开发。
3.操作系统:我为操作系统运行 RTOS。
4. SDK 版本: 我目前仅使用 SDK/PDK (ti-processor-sdk-rtos-j721e-evm-10_01_00_04) 进行库和调用。 还没有什么习惯。
5、硬件设置:我已经测试了 SPI6 和 SPI3 的目的,使用 SPI 模拟器 (Waveshare) 发送消息。 我们首先设置 SPI6:在 GESI 电机控制接头上、SPI6_CLK 是引脚 18、SPI6_D0 是引脚 14、SPI6_D1 是引脚 36、SPI6_CS1 是引脚 30;仿真器在 CLK、D0、D1 上连接到对应器件、在 CS0 上连接到 SPI6_CS1。 有时、我会将数字示波器连接到线路以验证消息是否正在传输。
6:软件:我附加了一个示例源代码,我可以用它来生成问题。 这个.c 文件包含 SPI 设置和说明;其中包含一个 CMakeLists.txt 文件、用于显示构建配置。
e2e.ti.com/.../1425.main.ce2e.ti.com/.../1425.CMakeLists.txt
这些中需要注意的一些事项:
- 正在使用 SPI6
- 启用中断;回调模式。
- 我已经尝试了 3 引脚模式和 4 引脚模式;但目前我有 4 引脚模式可以再次工作
- 为了使其能够与 CS1 一起工作、使用 McSPISETSlaveChipSel () 将 SPIENSLV 寄存器设置为适当的值。
- 由于 TRM 规定这是 RX 支持的唯一通道、因此使用了通道 0
- DataLineCommMode 为 1。
- dataSize 为 8 位、初始传输长度为 8 字节。
- 还可以使用 TxBuffer 完成一些工作、只有在我们使用 TXRX 模式时才会发挥作用
- 添加了一些代码以启用 GESI 板引脚多路复用
- 如果我们使用的是 MCU_SPI1、或者可以选择进行一些调用来断开 MCSPI3 与 MCU_SPI1 的连接;无需进行此操作、因为我想我已经说明了这一点。
- 所有构建选项都从 PDK 中的.mk 文件中获取。
- 正在使用 FIFO。
7/8:预期行为/正在发生的情况改为:我通过 SPI 从模拟器发送长度超过 8 字节的字节字符串。 例如:
b'\x00\x00\x00\x00~\x10\xc1\x90\xa00\x98\x90\x0c\xd0\xa0\x00\x80\xb9\xe7~\x00\x00\x00\x00\x00\x00~\x10\xc1\x90\xa0\xb0\x98\x08th\xc0\x00\x80wR~\x00\x00\x00\x00\x00\x00\x00~\x10\xc1\x90\xa0p\x98\xd0\x18\x84\x80\x00\x80\x91w~\x00\x00\x00\x00\x00\x00\x00\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
我希望获得整个字节字符串、但我没有。 目前使用附加的代码、我只得到前 8 个字节:
Starting SPI Slave test. The interrupt path has been set with interrupt number 384 SPI callback data size: 8 Received data: 00 00 00 00 7e 10 c1 90
我看到调用了回调。 但是、对于后续传输、不会调用回调、这意味着没有中断? 我希望整个第一条消息在 8 字节的片段中得到通过,之后发送的任何消息也将被发送。
9、其他板:我已经测试了 TVA4VM EVM 板上的类似代码,似乎工作正常——我当时正在使用 SPI5 ,该板的主接头上有 CS0。
10.每次启动:是的,每次启动都会发生这种情况。
11、诊断/调试:
- 3 引脚与 4 引脚:由于电路板上没有 CS0、因此我们尝试使用 3 引脚似乎是最佳方法;最初、这帮助我们完成了一些消息、但在发现 SPIENSLV 寄存器后、我们能够使 CS1 成为 4 引脚模式下使用的芯片选择。 无论哪种方式,我们都观察到相同的东西:提前终止的消息,但在第一个之后没有收到任何消息。
- FIFO 启用与禁用:有趣的是、如果我们禁用 FIFO 使用、我们会获得每个中断、但没有数据通过(全为 0)。 启用 FIFO 后、仅显示上面的片段中所示的前 8 个字节。
- 阻止(轮询)与回调:我稍微更改了附加的代码以使用阻止模式(不要使用中断等)、在该轮询模式下、似乎我得到了整个消息--这是一种变通办法、但我不认为它是一种解决办法。
- 更改事务计数:如果我将其更改为 16、则得到前 16 个字节、128 产生 128 个字节;但是、传入消息的大小将不是那么可预测。
- 比特率:将此值更改为更快的比特率不会执行任何操作。
- 仅 TX 模式与 TX_RX 模式:没有太大差异。 我看到收到了第一条消息、在仿真器端、我得到了第一条消息 和第二条消息的内容;但在 J721e 侧、只收到第一条消息、永远不会再次调用回调(无中断)、因此不会发送其他任何消息。
- DMA 与无 DMA:没有可观察到的差异。 也没有计划使用 DMA。
第 12 章:我的心
实际上没有日志、但我确实有 MCSPI6 的寄存器转储:
总结:我预计长消息会重复中断,后续消息会重复中断,但我没有看到这种情况发生。 这是否是我们使用的 EVM+GESI 板的限制? 我是否在代码中对 SPI 的工作原理做了错误的假设?