代码的主要参考:include\linux\spi\spi.h
内核版本:4.9.88
前面我们分析了总线驱动模型,同时分析了如何编写设备驱动。只从上层使用角度去分析。因为内核的spi代码里已经提供好了相应的函数框架供我们使用,这里看一下最核心的两个函数spi_sync和spi_async。
1.0 spi_sync
上篇文章讲到同步通信spi_sync函数。内核中对于同步的通信函数,添加了worker线程的处理方式,通过completion和wait_for_completion 管理消息的传输状态。借助内核的等待队列,根据等待队列的休眠、唤醒方式来完成SPI消息的传输。同时提供了支持的spi_queued_transfer供使用者调用,而不用重新去实现。这些函数都已经在spi master中定义。

2.0 __spi_sync

2.0.1 spi_complete

调用后,尝试唤醒第一个等待的线程。如果没有则休眠。直到下一次调用。返回消息结果。

文章详细介绍了Linux内核4.9.88中SPI接口的同步通信函数spi_sync和异步通信函数spi_async的工作原理。同步通信利用completion和wait_for_completion管理消息传输,而异步通信则通过__spi_async接口实现。新内核版本使用worker线程处理SPI通信,通过spi_master_initialize_queue初始化。SPI消息的处理涉及消息队列的管理和驱动程序的transfer函数实现,如在BCM2835中需要自定义transfer函数。

2594

被折叠的 条评论
为什么被折叠?



