您好!
我正在使用我们在两个 RM48之间实现的通信总线。
Micro X 是主器件、并将数据发送到微型 Y、后者是从器件、使用 MibSPI、其布局与应用手册 SPNA231 (在 Hercules 上使用 MibSPIP 模块的高速串行总线)中所示的布局非常相似:
- x 用于通信 MibSPI1、Y 预期数据在 MibSPI3上、通信是单向的。 SOMI 正常工作、但引脚未从 Y 有效连接到 X (我不关心 Y 数据)
- ENA 和 CS 可用于 SPI (如 SPNA231)
- 我在两侧都使用满缓冲大小(128)(在从侧的 SPNA231中、大小不同)
- 在两端数据传输均由 DMA 管理:X 上的一个控制数据包用于 SRAM>DMA>MIBSPI,Y 上的两个控制数据包用于 MIBSPI>DMA>SRAM (类似于 SPNA231)
它运行良好、但我需要使它在同步方面更可靠:我担心 X 不知道从器件是否处理了接收到的数据。 由于 DMA 的原因、数据在 SRAM 中、但如果从器件不移动 DMA 目标指针或移动数据、主器件可以开始另一个覆盖数据的传输。
我想我可以使用 ENA 来同步偶数帧传输。 如果在传输后从器件禁用其 MibSPI 传输组、它将起作用。 我尝试通过手动禁用组来执行此操作、它起作用、从器件不移动 ENA、主器件进入 ENA 超时、不会发生数据覆盖。
下面是我的问题、
- 考虑到我已在传输组配置中设置了"单次传输"、为什么从设备在一次传输后不会自动禁用该组?
- 您是否看到同步通信的更好解决方案? 作为我尝试 使用 DMACTRL 位" DMA 通道的自动禁用"的替代方法、在第一次传输后、传输 MibSPI>SRAM 不会发生、但从器件继续提供其 ENA、并且主器件侧不会收到通知。
谢谢!!!
PS:要找到一个有效的解决方案,我需要在这个论坛上了解从 MibSPI 的未记录行为(CS 编码、CSHOLD ...)。 我希望更新正式的 TRM 以包括一个针对从器件 MibSPI 的部分、这些勘误表和缺失 已有多年的历史了、RM48的 TRM 已有4年历史了。 如果我的认证机构知道我的安全关键型应用是利用未记录的功能开发的....
PPS:我真的要感谢您 在这个论坛上提供宝贵和耐心的帮助
