新闻中心

EEPW首页>嵌入式系统>设计应用> 基于ATmega8515的USB-CAN适配器的实现

基于ATmega8515的USB-CAN适配器的实现

作者: 时间:2013-10-26 来源:网络 收藏


图2  USB2CAN数据传输处理框图

2  的软件设计

软件包括两部分:中的固件和PC机内USB2CAN适配器的驱动软件.

2. 1  适配器固件编程
  良好的开发环境是开发单片机软件质量和速度的保证.USB2CAN 适配器采用GNU AVR 的最新版本WinAVR 编程,它能够对所有AVR 单片机用C 或C + + 语言进行编程,且能在WIN2000 下运行.

  USB-CAN 适配器固件设计成完全的中断驱动,当处理前台任务时,USB 和CAN 的传输可以在后台同时进行,大大提高了实际传输效率,编程和调试亦很方便. 后台的中断处理子程序通过设置事件标志和数据缓冲区来实现和前台主程序之间的数据交换(如图2 所示) .当检测到CAN 控制器的状态寄存器而得知接收缓冲CANRX-Buffer有数据,就会把数据传到USB 控制器空闲发送缓冲区TXFIFO-1或TXFIFO-2中; 同样, 当USB控制器的接收缓冲区RXFIFO-1或RXFIFO-2充满数据时,ATmega8515就会把RXFIFO-1或RXFIFO-2的数据读到内部一个连续的RAM空间,当CAN总线控制器发送缓冲区CAN-TX-Buffer 为空时,再把数据从RAM传到CAN-TX-Buffer.

  USB -CAN适配器固件设计中采用乒乓缓存法提高实际传输速率. USBN9603有7个端点, 通常FIFO内的数据进行传送或接收时每个端点对应一个管道,但是,两个同方向传输数据的端点也可以利用一个管道,这样可以有效地提高数据的传输率,因为当第一个端点的FIFO传输数据时,微处理器可以对第二个端点的FIFO进行数据读或写,反之亦然.

  USBN9603 在进行批量传输时,其实际传输率大约是512kb/s ,这往往是由于主机的控制器最大每帧数据包数量限制造成的,而并非USBN9603本身传输性能. 其它传输方式,如中断传输、同步传输、控制传输的最高传输速率为1.5Mb/s. 采用乒乓缓存法后,可使传输速率提高一倍,从而使传输速率为1Mb/s 的CAN总线控制器没有等待接收数据和发送数据空间的情况,解决了数据传输中的“瓶颈”问题.在USB-CAN 适配器中,端点EP1 (TXFIFO-1) 和EP3 (TXFIFO-2)发送数据到主机,EP2(RXFIFO-1) 和EP4(RXFIFO-2)从主机接收数据(如图2 所示) ,其FIFO中的数据长度都是64字节. 在主机进行枚举过程中,当节点接收到配置设备请求,固件程序就可以把EP1/EP3和EP2/EP4分别分配到同一个端点地址.USBN9603 内置有一个优先级表,如果多个端点编程指定为同一个端点号,具有较低号的端点(利用TOGGL 标志区分高低)首先得到响应和数据.

2. 1. 1  数据上传
  当主机发送一个IN 令牌给USB-CAN 适配器,适配器就开始向PC机发送数据. 图3 为数据上传的流程图. 通过两个标志UPDATE1 和UPDATE2 把主程序和Tx 中断子程序紧密联系起来,体现了前台后台程序设计思想. 当UPDATE1 清0 ,上传数据完毕;当置1 时,开始传输下一批数据. 图4为EP1的Tx中断子程序流程图,UPDATE1 在该中断子程序置1.UPDATE2的运行和UPDATE1相似.

图3  主程序处理上传送FIFO 数据流程

图4  EP1 的Tx 中断子程序流程


2. 1. 2  数据下传
  当主机发送一个OUT令牌给USB2CAN适配器,适配器就开始接收PC发送的数据,并将其暂存在ATmega8515 的RAM中,然后传到CAN总线控制器的数据发送缓冲区CAN.TX.Buffer. 图5 为EP2的Rx中断子程序流程,显示了PC的数据如何传到CAN总线的发送缓冲区. 端点EP4 的Rx 中断子程序流程和EP2的相似.


评论


相关推荐

技术专区

关闭