- 1、本文档共7页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在uClinux下CAN总线控制器驱动程序的设计过程
在uClinux下CAN总线控制器驱动程序的设计过程
在uClinux下CAN总线控制器驱动程序的设计过程
CAN总线技术是现今流行的一种先进的现场总线技术,可以有效的支持分布式控制和实时控制的串行通信网络。由于CAN总线具有通信速率高,可靠性 高,连接方便和性能价格比高等诸多优点,因此在嵌入式系统开发中有普遍的应用。目前,CAN总线通信控制芯片众多,要在uClinux平台下开发基于 CAN总线的应用系统,就需要自己开发uClinux下的驱动程序。本文将基于一个CAN 总线在汽车电子中的应用详细介绍在uClinux下CAN总线控制器驱动程序的设计过程。
1 系统硬件结构??? 本嵌入式系统主要的硬件组成为:处理器采用三星公司的S3C44B0X,CAN总线控制器和收发器分别采用MicroChip公司的MCP2510和 MCP2551。开发一个uClinux的驱动,在熟悉uClinux内核结构之外,大量的工作在于阅读相应的控制芯片手册。硬件信息决定驱动的主要结 构。S3C44B0X 采用的是ARM公司的16/32位ARM7TDMI内核,它是三星公司为一般应用提供的高性价比和高性能的微控制器解决方案,特别适合对成本和功耗敏感的 应用场合。MCP2510是一款带有符合工业标准的SPI接口的CAN总线控制芯片,它支持CAN技术规范V2.0A/B,并能够发送和接收标准的和扩展 的信息帧,同时具有接收滤波和信息管理的功能。MCP2510在目前市场上是体积最小、最易于使用也是最节约成本的独立CAN控制器。MCP2551是与 MCP2510相配的高速CAN总线收发器,它担负着节点和总线之间接收和发送电平转换的任务。MCP2510通过SPI接口与S3C44B0X进行数据 传输,最高数据传输数率可达5 Mb/s。MCP2510再通过CAN收发器连接到CAN总线上,CAN总线上可以挂接多个节点,S3C44B0X通过MCP2510与CAN 总线上的其它微处理器进行通信。MCP2510内含3个发送缓冲区和两个接收缓冲区,同时具有灵活的中断管理能力,帧屏蔽和过滤、帧优先级设定等特性,这 使得微处理器对CAN 总线的操作变得非常简便。系统原理如图1所示。?图1 嵌入式应用系统结构
2 CAN总线应用系统的软件设计2.1 嵌入式操作系统选择uClinux??? uClinux是Linux2.0版本得一个分支,被设计用在微型控制应用领域。uClinux具备标准Linux系统的稳定性,并且支持Linux内核 约定的全部特性。uClinux同标准Linux的最大的区别就是在于内存管理。标准Linux是针对有内存管理单元(memory management unit,MMU)的处理器设计的。在这种处理器上,虚拟地址被送到MMU,MMU把虚拟地址映射为物理地址。嵌入式应用对成本和实时性敏感,其使用的 CPU中有很多都没有MMU,例如本系统采用的S3C44B0X就是一款不带MMU 的微处理器。标准Linux无法适用于这部分嵌入式应用。uClinux通过对标准Linux中内存管理的改写,去掉了对MMU的依赖,保存了Linux 内核的大多数优点,因此它在嵌入式应用中有很好的前景。uClinux的应用主要体现在驱动程序的编写和上层应用软件的编写。所以,针对CAN总线控制器 MCP2510的驱动程序需要我们自己编写。2.2 CAN总线控制器驱动程序编写??? 驱动程序是应用程序与硬件之间的一个中间软件层。它使某个特定的硬件响应一个定义良好的内部编程接口,同时完全隐蔽了设备的工作细节。用户通过一组标准化 的调用来完成相关操作,这些标准化的调用是和具体设备驱动无关的,而驱动程序的任务就是把这些调用映射到具体设备对于实际硬件的特定操作上。驱动程序应该 为应用程序展现硬件的所有功能,不应该强加其它的约束,对于硬件使用的权限和限制应该由应用程序层控制。驱动程序设计主要需要考虑下面3个方面:提供尽量 多的选项给用户;提高驱动程序的速度和效率;尽量使驱动程序简单,使之易于维护。??? uClinux支持的设备驱动可分为3种:字符设备,块设备,网络接口设备。MCP2510就属于字符设备。字符设备是uClinux中最简单的设备,所 谓字符设备就是以字节为单位逐个进行I/O操作的设备。在uClinux中它们被映射为文件系统的一个节点,这个设备就像是一个普通文件,应用程序使用标 准系统调用对它进行打开(open)、读取(read)、写入(write)和关闭(release)等操作。2.2.1 驱动程序中定义的主要数据结构??? 驱动程序中读写函数需要传输多个CAN消息,我们根据CAN通信协议和系统应用的需要,设计一个称为CanData的结构体来定义所传输的数据struct{
文档评论(0)