当前位置:首页 > 嵌入式 > 嵌入式教程
[导读]基于ARM的Linux下LonWorks总线设备驱动设计

摘 要:利用神经元芯片CYC53120和S3C2410芯片,实现嵌入式平台下LONWorks总线的运用;同时介绍嵌入式Linux 下设备驱动程序的构成,描述了LonWorks设备驱动程序的软件框架,为嵌入式Linux设备的开发提供借鉴。

LonWorks是美国Echelon公司1992年推出的局部操作网络,最初主要用于楼宇自动化,但很快发展到工业现场网。LonWorks技术为设计和实现可互操作的控制网络提供了一套完整、开放、成品化的解决途径,它协议完整、通信可靠,而且为用户提供了功能强大的开发工具(LONBU ILDER,NODEBU ILDER)。

在LonWorks现场总线设备的使用过程中,由于其设备驱动与操作系统的相关性,从而要求开发者在开发过程不仅实现硬件构成,更需要熟悉操作系统及设备驱动程序的制定。本文给出在ARM平台下实现LonWorks总线设备的互联,并在嵌入式Linux系统下,介绍LonWorks现场总线设备驱动程序的设计与实现。

1 LonWorks总线设备的构成

LonWorks技术的核心是神经元芯片(Neuron Chip)。该芯片内部装有3个微处理器:MAC处理器完成介质访问控制;网络处理器完成OSI的3~6层网络协议;应用处理器完成用户现场控制应用。它们之间通过公用存储器传递数据。同时神经元芯片共设置11个I/O口,这些I/O口可根据不同需求,利用Neuron C编程来灵活配置与外围设备的接口,如RS232、并口、定时/计数、位I/O等。其芯片结构如图1所示[1]。

在本系统设计中,基于嵌入式ARM平台下实现对LonWorks总线的访问,设计原理是利用S3C2410芯片的SPI(Serial Peripheral Interface)接口[2]与Neuron芯片来实现数据通信,其原理如图2所示。

SPI总线系统可直接与各个厂家生产的多种标准外围器件直接接口,它有4条引脚:SSEL(从器件选择线)、MOSI(主机输出、从机输入数据线)、MISO(主机输入、从机输出数据线)、SCK(同步串行时钟线)。S3C2410包含2个SPI接口,本文利用SPI1与Neuron芯片CY7C53120相连。

2  Linux下设备驱动程序

设备驱动程序是操作系统内核与机器硬件之间的接口。在Linux中,设备驱动程序为应用程序屏蔽了硬件的细节,对应用程序而言,硬件设备只是一个设备文件,可以通过相应的系统调用像操作普通文件一样对硬件设备进行操作。

Linux系统的设备分为字符设备(char device)、块设备(block device)和网络设备(network device)3种[3-4]。字符设备是指存取时没有缓存的设备;块设备的读写则都有缓存来支持,只能以块为单位进行读写,并且块设备必须能够随机存取(random access) ;而Linux的网络设备开发则主要基于BSD Unix的socket机制。本文要开发的Lonworks设备驱动程序是一个字符型的设备,其基本组成如图3所示。
 

Linux设备驱动程序可以分为设备初始化子程序及卸载程序、服务子I/O请求的子程序和中断服务子程序3个主要组成部分:

(1)设备初始化子程序及卸载程序。Init_module用以负责检测所要驱动的硬件设备是否存在和是否能正常工作。如果该设备正常,则对这个设备及其相关的设备驱动程序需要的软硬件进行初始化,其初始化程序流程如图4所示。

Cleanup_module用以完成卸载设备时要做的工作,其设备卸载流程如图5所示。
 

(2)服务于I/O请求的子程序,又称为驱动程序的上半部。应用程序可以通过系统来调用此部分程序。此部分程序在执行时,系统仍认为是与应用程序进程属于同一个进程,具有进行此系统调用的用户程序的运行环境,只是由用户态变成了核心态,因而可以在其中调用sleep()等与进程运行环境有关的函数。

此部分的设计主要是对file_operations结构的各个入口点的实现。从而实现了支持文件系统的调用(如open,close,read等)。file_operations结构是Linux操作系统中用于实现驱动程序的最重要的数据结构,对Linux提供I/O 请求的子程序的一系列入口点进行了封装。下面给出用于Lonworks设备驱动的file_operations结构示例。

  struct file_operations{

  int(*lseek)(struct inode *inode,struct file *flip,off_t off,int pos);

  int(*read)(struct inode *inode,struct file *filp,char *buf,int count);

  int(*write)(struct inode *inode,struct file *filp,char *buf,int count);

  int(*ioctl)(struct inode *inode,struct file *filp,unsigned int cmd,unsigned int arg);

  int(*open)(struct inode *inode,struct file *filp);

  viod(*release)(struct inode *inode,struct file *filp);

  }

由上可见file_operations 结构中的成员全部是函数指针,该结构实质上就是函数跳转表。每个应用进程对设备的操作,都可以根据设备号,转换成对file_operations 结构的访问,通过调用相关函数完成具体操作。

(3)中断服务子程序,又称为驱动程序的下半部。在Linux系统中,并不直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统来调用中断服务子程序。

中断可以在任何一个进程运行时产生,因而中断服务程序的调用,不依赖于任何进程的状态,即不能调用任何与进程运行环境有关的函数。在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的驱动程序提供的。对于本文涉及的LonWorks设备驱动,下面分析其作为字符型设备驱动程序所需用的常用入口点。

Lon_open(struct inode *inode,struct file *filp)入口点用以打开设备准备I/O操作。对字符设备文件进行打开操作,都会调用设备的open入口点。open子程序必须对将要进行的I/O操作做好必要的准备工作,如清除缓冲区等。Lon_release(struct inode *inode,struct file *filp)入口点用以关闭设备。当最后一次使用设备终结后,调用release子程序。

Lon_read(struct inode *inode,struct file *filp,char *buf,int count)入口点用以从设备上读数据。可以利用所设定的缓冲区进行I/O操作,从缓冲区里读数据。对设备进行读操作将调用read子程序。相似的,Lon_write(struct inode *inode,struct file *filp,char *buf,int count)入口点用以往设备上写数据。对设备进行写操作将调用write子程序。

Lon_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned int arg)入口点执行读、写之外的一些硬件控制操作,操作命令代码通过cmd参数传送,命令参数通过arg参数传送。此函数也为功能扩展提供接口。

实现了以上3部分,核心驱动模块部分就完成了。对以上模块进行编译并加载后,Linux用户可用mknod命令利用动态分配的主设备号建立相应的设备文件,并对它设置恰当读写权限后,就可以在应用程序中通过这个设备文件来操作LonWorks总线设备了。这样做不仅使得应用程序编程风格更加统一,代码更具鲁棒性,应用系统更加安全更易于维护,而且可在核心级来保证关键部分的实时响应,从而降低用户程序开发的难度。

以上介绍了在ARM9平台的嵌入式Linux2.6.x系统中实现Lonwork通信的一种方法,并在以武汉创维特公司的JXARM9-2410实验箱为基础扩展的硬件平台上实验完成。后期可在此基础上,结合Linux在网络通信中的特长,实现对Lonwork网络的应用管理或与其他通信网络的互连,有较好的实用性。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭