linux下spi驱动开发

linux下spi驱动开发

ID:25777146

大小:873.96 KB

页数:18页

时间:2018-11-22

linux下spi驱动开发_第1页
linux下spi驱动开发_第2页
linux下spi驱动开发_第3页
linux下spi驱动开发_第4页
linux下spi驱动开发_第5页
资源描述:

《linux下spi驱动开发》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Linux下spi驱动开发 一、概述基于子系统去开发驱动程序已经是linux内核中普遍的做法了。前面写过基于I2C子系统的驱动开发。本文介绍另外一种常用总线SPI的开发方法。SPI子系统的开发和I2C有很多的相似性,大家可以对比学习。本主题分为两个部分叙述,第一部分介绍基于SPI子系统开发的理论框架;第二部分以华清远见教学平台FS_S5PC100上的M25P10芯片为例(内核版本2.6.29),编写一个SPI驱动程序实例。二、SPI总线协议简介介绍驱动开发前,需要先熟悉下SPI通讯协议中的几个关键的地方,后面在编写驱动时

2、,需要考虑相关因素。SPI总线由MISO(串行数据输入)、MOSI(串行数据输出)、SCK(串行移位时钟)、CS(使能信号)4个信号线组成。如FS_S5PC100上的M25P10芯片接线为: 上图中M25P10的D脚为它的数据输入脚,Q为数据输出脚,C为时钟脚。SPI常用四种数据传输模式,主要差别在于:输出串行同步时钟极性(CPOL)和相位(CPHA)可以进行配置。如果CPOL=0,串行同步时钟的空闲状态为低电平;如果CPOL=1,串行同步时钟的空闲状态为高电平。如果CPHA=0,在串行同步时钟的前沿(上升或下降)数据被

3、采样;如果CPHA=1,在串行同步时钟的后沿(上升或下降)数据被采样。  这四种模式中究竟选择哪种模式取决于设备。如M25P10的手册中明确它可以支持的两种模式为:CPOL=0CPHA=0 和CPOL=1CPHA=1 三、linux下SPI驱动开发首先明确SPI驱动层次,如下图:        我们以上面的这个图为思路1、PlatformbusPlatformbus对应的结构是platform_bus_type,这个内核开始就定义好的。我们不需要定义。2、Platform_deviceSPI控制器对应platform_d

4、evice的定义方式,同样以S5PC100中的SPI控制器为例,参看arch/arm/plat-s5pc1xx/dev-spi.c文件点击(此处)折叠或打开1.structplatform_devices3c_device_spi0 = {2.                          .name = "s3c64xx-spi", //名称,要和Platform_driver匹配3.                .id = 0, //第0个控制器,S5PC100中有3个控制器4.                

5、.num_resources = ARRAY_SIZE(s5pc1xx_spi0_resource), //占用资源的种类5.                .resource = s5pc1xx_spi0_resource, //指向资源结构数组的指针6.                .dev = {1.                                  .dma_mask = &spi_dmamask, //dma寻址范围 2.                        .coherent_dm

6、a_mask = DMA_BIT_MASK(32), //可以通过关闭cache等措施保证一致性的dma寻址范围3.                        .platform_data = &s5pc1xx_spi0_pdata, //特殊的平台数据,参看后文4.                },5.                };6.7.staticstructs3c64xx_spi_cntrlr_infos5pc1xx_spi0_pdata = {8.                  .cfg_gpi

7、o = s5pc1xx_spi_cfg_gpio, //用于控制器管脚的IO配置9.        .fifo_lvl_mask = 0x7f,10.                  .rx_lvl_offset = 13,11.                };12.13.static int s5pc1xx_spi_cfg_gpio(structplatform_device *pdev)14.                  {15.                  switch (pdev->id) {1

8、6.                  case 0:17.                          s3c_gpio_cfgpin(S5PC1XX_GPB(0), S5PC1XX_GPB0_SPI_MISO0);18.                          s3c_gpio_cfgpin(S5

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。