总线增加百度收录

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

酷锐云香港(19元/月) ,美国1核2G 19元/月,日本独立物理机,

酷锐云是一家2019年开业的国人主机商家,商家为企业运营,主要销售主VPS服务器,提供挂机宝和云服务器,机房有美国CERA、中国香港安畅和电信,CERA为CN2 GIA线路,提供单机10G+天机盾防御,提供美国原生IP,支持媒体流解锁,商家的套餐价格非常美丽,CERA机房月付20元起,香港安畅机房10M带宽月付25元,有需要的朋友可以入手试试。酷锐云自开业以来一直有着良好的产品稳定性及服务态度,支...

buyvm迈阿密机房VPS国内首发测评,高性能平台:AMD Ryzen 9 3900x+DDR4+NVMe+1Gbps带宽不限流量

buyvm的第四个数据中心上线了,位于美国东南沿海的迈阿密市。迈阿密的VPS依旧和buyvm其他机房的一样,KVM虚拟,Ryzen 9 3900x、DDR4、NVMe、1Gbps带宽、不限流量。目前还没有看见buyvm上架迈阿密的block storage,估计不久也会有的。 官方网站:https://my.frantech.ca/cart.php?gid=48 加密货币、信用卡、PayPal、...

酷番云-618云上秒杀,香港1核2M 29/月,高防服务器20M 147/月 50M 450/月,续费同价!

官方网站:点击访问酷番云官网活动方案:优惠方案一(限时秒杀专场)有需要海外的可以看看,比较划算29月,建议年付划算,月付续费不同价,这个专区。国内节点可以看看,性能高IO为主, 比较少见。平常一般就100IO 左右。优惠方案二(高防专场)高防专区主要以高防为主,节点有宿迁,绍兴,成都,宁波等,节点挺多,都支持防火墙自助控制。续费同价以下专场。 优惠方案三(精选物理机)西南地区节点比较划算,赠送5...

增加百度收录为你推荐
主机租用租用主机和购买空间有什么区别?免费com域名注册有没有完全免费的域名?域名备案查询网站备案查询网站空间购买哪里买网站空间好?网站空间商域名空间商怎么做虚拟主机管理系统什么虚拟主机管理系统支持W和linux操作系统大连虚拟主机上海未星网络科技有限公司是一家什么样的公司?虚拟主机99idc如何选择虚拟主机的的操作系统以及更换操作系统是注意事项虚拟主机测评我们可以用哪些命令来测试一个虚拟主机的好坏?虚拟主机试用30天虚拟主机返佣是怎么回事?
lamp安装 justhost edis 免备案cdn 免费静态空间 新站长网 mysql主机 铁通流量查询 架设服务器 lol台服官网 中国电信测网速 阿里校园 亚马逊香港官网 服务器托管什么意思 中国电信宽带测速网 512mb 中国电信测速器 linode支付宝 中国电信测速网站 谷歌台湾 更多