1.SPI子系统框图详解:
SPI总线上有两类设备:一类是主控端,通常作为SOC系统的一个子模块出现,比如很多嵌入式MPU中都常常包含SPI模块。一类是受控端,例如一些SPI接口的Flash、传感器等等。主控端是SPI总线的控制者,通过使用SPI协议主动发起SPI总线上的会话。而受控端则被动接受SPI主控端的指令,并作出响应的响应。
如图1所示,linux下的spi子系统主要涉及3个部分:spi核心、spiprotocol驱动和spi主控制器驱动。如图1.1,spi核心负责抽象出所有控制器都具备的功能代码,同时向上为spiprotocol驱动提供接口比如spi_message、spi_transfer,spi_async等,具体可参见linux/spi/spi.h文件,需要自己写客户驱动的可以详细了解一下spi.h文件。
spi控制器驱动负责与具体的控制器硬件沟通,进行bit级的数据传输。
spi客户驱动,即protocol驱动负责从控制器端接收数据,然后按照“protocol”将其解释为有意义的数据格式。
图2则显示了Linux下SPI子系统所涉及的大部分结构和函数调用,其中一些细节可以在这里找到你想要得。