spi总线驱动linux下开发19.pdfVIP

  • 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

文档评论(0)

1亿VIP精品文档

相关文档