基于LUFA开源框架库对AVR芯片进行USB终端设备开发
摘要:本文针对一般USB设备的开发过程过于困难、复杂、繁琐等不利于快速开发的问题,引入了LUFA(Lightweight USB Framework for AVRs)开源框架库,解决了基于AVR芯片的USB设备的快速开发问题。这种方法能实现快速开发并实现相关的产品,并且有稳定的性能表现,具有工程实践意义。
概述
目前,USB控制器主要有两种:一种是带USB接口的单片机(MCU),另一种是纯粹的USB接口芯片。前者的最大优势在于,开发者对系统结构和指令集非常熟悉,开发工具简单,容易进行功能拓展,但其成本相对较高;后者的最大特点是,价格便宜,接口方便,可靠性高,但其硬件架构相对复杂,软件部分限制相对较大。
在工程实践中,有时需要快速可靠地开发出相应的USB终端设备,或者针对特定领域开发出专用产品。此时,如果有一个成熟可靠的软件框架,可以事半功倍地满足相应的需求。本文针对AVR的部分带USB接口的单片机,如:AT90USB系列,ATmega8U系列,ATmega16U系列,AT32UC3系列的部分型号,ATXmega系列的部分型号等,介绍LUFA开源框架,以实现快速开发USB终端设备,或者针对特定领域开发专用产品。
1 USB协议概述
USB是一种串行接口协议,应用日益广泛。但是,要熟悉其协议内容并不简单,其协议文档繁杂罗嗦,Linux uhci驱动作者之一Alan Stern曾经就说过:
The USB documentation is downright evil. Most of it is just crap, written by a committee. You're better off ignoring most of it.
他同时还对软件开发者指出,开发者最需要注意的是两点:一、底层协议(非常简单,但很多小细节要注意),二、其他。
简而言之,USB协议,在硬件上,靠D+,D-两条数据线进行差分传输,以及NRZI的编码方式。在通信上,依靠封包(package)格式进行数据传输。封包由若干个域(Package Field)构成,每个域由若干位组成(具体的位数由具体的域决定)。其细节部分繁多复杂,上手困难,也极其容易出错。
2 LUFA开源框架
LUFA(Lightweight USB Framework for AVRs),由澳大利亚人Dean Camera开发,是一个基于MIT协议分发的开源框架。针对带USB接口的Atmel AVR8单片机和部分AVR32单片机系列,LUFA实现了一个完全符合USB通信协议的开源框架库。基于这个框架,不仅能开发出合适的终端设备,也能在部分设备上开发出合适的主控制端。
该框架库经过多年的测试改进,现已处于稳定版本。其针对AVR-GCC编译器进行了优化设计,使用了部分GCC特有的拓展方式,使得这个库的相关API能更稳定流畅地运行。相关的编译器AVR-GCC,能在Atmel网站下载到相应系统的版本。在LUFA源码库里面,有多达三四十种不同应用的示例版本。
● 支持的芯片类型
LUFA是针对带USB接口的Atmel AVR 8/32位单片机进行开发的,所以只要是带USB接口的Atmel AVR单片机,均可使用LUFA开源框架库。例如:AT90USB系列,ATmega8U系列,ATmega16U系列,AT32UC3系列,ATXmega系列等。详情可查看LUFA的相关文档。
● 源码下载
LUFA的项目主页(英文)在http://www.fourwalledcubicle.com/LUFA.php。该项目的源码版本管理托管在github上,相关地址在http://github.com/abcminiuser/lufa。更多详情,可以在LUFA的项目主页上查看。
● 开发环境搭建
Atmel提供了相关的工具链,使得开发者可以简单方便地进行开发,包括Linux平台和Windows平台。除了Atmel提供的工具链之外,还可以使用第三方工具链,按照自己的需要来进行开发。同时,LUFA已经成为Atmel Studio 6.1及后续版本的原生插件之一。无论是编译固件,还是固件上传,LUFA文档都提供了详细的说明。详情请参阅LUFA文档部分:LUFA Library -> Getting Started。
3 设备开发示例说明
在本示例中,本文以ATmega32U4制作一个可编程键盘为示例,演示LUFA开源框架库的开发流程方式。该示例分成两大部分:一、制作bootloader,以便对设备进行编程烧录;二、实现矩阵键盘功能。
● ATmega32U4微处理器
ATmega32U4是一款采用低功耗CMOS工艺生产的基于AVR RISC(精简指令集)接口的高性能、低功耗8位单片机。处理器具有可控制的上电复位延时电路和可编程的前沿检测电路,带有双周期乘法器,以及32个8位通用工作寄存器,内部和外部共计13个中断源,加上丰富的的指令集,使得大部分的指令执行时仅为一个时钟周期。因此可达到1MIPS/MHz的性能,运行速度比普通单片机高得多。
同时,处理器还有丰富的外部接口,如14个PWM通道,12路10位ADC,SPI,USART等。片内集成了32KB的Flash程序储存器(其中4KB可被引导程序使用),2.5KB片
LUFA AVR USB MCU 单片机 201409 相关文章:
- Flash损耗均衡的嵌入式文件系统设计(06-01)
- 锁相环控制及初始化简析(08-27)
- 基于AVR单片机的ISP1362OTG设计(09-06)
- 基于AVR单片机的串口转FSK的通信模块设计(01-23)
- 案例分析:基于AVR32的隧道环境监测系统(03-18)
- 科技帮我们远离灾难:灾难检测飞行器(03-18)