CAN总线在嵌入式Linux下驱动程序的实现.docx





《CAN总线在嵌入式Linux下驱动程序的实现.docx》由会员分享,可在线阅读,更多相关《CAN总线在嵌入式Linux下驱动程序的实现.docx(13页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、CAN总线在嵌入式Linux下驱动程序的实现ronggang导语:本文以S3C44B0X为微处理器,通过其SPI接口,采用MCP2510CAN控制器扩展CAN总线,文章在分析Linux设备驱动程序工作原理和构造的根底上,重点阐述CAN设备在uClinux下驱动程序的设计方法摘要:本文以S3C44B0X为微处理器,通过其SPI接口,采用MCP2510CAN控制器扩展CAN总线,文章在分析Linux设备驱动程序工作原理和构造的根底上,重点阐述CAN设备在uClinux下驱动程序的设计方法,编写驱动程序的操纵例程,测试驱动程序的正确性。结果说明CAN设备在嵌入式操纵系统uClinux下驱动程序的正确
2、性;CAN设备驱动程序的成功实现,对在嵌入式操纵系统下扩展其它设备驱动程序有重要的指导意义。关键词:CAN;Clinux;S3C44B0X;设备驱动程序基于嵌入式系统设计的工业控制装置,在工业控制现场受到各种干扰,如电磁、粉尘、天气等对系统的正常运行造成很大的影响。在工业控制现场各个设备之间要经常交换、传输数据,需要一种抗干扰性强、稳定、传输速率快的现场总线进展通讯。文章采用CAN总线,基于嵌入式系统32位的S3C44B0X微处理器,通过其SPI接口,MCP2510CAN控制器扩展CAN总线;将嵌入式操纵系统嵌入到S3C44B0X微处理器中,能实现多任务、友好图形用户界面;针对S3C44B0X
3、微处理器没有内存治理单元MMU,采用uClinux嵌入式操纵系统。这样在嵌入式系统中扩展CAN设备关键技术就是CAN设备在嵌入式操纵系统下驱动程序的实现。文章重点解决了CAN总线在嵌入式操纵系统下驱动程序实现的问题。对于用户来讲,CAN设备在嵌入式操纵系统驱动的实现为用户屏蔽了硬件的细节,用户不用关心硬件就可以编出自己的用户程序。实验结果说明驱动程序的正确性,能进步整个系统的抗干扰才能,稳定性好,最大传输速率到达1Mb/s;硬件的错误检定特性也增强了CAN的抗电磁干扰才能。2系统硬件设计系统采用S3C44B0X微处理器,需要扩展CAN控制器。常用的CAN控制器有SJA1000和MCP2510,
4、这两种芯片都支持CAN2.0B标准。SJA1000采用的总线是地址线和数据线复用的方式,但是嵌入式处理器外部总线大多是地址线和数据线分开的构造,这样每次对SJA1000操纵时需要先后写入地址和数据2次数据,而且SJA1000使用5V逻辑电平。所以应用MCP2510控制器进展扩展,收发器采用82C250。MCP2510控制器特点:1.支持标准格式和扩展格式的CAN数据帧构造CAN2.0B;2.08字节的有效数据长度,支持远程帧;3.最大1Mb/s的可编程波特率;4.2个支持过滤器的承受缓冲区,3个发送缓冲区;5.SPI高速串行总线,最大5MHz;6.35.5V宽电压范围供电。MCP2510工作电
5、压为3.3V,可以直接与S3C44B0X微处理器I/O口相连。为了进一步进步系统抗干扰性,可在CAN控制器和收发器之间加一个光隔6N137。其构造原理框图如图1:align=center图1.S3C44B0X扩展CAN构造框图/alignalign=center图2.字符设备注册表/align3CAN设备驱动程序的设计Linux把设备看成特殊的文件进展治理,添加一种设备,首先要注册该设备,增加它的驱动。设备驱动程序是操纵系统内核与设备硬件之间的接口,并为应用程序屏蔽了硬件细节。在linux中用户进程不能直接对物理设备进展操纵,必须通过系统调用向内核提出恳求,由内核调用相应的设备驱动。因此首先建
6、立Linux设备治理、设备驱动、设备注册、Linux中断这几个概念。3.1Linux的设备治理Linux支持各种各样的外围设备,对这些设备的治理通称为设备治理。设备治理分为两局部:一局部是驱动程序的上层,与设备无关的,这局部根据输入输出恳求,通过特定的设备驱动程序接口与设备进展通讯;另一局部是下层,与设备有关的,通常称为设备驱动程序,它直接与硬件打交道,并且向上层提供一组访问接口。Linux设备治理为了对设备进展读、写等操纵,把物理设备逻辑化,把它看成特殊的文件,称为设备文件,采用文件系统接口和系统调用来治理和控制设备。Linux把设备分为三类,块设备、字符设备和网络设备。每类设备都有不同治理
7、控制方式和不同的驱动程序,这样方便于对系统进展裁减。Linux内核对设备的识别是根据设备类型和设备号。在字符设备中使用同一个驱动程序的每种设备都有唯一的主设备号。CAN设备通过在/vendor/Samsung/44b0/Makefile文件下设置设备类型和设备号分别为can、125。3.2file_operations构造体Linux对设备操纵的详细实现是由设备驱动程序完成。设备驱动程序加载到系统中通过设备注册实现。Linux驱动程序对文件的操纵通过file_operations构造体来完成。file_operations构造体是文件操纵函数指针的集合。在设备治理中该构造体各个成员项指向的操纵
8、函数就是设备驱动程序的各个操纵例程,编写驱动程序本质上就是编写该构造体中的各个函数。对不同的设备可以装备其中全部或者局部的操纵函数,不使用的函数指针置为NULL。下面是CAN设备file_operations构造体:Staticstructfile_operationswrite:s3c44b0_mcp2510_write,/写操纵read:s3c44b0_mcp2510_read,/读操纵ioctl:s3c44b0_mcp2510_ioctl,/读写之外的操纵open:s3c44b0_mcp2510_open,/翻开设备release:s3c44b0_mcp2510_release;/关闭设
9、备这个构造的每一个成员的名字都对应着一个系统调用。用户进程利用系统调用,来调用自己的驱动接口,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据构造相应的函数指针,接着把控制权交给该函数。3.3设备注册在linux中,当一种设备安装到系统时必须向系统进展注册,设备注册的主要任务是把设备驱动程序加载到系统中。Linux对不同的设备如字符设备和块设备分开进展注册治理。每个设备描绘符包括两个指针:name指向设备名字符串,fops指向文件操纵函数构造file_operations,该构造体中包含着指向驱动程序各个操纵例程的指针。图2给出了linux字符设备注册表的示意图。CAN字
10、符设备的注册函数是内核函数:register_chrdevMAJOR_NR,DEVICE_NAME,&s3c44b0_mcp2510_fops;其中参数DEVICE_NAME表示设备名,s3c44b0_mcp2510_fops表示指向file_operations构造体的指针,即指向设备的驱动程序。3.4Linux中断的处理在linux系统里,对中断的处理是属于系统核心局部,因此假如设备与系统之间以中断方式进展数据交换,就必须把该设备的驱动程序作为系统核心的一局部。设备驱动程序通过用request_irq函数来申请中断,通过free_irq来释放中断。由于本实验未用到中断,因此在此不作具体介绍
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- CAN 总线 嵌入式 Linux 驱动程序 实现

限制150内