我正在为linux编写SPI驱动程序。一些相关文档是http://www.mjmwired.net/kernel/Documentation/spi/spi-summary和http://ww2.cs.fsu.edu/~rosentha/linux/2.6.26.5/docs/DocBook/kernel-api/ch25.html。
大多数情况下成功执行传输并调用完成回调。当我访问消息的status
时,我总是看到零(表示)。 actual_length
根据需要为112(我的转移长度)。
然而,经过一段时间后,我可能会收到actual_length == 0
的回调。所有后续调用甚至都有actual_length == 224
。在关闭spi设备之后,回调仍然会被调用,消息长度快速上升(每次调用,它增加了112),虽然我没有再调用spi_async
。
任何人都可以提供可能导致此行为的提示吗?
非常感谢!
答案 0 :(得分:0)
我不是专家,但如果您使用dma等,可能存在缓存一致性问题。
答案 1 :(得分:0)
事实证明原因是线程问题:我们在最后一次传输完成之前覆盖了spi_message对象。