参考CSDN中的几篇文章。仔细阅读会明白整个框架。
http://blog.csdn.net/onetwothreef/article/category/5952021
按照时间顺序来阅读。
但是有个问题:
不同的SPI设备有不同的协议格式,那么不同的spi设备挂载在同一个spi控制器上,spi控制器是怎么区分不同设备的协议呢?
在这里,一直理解错了,linux spi核心层提供的通信函数如:
int spi_async(struct spi_device *spi, struct spi_message *message);
int spi_sync(struct spi_device *spi, struct spi_message *message);
通过spi控制器来发送数据。
SPI协议只是简单的描述为一个时钟发送或者接收一位数据,
这里的一个理解点就是,spi控制器和spi设备的通信根本就不关心发送数据的格式和内容,只是简单的发送数据,按照一个时钟一bit数据来发送和接收数据。
这所以数据的组装工程都是由spi设备的驱动程序来解释和打包的。所以spi设备驱动程序也叫做设备协议驱动程序。
在spi的设备驱动程序中,会组织tx和rx的数据,数据里包括地址、读写以及数据。 然后调用上面的API。
这里就豁然开朗啦。