- 3
- 0
- 约9.74千字
- 约 9页
- 2022-05-26 发布于北京
- 举报
Linux下spi 驱动开发 (1)
华清远见 刘洪涛
一、概述
基于子系统去开发驱动程序已经是linux 内核中普遍的做法了。前面写过基于I2C 子系
统的驱动开发。本文介绍另外一种常用总线SPI 的开发方法。SPI 子系统的开发和I2C 有很
多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基于SPI 子系统
开发的理论框架;第二部分以华清远见教学平台FS_S5PC100 上的M25P10 为例(内核版
本2.6.29),编写一个SPI 驱动程序实例。
二、SPI 总线协议简介
介绍驱动开发前,需要先熟悉下SPI 通讯协议中的几个关键的地方,后面在编写驱动时,
需要考虑相关因素。
SPI 总线由MISO (串行数据输入)、MOSI (串行数据输出)、SCK (串行移位时钟)、
CS (使能信号)4 个信号线组成。如FS_S5PC100 上的M25P10 接线为:
上图中M25P10 的D 脚为它的数据输入脚,Q 为数据输出脚,C 为时钟脚。
SPI 常用四种数据传输模式,主要差别在于:输出串行同步时钟极性(CPOL )和相位
(CPHA )可以进行配置。如果CPOL= 0,串行同步时钟的空闲状态为低电平;如果CPOL= 1,
串行同步时钟的空闲状态为高电平。如果CPHA= 0 ,在串行同步时钟的前沿(上升或下降)
数据被采样;如果CPHA = 1,在串行同步时钟的后沿(上升或下降)数据被采样。
这四种模式中究竟选择哪种模式取决于设备。如M25P10 的手册中明确它可以支持的两
种模式为:CPOL=0 CPHA=0 和 CPOL=1 CPHA=1
三、linux下SPI 驱动开发
首先明确SPI 驱动层次,如下图:
连接所有平台设备和驱动的
Platform bus
SPI控制器对应的 SPI控制器对应的
platform_device platform_driver
SPI总线可理解为SPI控制器引出的总线
连接所有SPI设备和驱动的
SPI bus
SPI设备对应的 SPI设备对应的
spi_device spi_driver
我们以上面的这个图为思路
1、 Platform bus
Platform bus 对应的结构是platform_bus_type,这个内核开始就定义好的。我们不需
要定义。
2 、Platform_device
SPI 控制器对应platform_device 的定义方式,同样以S5PC100 中的SPI 控制器为例,
参看arch/arm/plat-s5pc1xx/dev-spi.c 文件
struct platform_device s3c_device_spi0 = {
.name = s3c64xx-spi, //名称,要和Platform_driver 匹配
.id = 0, //第0 个控制器,S5PC100 中有3 个控制器
.num_resources = ARRAY_SIZE(s5pc1xx_spi0_resource),// 占用 的种类
.resource = s5pc1xx_spi0_resource,//指向 结构数组的指针
.dev = {
.dma_mask = spi_dmamask, //dma 寻址范围
.coherent_dma_mask = DMA_BIT_MAS
您可能关注的文档
最近下载
- 关于层次分析法和灰色关联分析法的研究详解.doc VIP
- 高考一轮复习讲义第一讲学生 三角函数的概念同角三角函数关系式与诱导公式.doc VIP
- 高考数学 一轮复习讲义 任意角的三角函数.docx VIP
- 国际贸易实务实训教程.pdf VIP
- 高考数学 一轮复习讲义 -简单的三角恒等变换.docx VIP
- 如果要写年(带歌词完整版毛不易2024春晚歌曲) 高清钢琴谱五线谱.docx VIP
- 半边山半边海(原调版) 高清钢琴谱五线谱.docx VIP
- 下肢静脉血栓形成滤器术后护理.doc VIP
- 女性阻塞性睡眠呼吸暂停诊治专家共识 .pdf VIP
- 《我家是动物园》教案(2025—2026学年).docx VIP
原创力文档

文档评论(0)