努力成为linux kernel hacker的人李万鹏原创作品,为梦而战。转载请标明出处
http://blog.csdn.net/woshixingaaa/article/details/6574224
这篇文档主要介绍spi数据传输过程。
当应用层要向设备传输数据的时候,会通过ioctl向设备驱动发送传输数据的命令。如图,向SPI从设备发送读写命令,实际的读写操作还是调用了主机控制器驱动的数据传输函数。transfer函数用于spi的IO传输。但是,transfer函数一般不会执行真正的传输操作,而是把要传输的内容放到一个队列里,然后调用一种类似底半部的机制进行真正的传输。这是因为,spi总线一般会连多个spi设备,而spi设备间的访问可能会并发。如果直接在transfer函数中实现传输,那么会产生竞态,spi设备互相间会干扰。所以,真正的spi传输与具体的spi控制器的实现有关,spi的框架代码中没有涉及。像spi设备的片选,根据具体设备进行时钟调整等等都在实现传输的代码中被调用。spi的传输命令都是通过结构spi_message定义,设备程序调用transfer函数将spi_message交给spi总线驱动,总线驱动再将message传到底半部排队,实现串行化传输。
在spidev.c中实现了file_operations:
这里看spidev_ioctl的实现:
下面跟踪spidev_message看看:
看spidev_sync的实现:
spi_async在spi.h中定义的:
这里的master->transfer是在spi_bitbang_start中进行赋值的:
bitbang->master->transfer= spi_bitbang_transfer;
看spi_bitbang_transfer的实现:
分析工作队列的处理函数:
这个工作队列的处理函数中调用了spi controller driver中的传输函数:
下面来分析中断函数:
至此spi数据传输过程完成,如果不想为自己的SPI设备写驱动,那么可以用Linux自带的spidev.c提供的驱动程序,只要在登记时,把设备名设置成spidev就可以了。spidev.c会在device目录下自动为每一个匹配的SPI设备创建设备节点,节点名"spi%d"。之后,用户程序可以通过字符型设备的通用接口控制SPI设备。需要注意的是,spidev创建的设备在设备模型中属于虚拟设备,他的class是spidev_class,他的父设备是在boardinfo中定义的spi设备。
分享到:
相关推荐
Linux驱动修炼之道-SPI驱动框架源码分析(下).pdf Linux驱动修炼之道-SPI驱动框架源码分析(上).pdf Linux驱动修炼之道-RTC子系统框架与源码分析.pdf Linux驱动修炼之道-platform.pdf Linux驱动修炼之道-...
linux 驱动修炼 SPI驱动框架源码分析(上)
linux驱动 SPI 驱动框架源码分析(下)
linux驱动修炼 SPI驱动框架源码分析(中)
spi驱动详细解析,很好的文档哟! linux驱动修炼之道spi驱动
linuxSPI驱动框架源码分析.docx
linuxSPI驱动框架源码分析.pdf
关于S32K系列驱动之SPI(SDK144/6芯片)的demo版开发测试结果分享,内附SPI关于S32DS PE的如何配置说明、使用demo版测试的代码分享 ,调试过程遇到的问题以及目前的解决方案,可以保证正常使用SPI
linux系统驱动-spi接口屏,spi驱动接口屏
SPI编程器支持芯片列表 由于各个厂商的SPI Flash 的编程接口的统一,芯片支持只存在其容量不同问题。很多时候,我们只需把整个文件写入Flash就可以了。编程器支持的芯片如下: AMIC A25L05P A25L512 A25L10P A25L010 ...
离线安装包,亲测可用
基于Linux设备树的spi驱动源码,纯C语言编写,包含驱动文件veba5_drv.c,头文件veba5_reg.h,Makefile文件,应用程序veba5_app.c。可以拿来直接编译运行! 能学到什么: spi驱动源码可以直接运行,稍加修改就可以用...
USB-SPI-SP2130例程,用于USB扩展SPI接口,可扩接其它SPI接口的芯片,上位机直接驱动
嵌入式 linux-spi驱动程序详解 让你不会在为 spi 发愁
SPI抛光规范(SPI A1-SPI D3)
s3c2410下的can驱动 基于mcp2510的驱动 spi接口程序,内附程序的说明文档。
spi code for spi 2440 board
ADI非常好的资料 SPI接口简介 introduction-to-spi-interface_cn
linux系统驱动-spi接口屏带logo显示,从logo分区显示
两个spi设备驱动程序,flash驱动和OLED驱动和s3c2440的spi控制器驱动