您好!
对于长度超过840字节的 SPI 事务、我遇到了一个奇怪的问题。
对于840字节或更短的长度、我看到预期的行为:
- 主器件将 CSZ 拉至低电平
- CC1310通过拉低"SPI 就绪"进行响应
- 主时钟 CC1310之外的840字节(MISO 字节看上去均正常)
- 主器件使 CSZ 无效
- CC1310 SPI 回调函数执行
- CC1310切换示波器布线的 GPIO
- CC1310使"SPI 就绪"无效
事务长于840字节时、不会执行步骤5、并且主执行线程看起来是 GOOD AWOL (即 SEG-FAULT/STACK 腐败?)。
我已经附加了成功(840字节)和失败(844字节)的捕获跟踪:
- MAP 文件(请参阅摘录、 已连接 )显示了要发送 SPI 字节的 SPI 缓冲区位于.bss 段的开头、地址为0x20000520、其大小为0x1830 (= 6192)字节、足以存储我要发送 SPI TX 的844个字节。
- 在设置844字节 SPI 传输之前、我调试"print" spi_Transaction.txBuf、.rxBuf 和.count 参数、这确认我请求 从正确的位置发送正确数量的数据。
- 一旦建立了 spi_transfer (),主执行线程只需永久地切换 GPIO (即在 while (1){;}循环中):
- 成功 (840字节)事务时、此 GPIO 切换被回调触发打断、这会切换一些报告 SPI_Transaction .status 的不同 GPIO。
- 在发生故障(844字节)事务时、此 GPIO 切换仅在主器件使 CSZ 无效且没有证据表明 CC1310中具有后续活动时停止。
请注意以下几点:
- MISO 上的字节值始终存在且正确、即 SPI 事务 实际上已经完成、我只是没有看到发生任何回调。
- 840字节实际上 是上限。 也就是说,这不是的情况下844是一个神奇的数字和其他更大的数据包长度工作(我已经尝试了,例如848, 860, 900-所有失败与相同的症状)
对我来说、这些症状看起来像是数据中止/ SEG-FAULT 或堆栈溢出、但我不知道如何进一步调查。 遗憾的是、我无法使用 TI 调试器、因为我的主 CPU 似乎以某种方式与调试器争夺对 CC1310的控制权。 我有:
- 将用于运行主线程的任务的堆栈大小从1024字节增加到2048字节、但没有改善。
- 将 SPI 数据缓冲区重新定位到了0x20000600、远离我注意到的 dmaSpi[01][RT]xControlTableEntry、它位于.bss 段之前、没有任何改进。
请告知。
TIA、 

Sean。