概述
SPI体系结构
主要由三部分组成:
(1) SPI核心
(2) SPI控制器驱动
(3) SPI设备驱动
基本和I2C的架构差不多
重要结构体
内核版本:3.7.6
- spi_master
//SPI控制器
- spi_driver
//SPI驱动,和platform_driver,i2c_driver类似
- spi_device
//SPI 设备
- spi_message
//SPI传输数据结构体
- spi_transfer
// 该结构体是spi_message下的子单元,
总结上面结构体关系:
1. spi_driver和spi_device
spi_driver对应一套驱动方法,包含probe,remove等方法。spi_device对应真实的物理设备,每个spi设备都需要一个spi_device来描述。spi_driver与spi_device是一对多的关系,一个spi_driver上可以支持多个同类型的spi_device。
2. spi_master和spi_device
spi_master 与 spi_device 的关系和硬件上控制器与设备的关系一致,即spi_device依附于spi_master。
3. spi_message和spi_transfer
spi传输数据是以 spi_message 为单位的,我们需要传输的内容在 spi_transfer 中。spi_transfer是spi_message的子单元。
1 . 将本次需要传输的 spi_transfer 以 spi_transfer->transfer_list 为链表项,连接成一个transfer_list链表,挂接在本次传输的spi_message spi_message->transfers链表下。
2 . 将所有等待传输的 spi_message 以 spi_message->queue 为链表项,连接成个链表挂接在queue下。
API函数
//分配一个spi_master
使用spi_async()需要注意的是,在complete未返回前不要轻易访问你一提交的spi_transfer中的buffer。也不能释放SPI系统正在使用的buffer。一旦你的complete返回了,这些buffer就又是你的了。
spi_sync是同步的,spi_sync提交完spi_message后不会立即返回,会一直等待其被处理。一旦返回就可以重新使用buffer了。spi_sync()调用了spi_async(),并休眠直至complete返回。
上面的传输函数最终都是调用spi_master的transfer()函数。
最后
以上就是隐形大炮为你收集整理的linux下camera驱动分析_Linux驱动分析之SPI驱动架构的全部内容,希望文章能够帮你解决linux下camera驱动分析_Linux驱动分析之SPI驱动架构所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复