基于CAN 总线嵌入式驱动编程

发布者:WhisperingLight最新更新时间:2011-08-30 关键字:CAN总线  嵌入式驱动编程 手机看文章 扫描二维码
随时随地手机看文章

  1 引言
   
  早期应用于八位单片机软件设计的嵌入式系统主要为前后台系统(或超循环系统),程序大约在几千行以内,由两部分组成,即其应用程序是一个无限的循环,循环中调用函数完成相应的操作,属于后台行为;其中断服务程序处理异步事件,属于前台行为.随着嵌入式系统功能越来越庞杂,如友好的人机界面、网络化、远程监控等.各种任务的优先级不同,传统的设计方法无法完成,程序长达数万行,程序员必须同繁琐的底层硬件打交道,这样效率低下.现代电子技术的发展为嵌入式微处理器提供了更多的外设,通用的如串口、并口、以太网口、现场总线、USB口等.基于免费自由软件Linux发展而来的嵌入式系统uclinux,是一种免费的嵌入式操作系统.uclinux系统具有内核小、效率高、源码开放、性能稳定、大量的开发工具、良好的开发环境等特点,并且各种应用程序丰富,是进行嵌入式系统开发的最优秀工具之一.

  2 uclinux操作系统简介
   
  uclinux 系统主要由用户进程、系统调用接口、uclinux 内核、硬件控制器等四部分组成.用户进程是用户根据自己的设计和功能要求开发的应用程序,通过调用系统的功能函数来实现系统功能;系统调用接口通过系统调用实现用户与系统内核的接口,这些调用和服务也可以看成是系统内核的一部分;uclinux 内核是操作系统的灵魂,它抽象了许多硬件细节,将所有的硬件抽象成统一的虚拟接口,使程序可以以一种统一的方式进行数据处理,它主要包括基于优先级的进程调度、内存管理、文件系统、网络接口、进程间通讯等五部分;硬件控制器则包含了系统需要的所有可能的物理设备.以上四个部分之间的每个子系统都只能跟邻近的系统进行通信。
   
  uclinux 的设备管理系统是嵌入式操作系统的重要组成部分,它可以分为:下层、与设备相关的,即所谓的设备驱动程序,直接与相应的设备打交道,并向上提供一组访问接口;以及上层、与设备无关,根据输入输出请求,通过特定设备驱动提供的接口,与设备进行通信.如通用的串口、网卡等驱动程序在uclinux 中都可以找到.

  3 uclinux驱动编程原理
   
  uclinux嵌入式系统不能象Linux一样动态加载驱动程序模块,而只能同内核一起编译,与应用程序、其他驱动程序一起固化到可擦写的Flash上,驱动程序长驻内存,是静态驱动程序.uclinux系统根据设备性质的不同,将设备分为四种类型:字符设备(char)、块设备(block)、网络接口( net )和其他设备驱动程序模块.在下载的uclinux源代码包中,可以在uclinux/linux/drivers目录下面看到通用设备如char,block, net, cdrom, scsi, sound等.系统对于每个设备都对应一个主设备号和一个次设备号,不同的设备可以对应相同的主设备号,应用程序访问设备通过不同的次设备号来识别和区别设备.在Linux系统/dev目录下通过输入ls -l命令可以查到系统已注册的设备,因此编写新的驱动程序时必须向系统注册
该设备.在uclinux系统中,通过register_chrdev函数实现注册.
   
  uclinux系统将所有硬件抽象成虚拟的文件系统,所有的字符设备、块设备都支持文件操作接口,因此可以对这种虚拟的设备文件系统进行文件操作.通常对设备文件进行的操作有open、read、write、release等,即打开、读、写、释放文件.每一个设备驱动程序实质上是用来完成特定任务的一组函数集. 驱动程序拥有一个称为fileoperation 的数据结构,其中包含指向驱动程序内部大多数函数的指针.引导系统时,内核调用每一个驱动程序的初始化函数,将驱动程序的主设备号以及程序内部的函数地址结构的指针传输给内核.这样,内核就能通过设备驱动程序的主设备号索引访问驱动程序内部的子程序,完成打开、读、写等操作.程序员经常面临的一项工作就是为系统的新设备编写驱动程序.
   
  在现代控制系统中,为了便于数据通讯,在底层常采用现场总线,目前CAN总线广泛应用于过程工业、机械工业、纺织机械、农用机械、机器人、数控机床、医疗器械及传感器等领域,下面介绍CAN总线应用于嵌入式系统的驱动编程.

  4 CAN 总线的性能特点
   
  CAN(Controller Area Network)即控制器局域网络.CAN 总线目前已形成国际标准 version2.0.该技术规范包括A 和B 两部分.2.0A 给出了CAN 报文标准格式,而2.0B 给了出厂标准和扩展两种格式.CAN 总线是应用最广泛的现场总线之一,CAN为多主方式工作,网络上任一节点均可在任意时刻主动地向网络上其他节点发送信息,而不分主从,通信方式灵活,且无需站地址等节点信息;CAN 网络上的节点信息分成不同的优先级,可满足不同的实时要求;CAN 采用非破坏性总线仲裁技术,当多个节点同时向总线发送信息时,优先级较低的节点会主动地退出发送,而最高优先级的节点可不受影响地继续传输数据;CAN 只需通过报文滤波即可实现点对点、一点对多点及全局广播等几种方式传送接收数据,无需专门的“调度”,CAN 的直接通信距离最远可达10km(速率5kbps 以下);通信速率最高可达1Mbps(此时通信距离最长为40m).CAN 上的节点数主要取决于总线驱动电路,目前可达110个;采用短帧结构,传输时间短,受干扰概率低,具有极好的检错效果;CAN 的通信介质可为双绞线、同轴电缆或光纤等.CAN 总线的数据通信具有突出的可靠性、实时性和灵活性.

  5 CAN总线的嵌入式系统硬件设计
   
  本设计选用Samsung公司的S3C4510B作为嵌入式系统的微处理器芯片,该处理器是16/32位RISC微处理控制器,内含由ARM公司设计的16/32位ARM7TDMI RISC处理器核,适用于价格及功耗敏感的场合.除内核外,该微处理器的片内外围功能模块包括:2个带缓冲描述符的HDLC通道;2个UART通道;2个GDMA通道;2个32位定时器及可编程I/O口.CAN控制器选用philips公司的SJA1000,该芯片与PCA82C200电气兼容,带64字节先进先出(FIFO)堆栈,兼容协议CAN2.0B,支持11位和29位识别码,位速率可达1Mbps,24MHZ时钟频率,芯片内含寄存器,可由用户配置CAN总线波特率,设置验收屏蔽标识码,可配置系统为PeliCAN 模式或BasicCAN模式,出错告警等.
   
  该系统采用82C250作为收发器,其硬件连线如图(1)所示.AD0~AD7与S3C4510B的p0~p7连线,/cs接p12,ALE接p13,/RD接p14,/wr接p15,/int接XINTREQ0.

图1 SJA1000硬件连线

  6 驱动软件设计


图2 CAN总线初始化框图

  本设计中,CAN总线驱动程序是作为一个模块放在linux/deriver/char/文件夹里面,软件流程如图(2)所示,其设计详细介绍如下.

  模块首先对引用的库函数进行申明,并且定义:
  #define IOPMOD (*(volatile unsigned *)0x3ff5000)
  #define IOPDATA (*(volatile unsigned *)0x3ff5008)
  #define IOPCON (*(volatile unsigned *)0x3ff5004)
  #define EXTDBWTH(*(volatile unsigned *)0x3ff5
  #define SYSCFG(*(volatile unsigned *)0x
  主要有以下几个模块:
  void can_init(void)
  {
  SYSCFG =SYSCFG & 0x0fffffffd;
  EXTDBWTH =EXTDBWTH& 0x00ff0ff;
  IOPMOD=0xf0ff;
  IOPDATA=0x6000; 寄存器地址0,MOD寄存器
  IOPDATA= IO_PDATA&0xdfff; ALE=0 配置MOD寄存器
  IOPDATA= IO_PDATA|0x3f; ; 复位模式、使能
  IOPDATA=0x6006; ;寄存器地址6,总线定时器0寄存器
  IOPDATA=IO_PDATA&0xdfff; ALE=0配置寄存器
  IOPDATA= IO_PDATA|0x3f; 跳转宽度、波特率设置
  ……;配置总线定时器1、验收代码寄存器等
  IOPDATA=0x6000; SJA1000 寄存器地址0,MOD寄存器
  IOPDATA=IO_PDATA&0xdfff; ALE=0配置MOD寄存器
  IOPDATA= IO_PDATA&0xfe;写复位位,进入工作模式
  result = register_chrdev(254,"can",&can_fops);申请主设备号
  if (result<0) {
  printk(KERN_WARNING "CAN:can’t getmajor ", result);
  return result;
  }
  在该驱动程序中,定义结构变量can_fops为应用程序访问内核的接口:
  static struct file_operations can_fops = {
  read: can_read,
  write: can_write,
  open: can_open,
  release: can_release,
  }; 
  static int can_release(struct inode *inode, struct file *file)
  {
  MOD_DEC_USE_COUNT; ;用户减计数
  Return 0;
  }
  static int can_open(struct inode *inode,struct file *file)
  {
  Scull_Dev *dev;
  Int num = NUM(inode->i_rdev); 设备号
  Int type = TYPE(inode->i_rdev); 设备类型
  If (num>=scull_nr_devs) return -ENODEV;
  dev = &scull_devices[num];
  flip->private_data = dev;
  MOD_INC_USE_COUNT; 用户数人工计数
  IOPCON=0x16; //xIRQ0
  disable_irq(INT_can);
  if(request_irq(INT_can, &can_rx,
  SA_INTERRUPT, "can rx isr","can")) {
  printk("s3c4510-can: Can't get irq %dn",
  INT_sja1000);
  return -EAGAIN;
  }
  printk("can has get irq 0n");
  enable_irq(INT_can);
  …… ; 配置SJA1000内部中断及屏蔽寄存器
  return 0;
  }

  7 结束语
   
  本文介绍了CAN总线在嵌入式系统中的驱动编程,对CAN总线技术在嵌入式系统中的应用进行了探索.本设计已在通信用逆变电源远程监控系统中应用.

关键字:CAN总线  嵌入式驱动编程 引用地址:基于CAN 总线嵌入式驱动编程

上一篇:嵌入式uClinux下的CAN总线设备驱动程序设计
下一篇:浅谈I2C总线工作原理与应用

推荐阅读最新更新时间:2024-05-02 21:33

ST推出首款符合所有接口协议的车用CAN总线ESD保护器
汽车用电子系统的功能不断推陈出新,包括各种先进的驾驶辅助系统(ADAS),促使大量的通信接口协议陆续问世,为市场带来不同的通信速度、产品成本以及设计灵活性。意法半导体(STMicroelectronics,简称ST;纽约证券交易所代码:STM)推出两款整合优的异静电放电(ESD, Electrostatic Discharges)以及瞬变电压防护功能的控制器区域网络(CAN, Controller Area Network)总线,是市场上唯一符合所有主要汽车接口规范的接口保护芯片。 ESDCAN02-2BWY和ESDCAN03-2BWY是汽车级双线(dual-line)Transil 保护芯片,基于意法半导体在瞬变电压防护市
[汽车电子]
基于DSP交流伺服系统与CAN总线的通信设计
  1 DSP的CAN控制器   TI公司的低功耗、高速DSP芯片TMS320LF2407A具有高速运算能力和高效控制能力。其内嵌的CAN控制器是一个完全的CAN控制器,完全支持CAN2.0B协议,它主要有以下特点:有6个邮箱,其数据长度为0~8 B,其中接收邮箱有局域接收邮箱屏蔽寄存器,在发送出错或仲裁时丢失数据的情况下,有自动重发功能、可编程的位定时器和总线错误诊断功能。   CAN控制器的内部结构图如图1所示。        工作过程如下:CAN控制器在接收信息时,先将要接收信息标识符与相应接收邮箱的标识符进行比较,只有标识符相同的信息才能被接收;接收信息时,将数据存入邮箱,标识符存入相应的寄存器;接收
[嵌入式]
双冗余CAN总线模块的设计与实现
  引言冗余技术有两种方式:工作冗余和后备冗余。工作冗余是对关键设备以双重或三重的原则来重复配置,这些设备同时处于工作运行状态,工作过程中若某一台设备出现故障,它会自动脱离系统,但并不影响系统的正常工作。后备冗余方式是使一台设备投入运行,另一台冗余设备处于热备用状态,但不投入运行,在线运行设备一旦出现故障,后备设备立即投入运行。常用的冗余系统按其结构可分为并联系统。备用系统和表决系统3种。最简单的冗余设计是并联装置,其它方法还有串并联或并串联混合装置和多数表决装置等。   本文通过以上冗余技术的分析选择,将其结合到CAN总线模块的设计中,并在V×Works系统下设计了双冗余驱动,通过测试,验证了本设计的有效性。   1 总
[嵌入式]
分析CAN总线在电网自动监控系统中的应用
  电网自动监控系统中,可利用公用电话实现MODEM远程抄表进行电网的远程监控管理。常见的MODEM远程抄表通:过管理中心以电话网的发散形式进行管理的形式将分散在各台变区域的集中器进行连接,从而形成了一对多的星型通信网络。由于 刊用电话线建立的通信模式往往需要较长的时间进行握手和了解,数据点较多的通信系统则效率相对较低,此外,当系统中的集中器数目较多时,所需要租用的电话线也较多,特别是在居民密集的区域,集中器具有较大的密度,那么相应的管理费用也将较高,由此,对基于电话通信系统的电网监控系统的推广和应用不利。   由此,基于CAN总线的电网远程监控系统的应用实现了对传统电话通信模式的构建,将位置相对集中的多个集中器使用CAN构建
[嵌入式]
基于89C51单片机和CAN总线的供热温度控制器的设计研究
建设部要求城镇新建公共建筑和居民建筑,凡使用集中供热设施的,均需设计、安装具有分户计量及室温调控功能的供暖系统。节能型供热温度控制器是利用自动控制技术,将节能措施与热计量功能融为一体,从以人为本的角度提出的一种新型节能理念和方法,使集中供暖用户既可通过控制器设定、调整并与配套设备共同完成对室内温度的自动控制和远程控制,又可随时了解室内温度、热消耗量,达到节约能源的目的。 1 系统总体结构及方案设计 一个完整的大型公建节能型供热温度控制器由两部分组成:温度测控系统和通信模块系统。系统总体结构如图1所示。系统温度测控的硬件包括:单片机、温度传感器、信号放大器、A/D转换器及D/A转换器、稳压器、显示驱动芯片和数码管等。系统通信模块
[电源管理]
CAN总线在混和动力汽车电机控制系统中的应用
    摘要: CAN总线的主要功能与特点、CAN控制器以及CAN总线在混和动力汽车电机控制系统中的应用;CAN总线与电机控制芯片TMS320F241的接口设计、帧结构以及通信中断服务程序流程图等。     关键词: CAN总线 混和动力汽车 电动机 控制系统 CAN(Controller Area Network)总线即控制器局域网络,是一种有效支持分布式控制或实时控制的串行通信网络,属于现场总线的范畴。德国Bosch公司在二十世纪80年代初将其研究成功,最初主要用于汽车内部检测以及控制系统的数据通信。CAN总线通信协议是在充分考虑工业现场环境的背景下制订的,它采用了国际标准化组织ISO制订的开放系统互连(I
[工业控制]
省毫瓦以增里程;提升汽车CAN总线能效以增强燃油经济性
对于传统乘用车而言,油箱是唯一的实际能源来源,故制造商们寻求在包括电子系统在内的所有汽车系统中节能,以进一步改善燃油经济性及二氧化碳(CO2)排放。随着汽车中增添的电子系统的数量不断增多,以增强汽车性能及安全性,并为购买者提供有吸引力的新功能,汽车中每个电子控制单元(ECU)的节能效果较低的话,就会使总油耗大幅增加。 芯片设计人员采用不同技术及途径,已经能够降低他们提供的器件的总能耗。在单个系统基础芯片(SBC)中结合多个器件的功能,并应用不同电源管理策略,还能帮助进一步降低总能耗。这些进展表示当今的内燃发动机汽车能够舒适安全地搭载乘客,而使用的燃油更少,碳排放更低。 增强型系统基础芯片 SBC为连接至汽车(CA
[汽车电子]
省毫瓦以增里程;提升汽车<font color='red'>CAN总线</font>能效以增强燃油经济性
基于DSP和CAN总线的分布式电机控制系统
   引言   CAN(Controller Area Network)控制器局域网,主要用于各种设备监测及控制的局域网。最初由德国Bosch公司用于汽车的监控系统而设计,具有良好的功能特性和极高的可靠性,现场抗干扰能力极强, 总线形式为串行数据通信总线。   TI 的24X系列芯片,具有处理性能优良(30MIPS),外设集成度高,程序存储器容量大,A/D转换速度快等特点,是基于工业控制而设计的DSP(数字信号处理)类芯片。LF2407A以其丰富的集成外设,提供了电机数字化控制解决方案。其嵌入式CAN总线控制器,基于CAN2.0B规范要求,提供了CAN通信功能,可为实现分布式工业监控局域网络提供了一个解决方案。    CAN
[嵌入式]
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

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

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