嵌入式系统IIC设备驱动程序设计与实现.docx
- 文档编号:30636966
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:10
- 大小:23.70KB
嵌入式系统IIC设备驱动程序设计与实现.docx
《嵌入式系统IIC设备驱动程序设计与实现.docx》由会员分享,可在线阅读,更多相关《嵌入式系统IIC设备驱动程序设计与实现.docx(10页珍藏版)》请在冰豆网上搜索。
嵌入式系统IIC设备驱动程序设计与实现
技术创新
中文核心期刊《微计算机信息》(嵌入式与SOC2006年第22卷第10-2期
元/:
现场总线技术应用200例》
嵌入式系统应用
嵌入式系统IIC设备驱动程序设计与实现
DesignandImplementationofIICDriversBasedonEmbeddedSystem
(南昌工程学院朱华生
叶军
Zhu,HuashengYe,Jun
摘要:
为了设计出稳定可靠的驱动程序,首先介绍IIC总线数据传输的时序和嵌入式Linux系统驱动程序的框架结构,然后分
析了基于ARM9嵌入式Linux系统IIC设备驱动程序设计的技术难点及解决方法,最后介绍了基于X1227芯片EEPROM设备驱动程序的实现步骤。
关键词:
Linux;IIC总线;驱动程序中图分类号:
TP311文献标识码:
A
Abstract:
Todesigncredibledrivers,firstintroducesthetimesequenceofdatatransmissiononIICbusandframeofdriverinembed-dedlinux,thenanalysesdifficultiesofdesigningdriverbasedonARM9embeddedlinux,finallyintroducesapproachofdesigningEEPROMdriversbasedonX1227.Keywords:
linux,IICbus,drivers
文章编号:
1008-0570(200610-2-0170-03
1前言
IIC总线(InterIntegrateCircuitBus是Philips公司首先推出的新一代串行扩展总线,在嵌入式系统中得到了广泛的应用。
S3C2410处理器其性能价格比好,所以在嵌入式市场占有率较高。
S3C2410采用ARM9内核,内部集成IIC总线,因此它连接IIC设备非常方便。
本文主要研究基于S3C2410嵌入式Linux系统IIC设备驱动程序的设计方法。
2嵌入式系统IIC总线的工作时序
在S3C2410嵌入式系统IIC总线中,一般微处理
器是总线上的主机,其它是从机。
IIC总线上可同时接多个从机,每个从机都有一个唯一的地址。
图1IIC总线数据传输时序图
主机负责IIC总线的初始化、数据传输、产生时钟信号等工作。
IIC总线传输的时序是:
从START(开始位开始传输,STOP(结束位结束传输。
传送到SDA上的每一个字节必须是8位,每次传送的字节数不限,每一个字节后面必须跟一个应答位。
如果在传输过程中,从设备不能一次接受完一个字节,此时它就会使时钟置为低电平,迫使主设备等待;当从设备能接收下一个数据字节后,将释放SCL线,继续后面的
数据传输。
数据传输的时序如图1所示。
2.1IIC总线写操作时序
IIC总线写操作有二种方式:
字节写和页面写。
字节写是指:
每次在指定位置写入一个字节数据,时序如图2(a所示。
首先主机向从机发送启动信号和“从机地址+写”,然后等待应答信号;当应答信号来到之后再发一个器件内部地址,然后再次等待应答信号;当应答信号来到之后立即发送数据,当下一个应答信号来到之后发送停止信号。
页面写和字节写操作很类似,只是主机在完成第一轮资料传送之后不发送停止信号,而继续发送数据,时序如图2(b所示。
图2IIC总线写数据时序图
2.2IIC总线读操作时序
IIC总线读操作主要有二种方式:
指定位置读和连续读。
指定位置读时序如图3(a所示,首先主机向从机发送启动信号和“从机地址+写”,在接收到应答信号之后马上发送一个器件内部地址,然后再次等待应答信号;当应答信号来到之后发送一个启动信号和“从机地址+读”,然后再次等待应答信号;当应答信号来的时候就可以接受读取位址的字节数据,接受完成后发送一个停止信号。
连续读时序如图3(b所示,当
朱华生:
副教授
基金项目:
江西省自然科学基金资助(编号:
0511062
-
-
:
360元/年
技术创新
嵌入式系统应用
PLC技术应用200例》
您的论文得到两院院士关注
接收到一个字节数据后,不发停止信号,而发一个应答信号;当从机收到应答信号后其自动将地址加1,然后继续发送该地址对应的数据,直到收到一个停止信号。
图3IIC总线读数据时序图
3嵌入式Linux驱动程序的框架
在嵌入式Linux系统中设备驱动程序是内核的一部分,完成对设备初始化、读写操作和控制等功能。
驱动程序隐藏了硬件设备的具体细节,对不同的设备提供一致的接口,这些接口通过file_operations结构来定义,设计驱动程序的大部分工作就是根据硬件结构来“
填写”结构体中定义的函数。
主要的函数包括open(、read(、write(、ioctl(和release(等等。
Open(函数的主要功能是提供给驱动程序初始化能力,为以后的设备操作做好准备。
read(函数的主要功能是读设备数据。
write(函数的主要功能是写设备数据。
ioctl(函数的主要功能是执行读、
写之外的操作,如:
配置设备。
release(函数功能与open(函数相反。
除以上几个函数以外,还有2个非常重要的函数module_init(和module_exit(,驱动程序是从mod-ule_init(函数开始执行,它是在加载模块时执行的。
它的功能是:
将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用。
module_exit(函数的功能和module_init(相反。
4嵌入式Linux系统IIC设备驱动
程序的设计
IIC设备(属于字符设备驱动程序按功能可分为6个主要模块:
初始化、
退出处理、打开、释放、读和写模块。
在ARM9嵌入式系统中,连接在IIC总线上的设备,必须按照IIC总线时序传输。
由于IIC总线有多种时序,这就为驱动程序设计带来一定的难度。
在各种时序中,数据传输的开始和结束操作都是相同的,所以驱动程序的初始化、退出处理、打开和释放模块都相同。
不同的时序只是读和写方式有所区别,因此要设计不同的读和写模块。
为了方便驱动程序的设计,可以将IIC总线的4种时序写成相应的函数。
如:
将图2(a所示的“字节写”时序设计成WrBy_Iic(函数,具体实现函数如下:
WrBy_Iic(U8slvAddr,U8addr,U8wdata
{┅
IICDS=slvAddr&0xfe;//从地址+“
写”标记IICSTAT=0xf0;//开始传输Run_IicPoll(;//等待应答信号┅
IICDS=addr;//设备内部地址IICCON=0xaf;//继续传输Run_IicPoll(;┅
IICDS=wdata;//待写数据IICCON=0xaf;Run_IicPoll(;┅
IICSTAT=0xd0;//停止传输┅}
和以上设计类似将“页面写”设计成WrPa_Iic(函数、“指定位置读”设计成RdBy_Iic(函数、“
连续读”设计成RdCo_Iic(函数。
当设计具体读写模块时,可以从这些函数中选择不同的函数来构成。
5X1227驱动程序的设计和实现
X1227是一个RTC芯片,除基本的时钟功能外,
还有4K位EEPROM等。
它支持IIC总线,与s3c2410连接电路如图4所示。
当使用Linux操作系统时,可以为X1227芯片中的时钟和EEPROM设计2个不同的驱动程序。
时钟设备地址是(1101111X2、,EEPROM设备地址是(1010111X2,其中最低位是读写标志。
下面介绍EEPROM驱动程序的实现方法。
EEPROM驱动程序主要由6个模块组成,其中打开和释放模块只是建立和释放连接,所以可以将它们写成2个空的函数,驱动程序的关键是设计初始化、退出处理、读和写模块。
另外,设计驱动程序时,还必须给结构file_operations结构赋初值,赋值语句如下:
staticstructfile_operationseeprom_fops={
open:
eeprom_open,read:
eeprom_read,write:
eeprom_write,release:
eeprom_release,};
本结构的主要作用是:
将不同的设备提供一致的接口。
如在应用程序中,对不同设备进行读操作时,都使用read函数,写操作时,都使用write函数。
图4X1227电路图
5.1设备初始化模块
设备初始化模块的主要功能是:
初始化设备、向内核注册设备等。
具体实现函数如下:
module_init(
171--
技术创新
中文核心期刊《微计算机信息》(嵌入式与SOC2006年第22卷第10-2期
元/:
现场总线技术应用200例》
嵌入式系统应用
{┅
address_map(;//地址映射
eepromMajor=register_chrdev(0,DEVICE_NAME,&eeprom_fops;//申请主设备号
devfs_eeprom_dir=devfs_mk_dir(NULL,"eeprom",NULL;//创建设备文件目录
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读数据模块采用连续读时序。
具体实现函数如下:
eeprom_read(structfile*filep,char*buffer,size_tlength,loff_t*off
{┅
Init_Iic(;//初始化IIC总线
RdCo_Iic(0xaf,0,dbuf,length;//连续读数据
copy_to_user(buffer,dbuf,length;//内核态到用户态┅}
5.4写数据模块
EEPROM写数据模块采用页面写时序。
具体实现函数如下:
eeprom_write(structfile*filep,char*buffer,size_t
length,loff_t*off
{…
copy_from_user(dbuf,buffer,length;//用户态到内核态
Init_Iic(;
WrBy_Iic(0xde,0x3f,0x02;//写状态寄存器WrPa_Iic(0xae,0,dbuf,length;//写一批数据…}
5.5打开和释放模块
在EEPROM驱动程序中,打开和释放模块没有具体的任务。
具体实现函数如下:
inteeprom_open(structinode*inode,structfile*filp{MOD_INC_USE_COUNT;//使用计数加1return0;}
inteeprom_release(structinode*inode,structfile
*filp
{MOD_DEC_USE_COUNT;//使用计数减1return0;}
驱动程序设计完成后,再编写Makefile文件,通过make命令生成目标文件,最后利用insmod命令向内核加载驱动程序,这时在/dev就会新增一个设备文件。
6结束语
以上程序在嵌入式实验箱上进行测试,性能稳定可靠。
本文的创新点是:
如何根据时序快速设计出IIC总线设备的驱动程序。
只要仔细分析硬件的工作时序,并结合驱动程序框架,就可以设计出性能稳定可靠的驱动程序。
参考文献:
[1]ALESSANDRORUBINI著,LISOLEG译.LINUX设备驱动程序(第二版[M].北京:
中国电力出版社.2002.
[2]朱华生,胡凯利.基地Linux系统的HHARM9电机驱动程序设计[J].南昌工程学院学报.2005,4:
51-53.
[3]陈志辉.I2C总线在MCS51系列单片机数据采集中的实现[J].微计算机信息,2005,1:
67-68.
作者简介:
朱华生,男,1965-,本科,副教授,研究方向:
嵌入式系统开发与应用.E-mail:
zhuhuasheng@
Biography:
Zhuhuasheng,male,1965-,associateprofessor,re-searchdirection:
developmentandapplicationofembeddedsystem.
(330099南昌南昌工程学院计算机系朱华生叶军
(ComputerScienceandtechnologydepartmentofNIT,Nan-chang,330099Zhu,HuashengYe,Jun
通讯地址:
(330099南昌市高新技术开发区天祥大道289号南昌工程学院计算机系朱华生
(收稿日期:
2006.2.16(修稿日期:
2006.3.17
(上接第71页
[1]王小明,毛敏.基于DSP的实时多任务嵌入式系统[J].微计算机信息,2005,10-2
[2]PhilLapsleyet.al,DSPProcessorFundamental:
ArchitecturesandFeatures,Berkeley,California:
BerkeleyDesignTechnology,Inc,1996
[3]ADSP-219x/2191DSPHardwareReference,AnalogDevicesInc,2000
[4]JL.Hennessy,DA.Patterson著,
计算机体系结构:
量化研究方法(第三版.北京:
机械工业出版社,2003
作者简介:
钟冬庆,男,1971.12,汉,讲师,研究方向:
计算机应用技术,E-mail:
gnsyzdq@。
Biography:
Zhongdongqing,male,1971.12,Hannationality,Lecturer,Researchfield:
Computationalappliedtechnology.
(341000江西赣州赣南师范学院数学与计算机系钟冬庆
(DepartmentofMathematicalandComputerScience,GannanTeachersCollege,Ganzhou,China,341000Zhong,Dongqing
通讯地址:
(341000江西省赣南师范学院数学与计算机系钟冬庆
(收稿日期:
2006.2.17(修稿日期:
2006.3.17
-
-
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 IIC 设备 驱动程序 设计 实现