基于ARM Cortex3的低功耗无源USB-CAN透明传输的实
成: (1)CAN协议控制器和报文处理器 (2)报文存储器 (3)CAN寄存器接口 协议控制器从CAN总线传输和接收串行数据,并将数据传递到报文处理器。接着,报文处理器根据当前的滤波和报文对象存储器中的标识符,将该信息载入合适的报文对象。报文处理器还负责根据CAN总线上的事件来产生中断。 报文对象存储器由32个相同的存储块组成,这些存储块保存了每个报文对象当前的配置信息、状态和实际数据。可以通过CAN报文对象寄存器接口来访问报文对象存储器。 CAN报文对象寄存器接口提供了两个寄存器组来与报文对象通信。由于不能直接访问报文对象存储器,所以必须使用这两个接口来读写各个报文对象。当多个对象包含需要处理的新信息时,这两个报文对象接口允许并行访问CAN控制器报文对象。 为满足CAN2.0的基本通信,需要进行驱动程序和用户应用程序两个层次的程序设计。驱动程序主要包括数据结构的定义和API函数的设计。需要定义的数据结构有时钟配置结构体和CAN消息对象结构体。本项目中需要完成的API函数有:波特率配置函数、波特率配置信息获取函数、CAN控制器使能函数、CAN控制器关闭函数、CAN控制器初始化函数、CAN中断使能函数、CAN中断关闭函数、CAN中断标志清除函数、CAN中断状态获取函数、报文对象清除函数、读取报文对象函数、配置报文对象函数。应用程序主要包括CAN报文发送函数设计、CAN报文接收配置函数、CAN中断服务函数设计。 4.1.2 关于CAN控制器的配置程序设计 根据CAN2.0协议,CAN总线报文的发送和接收需要进行一系列配置,图2为CAN报文发送接受配置流程图。 4.2 USB通信相关 4.2.1 LM3S5956微处理器的USB控制器 LM3S5956微处理器的USB控制器支持USB Host/Device/OTG功能,可运行在全速和低速模式。它符合USB2.0标准,包含挂起和唤醒信号。它包含32个端点,其中包含2个用于控制传输的专用连接端点(一个用于输入,一个用于输出),其他30个端点带有可软件动态定义大小的FIFO并以支持多包队列。FIFO支持DMA,可有效降低系统资源的占用。USB Device启动方式灵活,可软件控制是否在启动时连接。USB控制器遵从OTG标准的会话请求协议(SRP)和主机协商协议(HNP)。 LM3S5956微处理器的芯片供应商TI公司提供了一套完整的USB开发解决方案(USBLIB),极大地缩短了用户的开发周期,本项目将采用USBLIB中的USB虚拟串口方式进行数据传输,这样,上位机驱动包的支持下,可以通过串口调试工具直接对USB的数据进行读写。在USB虚拟串口的方案中,USB通信模块主要分为USB驱动、USB虚拟串口应用层、用户应用层三部分。 根据USB协议,本项目中的USB通信模块属于从USB设备,USB驱动的设计主要包括以下函数的定义:返回从站地址函数、配置从站地址函数、USB控制器连接函数、USB控制器关闭函数、端点配置函数、数据应答函数、端点停止函数、端点启动函数、端点状态清除函数、端点数据获取函数、端点数据赋予函数、端点传输启动函数、端点状态返回函数。 USB虚拟串口应用层介于用户应用层和USB驱动层之间,是目前最流行的USB应用层协议之一,其最大的特点就是可以模拟串口的数据传输方式,还可以保证实时性和准确性。适合传输较为简短的数据。而CAN报文的数据域最长只有8个字节,所以USB虚拟串口协议非常适合转发CAN报文数据。虚拟串口协议主要包括以下函数的定义:虚拟串口初始化函数、虚拟串口数据包读取函数、虚拟串口数据包写入函数。 用户应用层主要包括USB枚举常量的定义、虚拟串口设备定义、发送和接收缓冲区定义、虚拟串口通信参数设置函数、虚拟串口通信参数获取函数、设备控制中断函数、数据接收中断函数、数据发送中断函数。 4.2.2 程序逻辑 在USB虚拟串口设备的软件结构中,TI提供的USBlib库已经实现了大部分工作,只需要实现三个和USB设备相关的回调函数就可以了。这三个函数分别为: USBControlHandler:处理和控制端口相关的事件 USBRxHandler:处理和接收端口相关的事件 USBTxHanler:处理和发送端口相关的事件 在控制端口处理函数中,主要处理设备连接、设备断开、挂起中断、唤醒中断等事件。 4.3 主程序设计 为保证数据透传的实时性,双向数据包均采用中断的方式进行转发,即在CAN接受中断发生之后,立即将数据包转发至USB发送缓冲区;在USB接收中断发生以后,立即将数据包转发至CAN发送缓冲区,保证了数据的实时性和完全透明传输。如图3为CAN中断服务函数。 4.4 开发平台与功能测试 本项目的软件交叉编译平台为WINDOWS XP平台下的MDK4.0编译器,下载仿真器为JLINK V8。 按照图4所示方式进行连线,在上位
CAN总线 通用串行总线 ARM Cortex CANopen 相关文章:
- 对TTCAN的分析(05-26)
- 嵌入式Win CE中CAN总线控制器的驱动设计与实现(05-01)
- μC/OS-II的多任务信息流与CAN总线驱动(07-11)
- 采用CAN总线实现DSP芯片程序的受控加载(11-08)
- 基于DSP的电动汽车CAN总线通讯技术设计(10-08)
- 基于DSP的CANopen通讯协议的实现(01-18)