欢迎来到天天文库
浏览记录
ID:20406561
大小:146.00 KB
页数:6页
时间:2018-10-13
《在uclinux下can总线控制器驱动程序的设计过程》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、在uClirmx下CAN总线控制器驱动程序的设计过程在uClirmx下CAN总线控制器驱动程序的设计过程CAN总线技术是现今流行的一种先进的现场总线技术,可以有效的支持分布式控制和实时控制的串行通信网络。由于CAN总线具有通信速率高,可靠性高,连接方便和性能价格比高等诸多优点,因此在嵌入式系统开发中有普遍的应用。目前,CAN总线通信控制芯片众多,要在tiClinux平台下开发基于CAN总线的应用系统,就需要自己开发uClirmx下的驱动程序。本文将基于一个CAN总线在汽车电子中的应用详细介绍在uClimix下CAN总线控制器驱动程序的设计过程。1系统硬件结构本嵌入式系统主要的硬件组成为:处理器
2、采用三星公司的S3C44B0X,CAN总线控制器和收发器分别釆用Microchip公司的MCP2510和MCP2551。开发一个uClinux的驱动,在熟悉uClinux内核结构之外,大量的工作在于阅读相应的控制芯片手册。硬件信息决定驱动的主要结构。S3C44B0X采用的是ARM公司的16/32位ARM7TDM1内核,它是三星公司为一般应用提供的高性价比和高性能的微控制器解决方案,特别适合对成本和功耗敏感的应用场合。MCP2510是一款带有符合工业标准的SPI接口的CAN总线控制芯片,它支持CAN技术规范V2.0A/B,并能够发送和接收标准的和扩展的信息帧,同吋具冇接收滤波和信息管理的功能。M
3、CP2510在FI前市场上是体积最小、最易于使用也是最节约成本的独立CAX控制器。1CP2551是与1CP251O相配的高速CAN总线收发器,它担负着节点和总线之间接收和发送电平转换的任务。MCP2510通过SPI接口与S3C44B0X进行数据传输,最高数据传输数率可达5Mb/s。MCP2510再通过CAN收发器连接到CAN总线上,CAN总线上可以挂接多个节点,S3C44B0X通过MCP2510与CAN总线上的其它微处理器进行通信。MCP2510内含3个发送缓冲区和两个接收缓冲区,同时具有灵活的中断管理能力,帧屏蔽和过滤、帧优先级设定等特性,这使得微处理器对CAN总线的操作变得非常简便。系
4、统原理如图1所示。图1嵌入式应用系统结构2CAN总线应用系统的软件设计2.1嵌入式操作系统选择uClinuxuClinux是Linux2.0版木得一个分支,被设计用在微型控制应用领域。uClinux具备标准Linux系统的稳定性,并XL支持IJnux内核约定的全部特性。uClinux同标准Linux的最大的区别就是在于内存管理。标准Linux是针对有内存管理車(memorymanagementunit,丽U)的处理器设计的。在这种处理器上,虚拟地址被送到MMU,MMU把虚拟地址映射为物理地址。嵌入式应用对成本和实时性敏感,其使用的CPU中有很多都没有MMU,例如木系统釆用的S3C44B0X就是
5、一款不带MMU的微处理器。标准Lirmx无法适用于这部分嵌入式应用。uClirmx通过对标准Linux屮存管理的改写,去掉Y对論1U的依赖,保存丫Linux内核的大多数优点,因此它在嵌入式应用中有很好的前景。uClinux的应用主要体现在驱动程序的编写和上层应用软件的编写。所以,针对CAN总线控制器MCP2510的驱动程序需要我们自己编写。2.2CAN总线控制器驱动程序编写驱动程序是应用程序与硬件之间的一个屮间软件层。它使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节。用户通过一组标准化的调用来完成相关操作,这些标准化的调用是和具体设备驱动无关的,而驱动程序的任务就
6、是把这些调用映射到具体设备对于实际硬件的特定操作上。驱动程序应该为应用程序展现硬件的所冇功能,不应该强加其它的约束,对于硬件使用的权限和限制应该由应用程序层控制。驱动程序设计主要需要考虑下面3个方面:提供尽量多的选项给用户;提高驱动程序的速度和效率;尽量使驱动程序简单,使之易于维护。uClinux支持的设备驱动可分为3种:字符设备,块设备,网络接口设备。MCP2510就属于字符设备。字符设备是uClirmx中最简单的设备,所谓字符设备就是以字节为单位逐个进行I/O操作的设备。在uClinux中它们被映射为文件系统的一个节点,这个设备就像是一个普通文件,应用程序使用标准系统调用对它进行打开(op
7、en)、读取(read)、写入(write)和关闭(release)等操作。2.2.1驱动程序中定义的主要数据结构驱动程序中读写函数需要传输多个CAN消息,我们根据CAN通信协议和系统应用的需要,设计一个称为CanData的结构体来定义所传输的数据struct{unsignedintid;unsignedchardata[8];unsignedchardie;intIsExt;intrxRTR;)
此文档下载收益归作者所有