LPC1114/LPC11U14和LPC1343对比学习(八)USB
LPC1114没有USB功能,所以这里只能针对LPC1343和LPC11U14进行说明。对于这两种有USB功能的芯片其还是区 别,LPC1343内部集成了USB驱动,而LPC11U14没有此功能,所以LPC1343USB开发比较简单一点,价格也要贵一点。为了编写出通用的 USB驱动代码,这里将先对LPC11U14 USB进行学习,之后在移植到LPC1343。
鉴于USB开发难度,这里将不会从零开始开发USB驱动,我们将对NXP设计的USB驱动进行学习,并改进成一个自定义的HID,应用在自己的项目中。
USB HID(NXP原厂代码).rar
对于USB的硬件设计非常简单,具体设计如下图所示:
1. 除了连接好USB的两路差分信号线外,还必须连接好电源,对于P0_3是非常重要,不管是否使用USB电源供电,此管脚必须接高电平,否则无法设别USB设备。而且,如果要应用USB ISP功能,此管脚也必须接高电平。
2. P0_6管脚为软件连接端口,可以通过此管脚连接或断开USB设备。
3. 全速和高速设备的上拉电阻接在D+端,而低速设备是接在D-端的。
4. USB设备取电:在设备没有配置之前最多只能从Vbus上获取100mA电流,电流的大小是由设备配置的,配置后最多可获取500mA电流。
USB基础知识:
1. 在USB1.0和USB1.1中只支持1.5M/s的低速模式和12M/s的全速模式,在USB2.0中又加入了480M/b的高速模式,而在USB3.0中速度到达5GB/s。
2. USB集成器只能扩展USB接口,而能扩展带宽,一个主控制器的带宽是固定的。
3. 在USB1.1中集成器最多4层,USB2.0中最多6层。
4. 低速和全速模式下采用电压差分传输信号,在高速模式下,采用电流传输。
5. USB采用NRZI编码方式,0数据电平翻转,1数据电平不翻转。
USB的描述符应该是USB开发主重要的部分,如果能够正确的配置好描述符,USB开发就完成了一半了。
描述符:
对于HID设备的描述除了5个USB的标准描述:设备描述符、配置描述符、接口描述符、端点描述符、字符串描述符。
HID设备还有3个特点描述符:HID描述符、报告描述符、实体描述符。
在5个标准描述符中与HID设备有关的部分有:
1. 设备描述符中bDeviceClass、bDeviceSubClass、bDeviceProtocol三个字段的值必须为零。
2. 接口描述符中bInterfaceClass的值必须为0x03,bInterfaceSubClass的值为1时表示Boot Device,即表示HID是一个启动设备。
面的描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。这间描述符是用一定的字段构成的,分别如下说明:
报表描述符
报表描述符定义了执行设备功能的数据格式和使用方法。
报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的。报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备。报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。
实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的。
报表描述符必须先描述数据的大小与内容。报表描述符的内容与大小因设备的不同而不同,在进行报表传输之前,主机必须先请求设备的报表描述符,只有得到了报表描述符才可正确解析报表的数据。
报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一的数据结构,项目很多,通过编码实现。
在HID的8种描述符中,最为重要而且复杂的应该是报表描述符,其定义了数据的存储格式和实际意义。如果能够正确的理解报表描述符,那么对数据的处理就能达到应用自如了,所以在设计描述符的时候,一定好多话费时间来理解和编写这一部分的内容。特别要主要以下几点:
1. 输入输出等项使用的数据必须是整数字节,如果没有完全使用到,也必须通过说明来补齐。
2.主要报表的三种项的应用及使用范围。
命令请求:
HID设备类特定的命令有6个:Get_Report、Get_Idle、Get_Protocol、Set_Report、Set_Idle、Set_Protocol。
通过近段时间来对NXP的HID例程的学习,对其有了个大致的了解,USB一个包含以下几个文件:
1. hid.h文件对HID协议中使用到的各种描述符、字段等进行了全面的描述和定义,在需要更改其他应用时,只需要选择相应的宏就可以,非常清晰明确。
2.
LPC1114LPC11U14LPC1343US 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)