嵌入式系统IIC设备驱动程序设计与实现_第1页
嵌入式系统IIC设备驱动程序设计与实现_第2页
嵌入式系统IIC设备驱动程序设计与实现_第3页
嵌入式系统IIC设备驱动程序设计与实现_第4页
嵌入式系统IIC设备驱动程序设计与实现_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、技 术 创 新中 文 核 心 期 刊 微 计 算 机 信 息 (嵌 入 式 与 SOC 2006年 第 22卷 第 10-2期 元 /:现场总线技术应用 200例 嵌 入 式 系 统 应 用嵌入式系统 IIC 设备驱动程序设计与实现Design and Im plem entation of IIC Drivers Based on Em bedded System(南昌工程学院 朱华生叶 军Zhu,Huasheng Ye ,Jun摘要 :为 了 设 计 出 稳 定 可 靠 的 驱 动 程 序 , 首 先 介 绍 IIC 总 线 数 据 传 输 的 时 序 和 嵌 入 式 Linux 系 统

2、驱 动 程 序 的 框 架 结 构 , 然 后 分析 了 基 于 ARM9嵌 入 式 Linux 系 统 IIC 设 备 驱 动 程 序 设 计 的 技 术 难 点 及 解 决 方 法 , 最 后 介 绍 了 基 于 X1227芯 片 EEPROM 设 备 驱 动 程 序 的 实 现 步 骤 。关键词 :Linux;IIC 总线 ; 驱动程序 中图分类号 :TP311文献标识码 :AAbstract:To design credible drivers, first introduces the time sequence of data transmission on IIC bus and

3、 frame of driver in embed-ded linux ,then analyses difficulties of designing driver based on ARM9embedded linux , finally introduces approach of designing EEPROM drivers based on X1227. Key words:linux,IIC bus,drivers文章编号 :1008-0570(200610-2-0170-031前言IIC 总 线 (Inter Integrate Circuit Bus 是 Philips 公

4、 司首先推出的新一代串行扩展总线 , 在嵌入式系统中 得到了广泛的应用 。 S3C2410处理器其性能价格比好 , 所以在嵌入式市场占有率较高 。 S3C2410采用 ARM9内核 , 内部集成 IIC 总线 , 因此它连接 IIC 设备非常方 便 。 本文主要研究基于 S3C2410嵌入式 Linux 系统 IIC 设备驱动程序的设计方法 。2嵌入式系统 IIC 总线的工作时序在 S3C2410嵌入式系统 IIC 总线中 , 一般微处理器是总线上的主机 , 其它是从机 。 IIC 总线上可同时接 多个从机 , 每个从机都有一个唯一的地址 。图 1IIC 总线数据传输时序图主机负责 IIC 总

5、线的初始化 、 数据传输 、 产生时钟 信号等工作 。 IIC 总线传输的时序是 :从 START (开始 位 开始传输 , STOP (结束位 结束传输 。 传送到 SDA 上的每 一个字节必 须是 8位 , 每次 传送的字节 数不 限 , 每一个字节后面必须跟一个应答位 。 如果在传输 过程中 , 从设备不能 一次接受完 一个字节 , 此 时它就 会使时钟置为低电平 , 迫使主 设备等待 ; 当 从设备能 接收下一个数据字节后 , 将释放 SCL 线 , 继续 后面的数据传输 。 数据传输的时序如图 1所示 。2.1IIC 总线写操作时序IIC 总线写操作有二种方式 :字节写和页面写 。

6、字 节写是指 :每次 在指定位置 写入一个字 节数据 , 时序 如图 2(a 所示 。 首先主机向从机发送启动信号和 “ 从 机地址 +写 ” , 然后等待应答信号 ; 当应答信号 来到之 后再发一个器件内部地址 , 然后再次等待应答信号 ; 当应答信号来到之后立即发送数据 , 当下一个应答信 号来到之后发送停止信号 。 页面写和字节写操作很类 似 , 只是主机在完成第一轮资料传送之后不发送停止 信号 , 而继续发送数据 , 时序如图 2(b 所示 。图 2IIC 总线写数据时序图2.2IIC 总线读操作时序IIC 总线读操作主要有二种方式 :指定位置读和 连续读 。 指定位置读时序如图 3(

7、a 所示 , 首先主机向 从机发送启动信号和 “ 从 机地址 +写 ” , 在 接收到应答 信号之后马上发送一个器件内部地址 , 然后再次等待 应答信号 ; 当应答信号来到之后发送一个启动信号和 “ 从机地址 +读 ” , 然后再次等待应答信号 ; 当应答信号 来的时候就可以接受读取位址的字节数据 , 接受完成 后发送一个停止信号 。 连续读时序如图 3(b 所示 , 当朱华生 :副教授基金项目 :江西省自然科学基金资助 (编号 :0511062- :360元 /年技 术 创 新嵌 入 式 系 统 应 用PLC 技术应用 200例 您 的 论 文 得 到 两 院 院 士 关 注接收到一个字节数

8、据后 , 不 发停止信号 , 而发一个应 答信号 ; 当从机收到应答信号后其自动将地址加 1, 然后 继续发送该地址对应的数据 , 直到收到一个停止信号 。图 3IIC 总线读数据时序图3嵌入式 Linux 驱动程序的框架在嵌入式 Linux 系统中设备驱动程序是内核的一 部分 , 完成对设备初始化 、 读写操作和控制等功能 。 驱 动程序隐藏了硬件设备的具体细节 , 对不同的设备提 供一致的接口 , 这些接口通过 file_operations 结构来定 义 , 设计驱动程序的大部分工作就是根据硬件结构来 “填写 ” 结构体中定义的函数 。 主要的函数包括 open( 、 read( 、 w

9、rite( 、 ioctl( 和 release( 等等 。Open( 函数的主要功能是提供给驱动程序初始化 能力 , 为以后的设备操作做好准备 。 read( 函数的主要 功能是读设备数据 。 write( 函数的主要功能是写设备 数据 。 ioctl( 函数的主要功能是执行读 、写之外的操作 , 如 :配置设备 。 release( 函数功能与 open( 函数相反 。除以上几个函数以外 , 还有 2个非常重要的函数 module_init ( 和 module_exit ( , 驱动程序是从 mod-ule_init( 函数开始执行 , 它是在加载模块时执行的 。 它 的功能是 :将初始

10、化函数加入内核全局初始化函数列 表中 , 在内核初始化时 执行驱动的 初始化函数 , 从而 完成驱动的初始化和注册 , 之后驱动便停止等待被应 用软件调用 。 module_exit( 函数的功能和 module_init( 相反 。4嵌 入 式 Linux 系 统 IIC 设 备 驱 动程序的设计IIC 设备 (属于字符设备 驱动程序按功能可分为 6个主要模块 :初始化 、退出处理 、 打开 、 释放 、 读和写 模块 。 在 ARM9嵌入式系统中 , 连接在 IIC 总线上的设 备 , 必须按照 IIC 总线时序传输 。 由于 IIC 总线有多种 时序 , 这就为驱动程序设计带来一定的难度

11、 。 在各种 时序中 , 数据传输的开始和结束操作都是相同的 , 所 以驱动程序的初始化 、 退 出处理 、 打开 和释放模块 都 相同 。 不同的时序只是读和写方式有所区别 , 因此要 设计不同的读和写模块 。为了方便驱动程序的设计 , 可以将 IIC 总线的 4种时序写成相应的函数 。 如 :将图 2(a 所示的 “ 字节写 ” 时序设计成 WrBy_Iic( 函数 , 具体实现函数如下 :WrBy_Iic(U8slvAddr, U8addr, U8wdataIICDS=slvAddr&0xfe;/从地址 +“写 ” 标记 IICSTAT=0xf0; /开始传输 Run_IicPo

12、ll(; /等待应答信号 IICDS=addr; /设备内部地址 IICCON=0xaf; /继续传输 Run_IicPoll(; IICDS=wdata; /待写数据 IICCON=0xaf; Run_IicPoll(; IICSTAT=0xd0;/停止传输 和以上设计类似将 “ 页面写 ” 设计成 WrPa_Iic( 函 数 、 “ 指定位置读 ” 设计成 RdBy_Iic( 函数 、 “连续读 ” 设 计成 RdCo_Iic( 函数 。 当设计具体读写模块时 , 可以从 这些函数中选择不同的函数来构成 。5X1227驱动程序的设计和实现X1227是一个 RTC 芯片 , 除基本的时钟功能

13、外 ,还有 4K 位 EEPROM 等 。 它支持 IIC 总线 , 与 s3c2410连接电路如图 4所示 。 当使用 Linux 操作系统时 , 可以 为 X1227芯片中的时钟和 EEPROM 设计 2个不同的 驱动程序 。 时钟设备地址是 (1101111X 2、 , EEPROM 设备地址是 (1010111X 2, 其中最低位是读写标志 。 下 面介绍 EEPROM 驱动程序的实现方法 。EEPROM 驱动程序主要由 6个模块组成 , 其中打 开和释放模块只是建立和释放连接 , 所以可以将它们 写成 2个空的函数 , 驱动程序的关键是设计初始化 、 退出处理 、 读和写模块 。 另

14、外 , 设计驱动程序时 , 还必 须给结构 file_operations 结构赋初值 , 赋值语句如下 :static struct file_operations eeprom_fops =open:eeprom _open, read:eeprom _read, write:eeprom _write, release:eeprom _release,;本结构的主要作用是 :将不同的设备提供一致的 接口 。 如在应用程序中 , 对不同设备进行读操作时 , 都 使用 read 函数 , 写操作时 , 都使用 write 函数 。图 4X1227电路图5.1设备初始化模块设备初始化模块的主要

15、功能是 :初始化设备 、 向 内核注册设备等 。 具体实现函数如下 :module_init(171-技 术 创 新中 文 核 心 期 刊 微 计 算 机 信 息 (嵌 入 式 与 SOC 2006年 第 22卷 第 10-2期元 /:现场总线技术应用 200例 嵌 入 式 系 统 应 用address_map(;/地址映射eepromMajor =register_chrdev (0,DEVICE_NAME, &eeprom_fops;/申请主设备号devfs_eeprom_dir =devfs_mk_dir (NULL,"eeprom", NULL; /创建设备

16、文件目录devfs_eeprom_raw =devfs_register (NULL,"eeprom", /注册设备文件 5.2设备退出处理模块 设备初始化模块的主要功能是 :释放设备所占用 的资源 。 具体实现函数如下 :module_exit( devfs_unregister(devfs_eeprom_raw ; /删除设备文件 devfs_unregister(devfs_eeprom_dir; /删 除 设 备 文 件目录unregister_chrdev(eepromMajor,DEVICE_NAME; /释放主设备号 5.3读数据模块EEPROM 读数据模块采

17、用连续读时序 。 具体实现 函数如下 :eeprom_read (struct file *filep,char *buffer,size_t length,loff_t *offInit_Iic(;/初始化 IIC 总线RdCo_Iic(0xaf,0,dbuf,length;/连续读数据copy_to_user(buffer,dbuf,length;/内核态到用户态 5.4写数据模块EEPROM 写数据模块采用页面写时序 。 具体实现 函数如下 :eeprom_write (struct file *filep,char *buffer,size_tlength,loff_t *offcop

18、y_from_user (dbuf,buffer,length;/用 户 态 到 内 核态Init_Iic(;WrBy_Iic(0xde,0x3f,0x02; /写状态寄存器 WrPa_Iic(0xae,0,dbuf,length;/写一批数据 5.5打开和释放模块在 EEPROM 驱动程序中 , 打开和释放模块没有具 体的任务 。 具体实现函数如下 :int eeprom_open(struct inode *inode,struct file *filp MOD_INC_USE_COUNT;/使用计数加 1return 0;int eeprom_release (struct inode

19、*inode, struct file*filpMOD_DEC_USE_COUNT;/使用计数减 1return 0;驱动程序设计完成后 , 再编写 Makefile 文件 , 通过 make 命令生成目标文件 , 最后利用 insmod 命令向内 核加载驱动程序 , 这时在 /dev 就会新增一个设备文件 。6结束语以上程序在嵌入式实验箱上进行测试 , 性能稳定 可靠 。 本文的创新点是 :如何根据时序快速设计出 IIC 总线设备的驱 动程序 。 只要 仔细分析硬 件的工作时 序 , 并结合驱 动程序框架 , 就可以设计 出性能稳定 可 靠的驱动程序 。参考文献 :1ALESSANDRO R

20、UBINI 著 ,LISOLEG 译 .LINUX 设备驱动程序 (第二版 M. 北京 :中国电力出版社 .2002.2朱华生 , 胡凯利 . 基地 Linux 系统的 HHARM9电机驱动程序设 计 J. 南昌工程学院学报 .2005,4:51-53.3陈志辉 .I2C 总线在 MCS51系列单片机数据采集中的实现 J. 微计算机信息 ,2005,1:67-68.Biography:Zhu huasheng, male, 1965-,associate professor,re-search direction :development and application of embedded system.(330099南昌 南昌工程学院计算机系 朱华生 叶军(Computer Science and technology department of NIT,Nan-chang,330099Zhu,Huasheng Ye,Jun通 讯 地 址 :(330099南 昌 市 高 新 技 术 开 发 区 天 祥 大 道 289号南昌工程学院计算机系 朱华生(上接第 71页 1王小明 ,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论