总线增加百度收录

增加百度收录  时间: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)所刊载文章不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议.

妮妮云80元/月,香港站群云服务器 1核1G

妮妮云的来历妮妮云是 789 陈总 张总 三方共同投资建立的网站 本着“良心 便宜 稳定”的初衷 为小白用户避免被坑妮妮云的市场定位妮妮云主要代理市场稳定速度的云服务器产品,避免新手购买云服务器的时候众多商家不知道如何选择,妮妮云就帮你选择好了产品,无需承担购买风险,不用担心出现被跑路 被诈骗的情况。妮妮云的售后保证妮妮云退款 通过于合作商的友好协商,云服务器提供2天内全额退款,超过2天不退款 物...

iON Cloud:新加坡cn2 gia vps/1核/2G内存/25G SSD/250G流量/10M带宽,$35/月

iON Cloud怎么样?iON Cloud升级了新加坡CN2 VPS的带宽和流量最低配的原先带宽5M现在升级为10M,流量也从原先的150G升级为250G。注意,流量也仅计算出站方向。iON Cloud是Krypt旗下的云服务器品牌,成立于2019年,是美国老牌机房(1998~)krypt旗下的VPS云服务器品牌,主打国外VPS云服务器业务,均采用KVM架构,整体性能配置较高,云服务器产品质量靠...

RFCHOST - 洛杉矶CN2 GIA VPS季付23.9美元起 100Mbps带宽

RFCHOST,这个服务商我们可能有一些朋友知道的。不要看官网是英文就以为是老外服务商,实际上这个服务商公司在上海。我们实际上看到的很多商家,有的是繁体,有的是英文,实际上很多都是我们国人朋友做的,有的甚至还做好几个品牌域名,实际上都是一个公司。对于RFCHOST商家还是第一次分享他们家的信息,公司成立大约2015年左右。目前RFCHOST洛杉矶机房VPS正进行优惠促销,采用CN2优化线路,电信双...

增加百度收录为你推荐
域名代理我想申请域名代理。直接在国家域名管理中心申请,应该有什么一些手续?vps虚拟主机请通俗解析一下虚拟主机,VPS和云主机?它们各有什么用途?vps国内VPS哪个好中文域名注册查询域名还分中文和英文的吗,在哪里可以查到中文域名到期了?com域名空间域名和空间是什么意思域名购买域名注册和购买是一个意思吗?海外域名外贸网站如何选择合适的海外域名?免费域名空间免费空间和免费域名jsp虚拟空间请问如何卖掉JSP虚拟主机网站空间价格域名空间一般几钱?
查询ip 哈尔滨服务器租用 linuxapache虚拟主机 流媒体服务器 payoneer gomezpeer 傲盾官网 鲁诺 登陆空间 cxz 中国域名 群英网络 后门 深圳主机托管 国外免费网盘 tracker服务器 碳云 cdn加速 magento主机 低价 更多