基于ARM的Linux下LonWorks总线设备驱动设计

发布者:温暖心绪最新更新时间:2012-02-13 来源: 21IC关键字:ARM  Linux  LonWorks总线 手机看文章 扫描二维码
随时随地手机看文章

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所示。[page]

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网络的应用管理或与其他通信网络的互连,有较好的实用性。

关键字:ARM  Linux  LonWorks总线 引用地址:基于ARM的Linux下LonWorks总线设备驱动设计

上一篇:基于ARM的双频RFID读写系统设计解析方案
下一篇:基于ARM的无线视频传输系统的设计

推荐阅读最新更新时间:2024-03-16 12:52

采用Keil4为ARM7 (LPC2103)创建工程 及J-link调试
采用Keil4为ARM7创建工程,采用J-LINK调试,具体步骤如下: 在菜单里的Project里选择New uVision project...,选择正确的路径并命名保存; 在弹出来的对话框中选择CPU,NXP(founded by philips)- LPC2103; 在弹出的对话框按“yes”复制LPC2100启动文件到工程; 在Project里面选择Option for Target'Target 1'...,Target里面的IROM1要配置正确(0x0 0x8000),一般采用默认值就可以了;Output选择里面的Name of Executable的命名不能用点号;Debug里面的选择
[单片机]
基于ARM的嵌入式系统CF卡与CPLD连接技术详解
1 引言 随着应用需求的不断提高,许多嵌入式系统在应用时都要求带有扩展的大容量存储器来存储数据。CF 卡(Compact Flsah Card)由于价格便宜、存储容量大、体积小、兼容性好等优点被广泛应用于嵌入式产品。然而现有的CF 卡接口电路存在接口复杂,稳定性不高等缺点,不能满足客户的需求。通过深入研究ARM 处理器AT91RM9200 的外部总线接口(EBI)、CF 卡和CPLD 的工作原理,提出利用CPLD来改进CF 卡接口电路以解决现有接口电路中存在的缺点。 2 器件简介 2.1 外部总线接口 系统采用了以ARM920T 为内核的AT91RM9200作为微处理器,它是完全围绕ARM920T Thumb 处理器构建的系统
[单片机]
基于<font color='red'>ARM</font>的嵌入式系统CF卡与CPLD连接技术详解
ARM C内嵌asm写法
最近在玩E2手机,想把C/Invoke( http://www.nongnu.org/cinvoke/ )移植到E2上,它的CPU是arm的,系统是Linux,下了源代码,按照说明自已添了一个gcc_arm_linux的arch文件,可是在修改时发现里边还有asm代码,以前没弄过,开始完全看不懂,于是呼!在网上找来《ARM指令集》找到要用到的指令,指令到是简单,可是asm内嵌c的写法把我搞晕了,又找来《AT&T ASM参考》,这才把代码中的几个内嵌ARM汇编的宏对付上。部分代码: ///////////////////////////////////// // macros ///////////////////////////
[单片机]
linux下编写I2C驱动与stm32通信(二)
接上一篇,linux下GPIO模拟I2C驱动完成后,就是stm32的i2c配置了,由于hi3518e作为i2c的主设备,stm32则作为从设备,由于GPIO模拟i2c的从时序比模拟主时序要麻烦很多,所以采用stm32的硬件I2C。(stm32官网i2c例程主模式会莫名的卡死,从模式比较好用) 下载官网例程,将之设置为从模式,使用i2c2,将SCL,SDA,GND与hi3518e板子上GPIO模拟的SCL,SDA和GND连起来,写一个测试例程来验证双方的通信。 首先在linux下加载驱动,然后调用打开驱动,调用编写的驱动接口函数,读数据和写数据。驱动接口代码如下: #include stdio.h #include
[单片机]
德州仪器推出Stellaris® ARM® Cortex™-M4F 微控制器
业界首款 65 nm Cortex-M MCU 现已面市,可提供更低功耗及更高性能水平,为整个 Stellaris 发展计划奠定坚实基础 2011 年 9 月 27 日,北京讯 日前,德州仪器 (TI) 宣布推出其新型低功耗、浮点 Stellaris® Cortex™-M4F 微控制器系列,从而一如既往地为开发人员提供基于 ARM® 的领先嵌入式处理解决方案。所有新型 LM4Fx Stellaris 微控制器均可提供浮点功能,其可获得性能提升空间及业界一流功耗,以应对便携性及功率预算方面提出的要求。此外,开发人员还拥有多种高性能模拟、内存和连接选项,从而最好地满足广泛的应用领域中对设计参数的需要,如工业自动化、运动控制、健康与
[嵌入式]
linux内核驱动 第一个led的 程序思想过程
linux 内核写led的驱动如图所示: 按照图 的方式我们发现我们需要写两个部分 一个是APP,一个是底层的驱动。其中APP是通过C库和系统层最后调用到底层的驱动的。 linux系统首先会把底层驱动以文件的形式挂载到dev文件夹内,然后APP利用文件写或者读的方式对底层的代码进行操作。 所以程序会分为两部分1. 写驱动并且挂载到linux内核2. 写APP程序去按照文件的方式调用linux挂载的内核。 1. 首先是写驱动的程序。 主要的程序有: static int first_drv_open(struct inode *inode, struct file *file) 这个是led初始化的函数 其中
[单片机]
<font color='red'>linux</font>内核驱动 第一个led的 程序思想过程
基于ARM的嵌入式系统的MP3软解码器研究与实现
为了减少功耗与降低成本,根据ARM芯片对C语言良好支持的特点,在深度剖析 MP3 解码 算法、分析C语言在ARM芯片上编程的优化方法的基础上,通过软件形式实现MP3音频解码器,便一些无硬件解码器支持的ARM嵌入式系统完成MP3解码任务,从而实现基于ARM的嵌入式系统的MP3软解码器,可以有效地降低系统功耗,提高解码效率,更好地扩展和增强便携嵌入式系统多媒体功能。 随着便携式嵌入式系统的发展,嵌入式多媒体技术正在影响并改变着人们的日常生活,多媒体音频编码解码技术也越来越受到关注和重视。笔者提出了一种MP3音频解码通过软件方式在嵌入式系统上实现的解决方案。该方案以目前比较高效的MP3解码算法为基础,灵活的取代了基于DSP的硬件
[单片机]
基于<font color='red'>ARM</font>的嵌入式系统的MP3软解码器研究与实现
MIPS首家授权培训中心登陆上海,不让ARM独美!
工业标准处理器架构与内核供应商MIPS科技日前宣布,已指定位于上海的双实科技公司作为其中国首家MIPS授权培训中心。自4月份开始,双实科技将提供关于系统级芯片(SoC)和板级系统(SoB)的专业培训。培训使用业界标准的MIPS架构及低成本的MIPS-Based开发板,培训对象为中国的职业工程师和研究生。 MIPS科技与双实科技还将共同举办一系列特别针对中国市场的技术研讨会。首届研讨会将于3月16日-17日在上海浦东软件园举行,将介绍MIPS科技的公司发展和动向、基础架构和内核及目标市场。介绍讲座对所有听众免费。研讨会的听众将包括IC设计者、嵌入式系统工程师和电子工程与计算机系(EECS)教师。其他研讨会计划在北京和深圳举行。有关
[焦点新闻]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved