我们知道,SPI数据传输可以有两种方式:同步方式和异步方式.所谓同步方式是指数据传输的发起者必须等待本次传输的结束,期间不能做其它事情,用代码来解释就是,调用传输的函数后,直到数据传输完成,函数才会返回.而异步方式则正好相反,数据传输的发起者无需等待传输的结束,数据传输期间还可以做其它事情,用代码来解释就是,调用传输的函数后,函数会立刻返回而不用等待数据传输完成,我们只需设置一个回调函数,传输完成后,该回调函数会被调用以通知发起者数据传送已经完成.同步方式简单易用,很适合处理那些少量数据的单次传…
通过第一篇文章,我们已经知道,整个SPI驱动架构可以分为协议驱动.通用接口层和控制器驱动三大部分.其中,控制器驱动负责最底层的数据收发工作,为了完成数据的收发工作,控制器驱动需要完成以下这些功能:1.    申请必要的硬件资源,例如中断,DMA通道,DMA内存缓冲区等等:2.    配置SPI控制器的工作模式和参数,使之可以和相应的设备进行正确的数据交换工作: 3.    向通用接口层提供接口,使得上层的协议驱动可以通过通用接口层访问控制器驱动: 4.    配合通用接口层,完成数据消息队列的排…
通过上一篇文章的介绍,我们知道,SPI通用接口层用于把具体SPI设备的协议驱动和SPI控制器驱动联接在一起,通用接口层除了为协议驱动和控制器驱动提供一系列的标准接口API,同时还为这些接口API定义了相应的数据结构,这些数据结构一部分是SPI设备.SPI协议驱动和SPI控制器的数据抽象,一部分是为了协助数据传输而定义的数据结构.另外,通用接口层还负责SPI系统与Linux设备模型相关的初始化工作.本章的我们就通过这些数据结构和API的讨论来对整个通用接口层进行深入的了解. /**********…
SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器.传感器.存储设备,SPI设备分为主设备和从设备两种,用于通信和控制的四根线分别是: CS    片选信号 SCK  时钟信号 MISO  主设备的数据输入.从设备的数据输出脚 MOSI  主设备的数据输出.从设备的数据输入脚 因为在大多数情况下,CPU或SOC一侧通常都是工作在主设备模式,所以,目前的Linux内核版本中,只实现了主模式的驱动框架. /*****…
转自:http://blog.csdn.net/droidphone/article/details/23367051/ 版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[-] 硬件结构 工作时序 软件架构 SPI控制器驱动程序 SPI通用接口封装层 SPI协议驱动程序 SPI通用设备驱动程序   SPI是"Serial Peripheral Interface" 的缩写,是一种四线制的同步串行通信接口,用来连接微控制器.传感器.存储设备,SPI设备分为主设备和从设…
PMBus协议规范介绍 PMBus是一套对电源进行配置.控制和监控的通讯协议标准.其最新版本为1.3,该规范还在不断演进中,比如新标准中新增的zone PMBus.AVSBus等特性.在其官网上有详细的规范文档,本节不尝试翻译规范文档,重点记录作者在了解PMBus过程中的疑问和解答. PMBus与I2C.SMBus的区别? PMBus在SMBus(System Management Bus)基础上增加了一套电源配置.控制和监控规范.SMBus最初是为电池智能管理而开发的一套标准,其基于I2C协议…
本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者: 宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 公元1951年5月15日的国会听证上,美国陆军五星上将麦克阿瑟建议把朝鲜战争扩大至中国,布莱德利随后发言:"如果我们把战争扩大到中国,那么我们会被卷入到一场错误的时间,错误的地点同错误的对手打的一场错误的战争中." 写代码,适用于同样的原则,那就是把正确的代码放到正确的位置而不是相反.同样的一个代码,可以出现在多个可能的位置,…
毕业后一直在学操作系统, 有时候觉得什么都懂了,有时候又觉得好像什么都不懂,但总体来说自认为对操作系统实现机制的了解比周围的人还是要多一些.去年曾花了几个星期的晚上时间断断续续翻译了这篇对Linux和Windows驱动架构进行比较的论文.原文在这里. Linux和Windows设备驱动架构比较 1. 概述 这篇论文中,我们将考查目前最为广泛使用的两种操作系统,即Linux和Windows系统的设备驱动架构.为每种操作系统实现设备驱动所需要的驱动组件将被展示并进行比较,同时也展示每种操作系统中执行…
目录 更新记录 一.Linux I2C 体系结构 1.1 Linux I2C 体系结构的组成部分 1.2 内核源码文件 1.3 重要的数据结构 二.Linux I2C 核心 2.1 流程 2.2 主要函数 三.Linux I2C 适配器驱动 3.1 I2C 适配器驱动的注册于注销 3.2 probe 成员函数 四.Linux I2C 设备驱动 4.1 设备驱动一般过程 4.2 Linux 的 i2c-dev.c 文件分析 4.3 AT24xx EEPROM的I2C设备驱动实例 五.应用程序开发…
Linux与Windows的设备驱动模型对比 名词缩写: API 应用程序接口(Application Program Interface ) ABI 应用系统二进制接口(Application Binary Interface) 设备驱动是操作系统的一部分,它能够通过一些特定的编程接口便于硬件设备的使用,这样软件就可以控制并且运行那些设备了.因为每个驱动都对应不同的操作系统,所以你就需要不同的 Linux.Windows 或 Unix 设备驱动,以便能够在不同的计算机上使用你的设备.这就是为什…
我思念的城市已是黄昏 为何我总对你一往情深 曾经给我快乐 也给我创伤 曾经给我希望 也给我绝望 我在遥远的城市 陌生的人群 感觉着你遥远的忧伤 我的幻想 你的忧伤,像我的的绝望,那样漫长,,,,,这是今天的旋律,直入心底~~~~~~~~~~~~~~~~ 在Linux 系统中,I2C 驱动由3 部分组成,即I2C 核心.I2C 总线驱动和I2C 设备驱动,I2C 总线仅仅使用SCL.SDA 这两根信号线就实现了设备之间的数据交互,极大地简化了对硬件资源和PCB 板布线空间的占用 1 Linux的I…
本文基于icool210开发板,内核版本:linux2.6.35: 驱动代码: (1)头文件:led.h #ifndef __LED_H__ #define __LED_H__ #define LED_MAGIC 'l' #define LED_1_ON _IO(LED_MAGIC, 0) #define LED_1_OFF _IO(LED_MAGIC, 1) #define LED_2_ON _IO(LED_MAGIC, 3) #define LED_2_OFF _IO(LED_MAGIC,…
设备总线驱动模型:http://blog.csdn.net/lizuobin2/article/details/51570196 本文主要参考:http://www.wowotech.net/device_model/platform_device.html platform平台设备驱动是基于设备总线驱动模型的,它只不过是将 device 进一步封装成为 platform_device,将 device_driver 进一步封装成为 platform_device_driver,前面已经分析过设…
USB 的全称是 Universal Serial Bus,顾名思义:通用串行总线. 提到总线,联想一下,在你心目中总线总是用来干嘛的?还记得 I2C 总线? I2C 总线上挂有二条信号线,一条是 SCL. SDA,这二货是干嘛滴?传输数据!对,就是用来传输数据的.换句话说,就是用来通信的. 既然是用来通信的,那自然就要用通信协议来规范通信. 在 USB 的世界里有一种协议叫 USB 协议, 这协议太复杂了,一时半载的难以消化,这里我们并不深入 USB 协议. 10.1 USB 总线简介 USB…
在Linux操作系统中,RTC设备驱动的架构如下图所示: RTC设备驱动涉及的文件:class.c.rtc-dev.c : 建立/dev/rtc0设备,同时注册相应的操作函数.interface.c :           作为中间层,做一个传递和封装rtc-s3c.c :             具体的物理实现,各种操作硬件模块的函数其他 rtc-sysfs.c rtc-proc.c 从RTC设备看所有驱动的写法(1)所有驱动第一步是注册"驱动程序"(2)注册"设备&quo…
1 驱动程序,操作系统,文件系统和应用程序之间的关系 字符设备和块设备映射到操作系统中的文件系统,由文件系统向上提供给应用程序统一的接口用以访问设备. Linux把设备视为文件,称为设备文件,通过对设备文件的读写操作实现对真实外设的操作. 从驱动程序的角度来从下到上看层次结构,包含了硬件设备,设备驱动程序(中断处理程序,设备服务程序),文件系统和用户进程四个层次: 需要知道的两个概念: 设备号: 主设备号:标识同一类设备,对应一个驱动程序 从设备号:标识一个设备实例,从设备号使得不同的物理设备使…
/************************************************************************************ *本文为个人学习记录,如有错误,欢迎指正. *本文参考资料: * https://blog.csdn.net/qq_28992301/article/details/52410587 * https://blog.csdn.net/hanp_linux/article/details/79037610 ************…
上一章主要讲了请求队列的一系列问题.下面主要说一下请求函数.首先来说一下硬盘类块设备的请求函数. 请求函数可以在没有完成请求队列的中的所有请求的情况下就返回,也可以在一个请求都不完成的情况下就返回. 下面贴出请求函数的例程: static int simp_blkdev_make_request(struct request_queue *q, struct bio *bio) { struct bio_vec *bvec; int i; void *dsk_mem; if ((bio->bi_…
块设备的驱动比字符设备的难,这是因为块设备的驱动和内核的联系进一步增大,但是同时块设备的访问的几个基本结构和字符还是有相似之处的. 有一句话必须记住:对于存储设备(硬盘~~带有机械的操作)而言,调整读写的顺序作用巨大,因为读写连续的扇区比分离的扇区快. 但是同时:SD卡和U盘这类设备没有机械上的限制,所以像上面说的进行连续扇区的调整显得就没有必要了. 先说一下对于硬盘这类设备的简单的驱动. 在linux的内核中,使用gendisk结构来表示一个独立的磁盘设备或者分区.这个结构中包含了磁盘的主设备…
目录 更新记录 一.Linux驱动的软件架构 1.1 出发点 1.2 分离思想 1.3 分层思想 二.platform设备驱动 2.1 platform设备 2.2 platform驱动 2.3 platform总线 2.4 platform 的优点 三.设备驱动的分层思想 3.1 输入设备驱动 3.2 RTC 设备驱动 3.3 Framebuffer 设备驱动 3.4 终端设备驱动 3.5 misc 设备驱动 3.6 驱动核心层 四.主机驱动与外设驱动分离的设计思想 4.1 主机驱动与外设驱动…
引子 Linux操作系统的一大优势就是支持数以万计的芯片设备,大大小小的芯片厂商工程师都在积极地向Linux kernel提交设备驱动代码.能让这个目标得以实现,这背后隐藏着一个看不见的技术优势:Linux内核提供了一套易于扩展和维护的设备驱动框架.Linux内核本身提供一套设备驱动模型,此模型提供了Linux内核对设备的一般性抽象描述,包括设备的电源管理.对象生命周期管理.用户空间呈现等等.在设备模型的帮助下,设备驱动开发工程师从设备的一般性抽象中解脱出来.但是每个设备的具体功能实现还需要大量…
1.什么是platform(平台)总线? 相对于USB.PCI.I2C.SPI等物理总线来说,platform总线是一种虚拟.抽象出来的总线,实际中并不存在这样的总线. 那为什么需要platform总线呢?其实是Linux设备驱动模型为了保持设备驱动的统一性而虚拟出来的总线.因为对于usb设备.i2c设备. pci设备.spi设备等等,他们与cpu的通信都是直接挂在相应的总线下面与我们的cpu进行数据交互的,但是在我们的嵌入式系统当中, 并不是所有的设备都能够归属于这些常见的总线,在嵌入式系统里…
/********************************************************/ 内核版本:2.6.35.7 运行平台:三星s5pv210 /********************************************************/ 1.什么是platform(平台)总线? 相对于USB.PCI.I2C.SPI等物理总线来说,platform总线是一种虚拟.抽象出来的总线,实际中并不存在这样的总线. 那为什么需要platform总线呢?…
1.什么是设备驱动模型? 设备驱动模型,说实话这个概念真的不好解释,他是一个比较抽象的概念,我在网上也是没有找到关于设备驱动模型的一个定义,那么今天就我所学.所了解 到的,我对设备驱动模型的一个理解:设备驱动模型其实是Linux内核为了管理硬件上的设备和对应的驱动制定的一套软件体系.那么其实设备驱动模型是一个比较 抽象.比较广的一个概念,一两句话是很难说清楚的,类(class).总线(bus).设备(device).驱动(driver).mdev(自动创建设备节点和设备类) sysfs等都属于设…
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为platform_device.总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成. platform_match函数首先判断是否有id_table,如果有则使用id_table来进行匹配,否则,判断plat…
1. 平台总线(Platform bus)是linux2.6内核加入的一种虚拟总线,其优势在于采用了总线的模型对设备(没有挂到真实总线的设备)与驱动进行了管理,这样提高了程序的可移植性. 2. 平台总线开发设备驱动流程 (1)定义平台设备 (2)注册平台设备 (3)定义平台驱动 (4)注册平台驱动 3. 平台设备使用struct platform_device来描述 struct platform_device { const char * name; int id; struct device…
platform总线是一种虚拟的总线,相应的设备则为platform_device,而驱动则为platform_driver.Linux 2.6的设备驱动模型中,把I2C.RTC.LCD等都归纳为platform_device. 总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动:相反的,在系统每注册一个驱动的时候,会寻找与之匹配的设备,而匹配由总线完成. Linux2.6系统中定义了一个bus_type的实例platform_bus_type [cpp] view plai…
http://edu.51cto.com/course/course_id-379-page-1.html http://edu.51cto.com/course/course_id-379-page-2.html 课时目录 共13课时 1第一章 Linux设备驱动模型[可试看] 60分钟   1.1 Linux设备分类:1.2 Sys,总线,设备和驱动:1.3 热插拔:1.4 udev 2第二章 Linux内核模块 49分钟   2.1 内核编程主要API:2.2 定时器:2.3 中断顶底半部…
本博实时更新<Linux设备驱动开发具体解释(第3版)>的最新进展. 2015.2.26 差点儿完毕初稿. 本书已经rebase到开发中的Linux 4.0内核,案例多数基于多核CORTEX-A9平台. [F]是修正或升级:[N]是新增知识点:[D]是删除的内容 第1章 <Linux设备驱动概述及开发环境构建>[D]删除关于LDD6410开发板的介绍[F]更新新的Ubuntu虚拟机[N]加入关于QEMU模拟vexpress板的描写叙述 第2章 <驱动设计的硬件基础> […
linux 设备驱动概述 目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和Linux API进行应用软件的编写: 从事这方面的开发工作,主要需要学习:符合linux posix标准的API函数及系统调用,linux的多任务编程技巧:多进程.多线程.进程间通信.多任务之间的同步互斥等,嵌入式数据库的学习,UI编程:QT.miniGUI等. (2)Linux固件工程师(Fir…