我是靠谱客的博主 隐形大炮,最近开发中收集的这篇文章主要介绍linux下camera驱动分析_Linux驱动分析之SPI驱动架构,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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下。

bdb546a066169c6b2932c152ab2cb9e0.png

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()函数。

e585ca573aaf25f1f2b2e4345be6185d.png
更多精彩好文,关注微信公众号

最后

以上就是隐形大炮为你收集整理的linux下camera驱动分析_Linux驱动分析之SPI驱动架构的全部内容,希望文章能够帮你解决linux下camera驱动分析_Linux驱动分析之SPI驱动架构所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(59)

评论列表共有 0 条评论

立即
投稿
返回
顶部