SPI完成回调处理程序

时间:2011-11-03 10:07:08

标签: c linux kernel spi

我正在为linux编写SPI驱动程序。一些相关文档是http://www.mjmwired.net/kernel/Documentation/spi/spi-summaryhttp://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

任何人都可以提供可能导致此行为的提示吗?

非常感谢!

2 个答案:

答案 0 :(得分:0)

我不是专家,但如果您使用dma等,可能存在缓存一致性问题。

答案 1 :(得分:0)

事实证明原因是线程问题:我们在最后一次传输完成之前覆盖了spi_message对象。