Your browser does not seem to support JavaScript. As a result, your viewing experience will be diminished, and you have been placed in read-only mode.
Please download a browser that supports JavaScript, or enable it if it's disabled (i.e. NoScript).
1.按照你的描述,主机应该配置的是Pcs continue 模式,如果通信过程中出现PCS被拉起,属于主机方没有遵循通信协议导致的通信失败。 2. 我无法判断pcs中途被拉高是否是主机侧的硬件问题导致的。slave不会拉pcs引脚。 3. MCAL spi不支持接收不定长的数据
Frank 能确定是主机拉高
Frank 假设这种情况无法避免,那么从机如何从异常中恢复呢,能确保下一次能正常通信
Ekko 如果能够保证master发送的数据数量跟slave需要接收的数量一致就可以(中间master即使pcs拉高也OK)。因为DMA会一直等待搬移的数据直到完成。因此不需要slave做额外的事情。
Frank 好的 感谢回复
Frank 这种自恢复的需要取决master保证数据完整,客户担心master出现一次数据不完整后,后续取到的数据都会错位,所以还是需要一个手动恢复的策略,现在有调用Spi_Cancel(),但是会偶发出现hard fault(DMA传输过程中,关掉DMA会导致hard fault?),所以有更加简洁高效的方式吗?
Ekko 调用Spi_Cancel关闭传输不会导致导致Hardfault。你可以在hardfault出现时,看下是什么原因导致的hardfault。
Frank 现在查看堆栈,最后是从Disable DMA跳至hard fault,查看DMA寄存器并没有错误标志位。现在明确就是加了Spi_Cancel,就会出现hard fault,不加是不会出现的。
看样子是发生非法地址访问了。你用的是那个版本的驱动?
jianpeng.zhao@ytmicro.com 这是我的邮箱,如果方便的话,你可以发个腾讯会议的链接,我远程帮你看下
Frank 目前又修改了中断优先级,还在挂测,如果还复现我再邮件发送
发帖前请查看
帮助没办法联网的电脑使用YCT
帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...