总线增加百度收录

增加百度收录  时间:2021-01-18  阅读:()

-1-嵌入式Linux下CAN总线驱动程序设计宋扩东,卢珞先武汉理工大学信息工程学院通信与信息系统,武汉(430070)E-mail:song_0011@sohu.
com摘要:以基于ARM9核心的S3C2410微处理器与CAN总线控制器MCP2515为例,讨论了嵌入式Linux操作系统下的设备驱动程序开发.
在构建好硬件系统的基础上,详细介绍了基于嵌入式Linux2.
6内核下的CAN总线驱动程序的开发过程,并结合CAN总线分析测试仪,给出分析测试结果.
关键词:CAN;驱动;嵌入式Linux;ARM9;中图分类号:TP3681.
系统硬件结构介绍系统中CAN总线主要用来完成S3C2410开发板和CAN总线分析仪的数据传输.
在S3C2410开发平台上,MCP2515芯片用作CAN控制器,MCP2551芯片用作CAN收发器,S3C2410微处理器用作节点控制器.
如图1所示.
1.
1S3C2410的SPI接口简介SPI(SerialPeripheralInterface)[1]是一个同步串行外围接口,允许MCU与各种外围设备以串行方式进行通信.
S3C2410微处理器包括两路SPI,每一路分别有两个8位转移寄存器,用来发送和接收数据.
在SPI进行传输时,数据同时发送和接收[2].
如果只想发送数据,接收到的数据将是无效的;如果只想接收数据,应当发送全是1的数据.
1.
2MCP2551功能简介MCP2551是CAN协议控制器和物理总线之间的接口.
这个器件向总线提供了差动的发送能力,向CAN控制器提供了差动的接收能力.
1.
3MCP2515功能简介MCP2515是一款独立CAN控制器,是为简化连接CAN总线的应用而开发的.
图2简要显示了MCP2515的结构框图[3].
该器件主要由三个部分组成[4]:S3C2410MCP2515MCP2551CAN总线分析SPI总线图1CAN总线图1系统硬件结构www.
linuxidc.
comLinux公社(LinuxIDC.
com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站.
-2-(1)CAN协议引擎(处理所有总线上的报文发送和接收);(2)用来为器件及其运行进行配置的控制逻辑和SRAM寄存器;(3)SPI协议模块,用来实现SPI通信模式.
2.
驱动程序设计2.
1Linux设备驱动程序简介Linux设备驱动程序是内核的一部分,它工作在内核态,设备驱动程序必须向Linux核心或者其他所在的子系统提供一个标准的接口[5].
大多数设备驱动程序可以在需要的时候以核心模块方式加载,在不需要的时候卸载,同时Linux设备驱动程序有几个固定的功能模块,诸如Linux内核注册设备时的初始化模块,用于系统卸载模块时删除设备驱动程序的模块等.
2.
2嵌入式Linux2.
6内核新增特点实时可靠性是嵌入式应用较为普遍的要求,相比Linux2.
4内核,Linux2.
6已经在内核主体中加入了提高中断性能和调度响应时间的改进,其中有三个最显著的改进[6]:采用可抢占内核、更加有效的调度算法以及同步性的提高.
同时,Linux2.
6内核的移植更加方便,新增了对许多新的体系结构和处理器类型的支持,而且可以支持大容量内存模型、微控制器,还改善了I/O子系统,增添了更多的多媒体应用功能等.
2.
3CAN总线驱动程序设计1.
驱动初始化函数staticint__initMCP2515_init()模块初始化初始化函数中首先通过ioremap()函数将S3C2410的SPI寄存器的物理地址映射到内核空间[7],这样才可以在驱动程序中访问和配置S3C2410的SPI寄存器.
在正确的配置S3C2410的SPI寄存器后,通过register_chrdev()函数为MCP2515注册设备驱动,分配主设备号,这样通过在文件系统的设备文件目录中创建对应的设备文件后,就可以用Linux的系统函数来操作MCP2515了.
最后通过enable_irq()函数使能S3C2410相应的中断引脚,通过set_irq_type()函数初始化MCP2515的中断触发方式等.
2.
中断注册函数request_irq()由于CAN总线接收数据时必须与系统以中断方式交换数据,所以必须注册中断.
下面是具体代码request_irq(IRQ_EINT0,mcp2515_int,SA_INTERRUPT,device_name,NULL);其中函数request_irq()的第1个参数是设备申请的中断号,第2个参数是中断处理函数指针,CAN协议引擎SRAM寄存器SPI接口模块配置控制逻辑TXCANRXCAN图2MCP2515的结构框图www.
linuxidc.
comLinux公社(LinuxIDC.
com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站.
-3-第3个参数是与中断管理有关的位掩码选项,,SA_INTERRUPT表示中断处理程序是一个快速中断处理程序,第4个参数是设备名称,第5个参数是申请时告诉系统的设备标志.
该函数返回值为0表示申请成功,返回负数表示失败,这样当中断发生时,在中断处理函数mcp2515_int()中读取CAN状态寄存器CANSTAT,判断RXB0是否装入报文,如果是则把报文通过SPI接收数据寄存器读取到buffer中,等待系统函数read()读取.
3.
文件结构file_operations这个结构存在于中,文件结构中定义了很多操作,这些操作主要是实现系统调用.
内核可以通过文件结构来访问驱动程序的函数.
staticstructfile_operationsmcp2515_fops={//mcp2515_fops所属的设备模块.
owner=THIS_MODULE,//打开设备.
open=MCP2515_open,//释放设备.
release=MCP2515_release,//向总线发送数据.
write=MCP2515_write,//总线读取数据.
read=MCP2515_read,};读写CAN总线的功能可以由Linux系统函数read()和write()实现,通过传递不同的参数给驱动程序中的MCP2515_read()和MCP2515_write(),我们可以读取和写入相应的数据.
驱动中的CAN总线读函数MCP2515_read()是程序设计的难点,其中采用了Linux内核阻塞机制,核心代码如下:staticssize_tMCP2515_read(structfile*file,constchar*buffer,size_tcount,loff_t*ppos){uchari;ucharreceive_data[11];//使读进程阻塞于此,等待中断发生时唤醒.
interruptible_sleep_on(&my_wait);//打印调试信息printk("sleepover\n");//读取CAN数据帧的标识符高位receive_data[0]=spi_read_2510(RXB0SIDH);//读取CAN数据帧的标识符低位receive_data[1]=spi_read_2510(RXB0SIDL);//读取CAN数据帧的数据长度receive_data[2]=spi_read_2510(RXB0DLC);//片选信号拉低s3c2410_gpio_setpin(S3C2410_GPB0,0);//延时1s确保片选完成mdelay(1000);www.
linuxidc.
comLinux公社(LinuxIDC.
com)是包括Ubuntu,Fedora,SUSE技术,最新IT资讯等Linux专业类网站.
-4-//发读命令字spi_tx(cmd_read);//发接收缓冲器地址spi_tx(RXB0D0);for(i=0;i软件>操作系统>Linux目录下.
Linux公社(LinuxIDC.
com)设置了有一定影响力的Linux专题栏目.
包括:Ubuntu专题Fedora专题RedHat专题SUSE专题红旗Linux专题Android专题Linux公社简介-广告服务-网站地图-帮助信息-联系我们本站(LinuxIDC)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议.

HostYun:联通AS9929线路,最低月付18元起,最高500Mbps带宽,洛杉矶机房

最近AS9929线路比较火,联通A网,对标电信CN2,HostYun也推出了走联通AS9929线路的VPS主机,基于KVM架构,开设在洛杉矶机房,采用SSD硬盘,分为入门和高带宽型,最高提供500Mbps带宽,可使用9折优惠码,最低每月仅18元起。这是一家成立于2008年的VPS主机品牌,原主机分享组织(hostshare.cn),商家以提供低端廉价VPS产品而广为人知,是小成本投入学习练手首选。...

RAKsmart含站群服务器/10G带宽不限流量首月半价

RAKsmart 商家估摸着前段时间服务器囤货较多,这两个月的促销活动好像有点针对独立服务器。前面才整理到七月份的服务器活动在有一些配置上比上个月折扣力度是大很多,而且今天看到再来部分的服务器首月半价,一般这样的促销有可能是商家库存充裕。比如近期有一些服务商挖矿服务器销售不好,也都会采用这些策略,就好比电脑硬件最近也有下降。不管如何,我们选择服务器或者VPS主机要本着符合自己需求,如果业务不需要,...

DiyVM独立服务器:香港沙田服务器,5M带宽CN2线路,L5630*2/16G内存/120G SSD硬盘,499元/月

diyvm怎么样?diyvm商家VPS主机均2GB内存起步,三个地区机房可选,使用优惠码后每月69元起;DiyVM独立服务器开设在香港沙田电信机房,CN2线路,5M带宽,自动化开通上架,最低499元/月,配置是L5630*2/16G内存/120G SSD硬盘。DiyVM是一家成立于2009年的国人主机商,提供的产品包括VPS主机、独立服务器租用等,产品数据中心包括中国香港、日本大阪和美国洛杉矶等,...

增加百度收录为你推荐
国际域名注册如何申请国际域名注册linux主机linux优点和缺点有哪些啊?vps主机vps主机好吗?是不是垃圾?免费网站域名申请哪里可以申请到免费网站域名?ip代理地址ip代理有什么用?国内ip代理全国各省代理IP便宜的虚拟主机哪里有便宜的国内虚拟主机?php虚拟空间普通网站需要多大空间?本人新手php学习者,想买个虚拟空间用来放自己做的一些企业站,只是练习用途免费网站空间申请哪里有永久免费的域名空间可以申请大连虚拟主机大连建网站哪里好?
备案域名 深圳域名空间 合租服务器 国内永久免费云服务器 免费名片模板 国外免费空间 vip购优汇 股票老左 129邮箱 南通服务器 无限流量 免费asp空间 监控服务器 深圳域名 腾讯数据库 贵州电信 phpinfo 美国vpn代理 linux服务器系统 godaddy域名 更多