### 嵌入式环境下CAN卡驱动程序的开发:关键知识点解析
#### 一、CAN总线技术概览
CAN(Controller Area Network)总线是由德国Bosch公司在上世纪80年代初为解决现代汽车中控制与测试仪器间的数据交换问题而开发的一种串行数据通信协议。它是一种多主总线,不依赖于传统的站地址编码,而是通过对通信数据块进行编码,实现了网络内节点数量的理论无限扩展。29位的标识码能够定义超过5亿个不同的数据块,确保不同节点能够同时接收相同的数据。这一特性使得CAN总线及其设备在各种工业领域得到了广泛应用。
#### 二、嵌入式操作系统Windows CE.NE
在电力行业,为了加速变电站的部署,采用了一种整体变电所的建设方法,即在生产基地完成变电站内部设备的安装和初步调试,仅留出与外界的接口,再整体运输至目的地,进行简单的安装和调试即可投入运行。在某北京怀柔的变电站项目中,选用了嵌入式操作系统Windows CE.NET作为系统监控软件的平台。该系统具备维护和调试的便利性,提供了端对端的开发和调试手段,允许在不拆卸设备的情况下通过Telnet登录到Windows CE进行调试和维护。
#### 三、CAN卡驱动程序开发
##### 1. CAN总线通信卡简介
研华公司的PCM3680是一款用于PC104的双口CAN总线通信卡,采用Philips公司的独立CAN控制器SJA1000芯片和P82C250收发器,能够同时操作两个CAN网络,提供最高1Mbit/s的传输速度。支持广泛的中断范围,并配备1000V的光电隔离,增强了系统的可靠性。
##### 2. 寄存器结构与功能
在CAN卡通信中,寄存器起着核心作用。主要包括控制寄存器、命令寄存器、状态寄存器和中断寄存器等。例如,控制寄存器用于设置测试模式、同步、中断使能等功能;命令寄存器用于执行如睡眠状态、清除过载状态等操作;状态寄存器显示总线状态、错误状态等;中断寄存器则记录唤醒、过载、错误等中断事件。
##### 3. CAN卡驱动底层函数设计
在Windows CE.NET系统下,CAN卡驱动被设计为位于OEM Adaptation Layer(CAL)层的真实驱动,而非主程序中的串行操作。通过调用DDK(Driver Development Kit)中的API函数`HalTranslateBusAddress`,将CAN卡的物理地址映射为逻辑地址,从而对寄存器的读写转化为对内存地址的操作。这种设计使得CAN卡能够在Windows CE下正常工作,并且可以通过设备管理器查看其工作状态,配置相应的中断号和I/O地址。
#### 四、总结
开发嵌入式环境下的CAN卡驱动程序,尤其是针对特定硬件如研华PCM3680,不仅需要深入理解CAN总线的通信协议,还要求掌握Windows CE.NET下的驱动开发技术。通过精心设计的驱动程序,能够实现CAN卡与嵌入式系统的无缝集成,为电力、汽车等多个领域的数据通信提供稳定可靠的支持。