LPC1114/LPC11U14和LPC1343对比学习(八)USB

发布者:温馨的家庭最新更新时间:2015-09-09 来源: eefocus关键字:LPC1114  LPC11U14  LPC1343  USB 手机看文章 扫描二维码
随时随地手机看文章
这3种芯片的功能非常多,到此基本上我们已经介绍完成,只有AD、WDT等没有介绍,鉴于其难度不大这方面的内容就不再说明。下面将进行终极篇的学习----USB学习,由于USB难度非常大,这一贴可能会编写很长时间,这里将主要学习HID的应用。

LPC1114没有USB功能,所以这里只能针对LPC1343和LPC11U14进行说明。对于这两种有USB功能的芯片其还是区 别,LPC1343内部集成了USB驱动,而LPC11U14没有此功能,所以LPC1343USB开发比较简单一点,价格也要贵一点。为了编写出通用的 USB驱动代码,这里将先对LPC11U14 USB进行学习,之后在移植到LPC1343。

鉴于USB开发难度,这里将不会从零开始开发USB驱动,我们将对NXP设计的USB驱动进行学习,并改进成一个自定义的HID,应用在自己的项目中。

USB HID(NXP原厂代码).rar

对于USB的硬件设计非常简单,具体设计如下图所示:

LPC1114/LPC11U14和LPC1343对比学习-管脚

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是一个启动设备。

面的描述符之间有一定的关系,一个设备只有一个设备描述符,而一个设备描述符可以包含多个配置描述符,而一个配置描述符可以包含多个接口描述符,一个接口使用了几个端点,就有几个端点描述符。这间描述符是用一定的字段构成的,分别如下说明:

LPC1114/LPC11U14和LPC1343对比学习-管脚 LPC1114/LPC11U14和LPC1343对比学习-管脚 LPC1114/LPC11U14和LPC1343对比学习-管脚

报表描述符

报表描述符定义了执行设备功能的数据格式和使用方法。

报表描述符和USB的其他描述符是不一样的,它不是一个简单的表格,报表描述符是USB所有描述符中最复杂的。报表描述符非常复杂而有弹性,因为它需要处理各种用途的设备。报表的数据必须以简洁的格式来储存,这样才不会浪费设备内的储存空间以及数据传输时的总线时间。

实际上可以这样理解,报表内容的简洁,是通过报表描述符全面的、复杂的数据描述实现的。

报表描述符必须先描述数据的大小与内容。报表描述符的内容与大小因设备的不同而不同,在进行报表传输之前,主机必须先请求设备的报表描述符,只有得到了报表描述符才可正确解析报表的数据。

报表描述符是报表描述项目(Item)的集合,每一个描述项目都有相对统一的数据结构,项目很多,通过编码实现。[page]

在HID的8种描述符中,最为重要而且复杂的应该是报表描述符,其定义了数据的存储格式和实际意义。如果能够正确的理解报表描述符,那么对数据的处理就能达到应用自如了,所以在设计描述符的时候,一定好多话费时间来理解和编写这一部分的内容。特别要主要以下几点:

1. 输入输出等项使用的数据必须是整数字节,如果没有完全使用到,也必须通过说明来补齐。

2.主要报表的三种项的应用及使用范围。

LPC1114/LPC11U14和LPC1343对比学习-管脚

命令请求:

HID设备类特定的命令有6个:Get_Report、Get_Idle、Get_Protocol、Set_Report、Set_Idle、Set_Protocol。

通过近段时间来对NXP的HID例程的学习,对其有了个大致的了解,USB一个包含以下几个文件:

LPC1114/LPC11U14和LPC1343对比学习-管脚

1. hid.h文件对HID协议中使用到的各种描述符、字段等进行了全面的描述和定义,在需要更改其他应用时,只需要选择相应的宏就可以,非常清晰明确。

2.hiduser.c/hiduser.h文件对HID中需要使用到的6中设备命令请求函数进行了编写描述。

3.usb.h文件对USB标准中需要使用的报告和描述符进行全面的定义。

4.usbcfg.h文件对USB中应用到的电源、端点、接口、缓冲等进行配置说明,完全可以根据自己的需要来配置USB。

5.usbcore.c/usbcore.h文件是USB协议内核文件,是各种USB开发必备文件,完成了USB的核心内容,也是USB开发的难点和重点。

6.usbdesc.c/usbdesc.h文件为USB各种描述符的实现代码,开发不同的HID设备时,需要在此文件中更改相应描述。

7.usbhw.c/usbhw.h文件实现与USB相关的硬件配置等。

8.usbuser.c/usbuser.h文件实现各种事件和端点的实现代码,根据自己的应用更改端点代码实现USB通信。

在HID开发中,报告描述符是最关键而且最复杂的描述符,因为它没有专门的格式,随意性比较大,但是HID的数据解析完全是依靠此描述符。

下面是NXP例程中的HID的报告描述符:

LPC1114/LPC11U14和LPC1343对比学习-管脚

程序代码都注释了,这里不再详细说明,需要注意中间三段代码:

1. 第一段中定义了一个Input,数据为1位,一共有3个这样是数据;

2. 第二段中定义了一个Input,数据为1位,一共有5个这样是数据,不过需要注意,这里定义的是常量。就是说这里的5个位并没用实际意义,完全是为了补齐一个字节的。这一点要注意,在报告描述符中,必须使用整数字节。

3. 第三段中定义了一个Output,数据为1位,一共有8个这样的数据,也就是说,由8个位组成的一字节输出数。

到此我们不难看出此HID使用的是1字节是输入和1字节是输出,只是在1字节输入数据中,这里只使用了3为。对于其他的描述符这里就不再说明,可以直接对照上面的描述符格式就可以看懂,需要注意HID必须设置的几个字段就行了。

其他描述符:

LPC1114/LPC11U14和LPC1343对比学习-管脚 LPC1114/LPC11U14和LPC1343对比学习-管脚 LPC1114/LPC11U14和LPC1343对比学习-管脚

在这些描述符中我们可以看出设备的具体功能,以及通信使用的端点,缓存等

通过上述对描述符的了解,基本的HID信息我们已经了解,下面就可以编写程序,通过把获取的数据进行验证了,这里我们是通过按键按下给PC发送数据,通过PC发送数据在设备上通过LED显示的。

LPC1114/LPC11U14和LPC1343对比学习-管脚 LPC1114/LPC11U14和LPC1343对比学习-管脚

到此就可以把代码下载到开发板上,并通过实验进行验证了。下面我们采取两种方法:

1.使用周工例程中的HID Client上位机软件,进行验证。

把开发板下载代码后插入PC,通过Device选择我们的“LPC11Uxx USB HID”设备,下面我们可以看出,设备在没有键按下时读取为0x01,当按下键时,读取为0x00。在Outputs中勾选相应的复选框,我们可以看到开发板上相应的LED就别点亮了。[page]

这种方法只是验证本实验是可以的,但是要开发其他USB功能设备就不行了,下面我们介绍一种通用的方法。

LPC1114/LPC11U14和LPC1343对比学习-管脚

2. 使用Bus Hound软件验证,这个软件,刚开始很多人都不会用,这里将详细点。

打开软件,在设备项选择我们的USB设备,如下图

LPC1114/LPC11U14和LPC1343对比学习-管脚

需要注意的是在发送数据时,需要选择USB人体学输入设备,而不是下面的HID-compliant device。如果是双击HID-compliant device弹出的窗口中并没有端点,是不能通信的,应该双击USB人体学输入设备,弹出如下界面:

LPC1114/LPC11U14和LPC1343对比学习-管脚

通过上图,我们可以看出,端点和我们定义的是一样的

下面我们就可以选择端点进行数据通信了,选择需要端点,填写发送数据长度,在下面输入要发送的数据,选择“Run”,就可以把数据发送出去了。 之后把软件切换到Capture,可以捕获输入输出数据,如下图。

LPC1114/LPC11U14和LPC1343对比学习-管脚

通过上面的验证,我们可以得知,实验结果和我们想要的是一样的,以后对于多字节的收发,我们就可以通过Bus Hound软件进行验证了。

自定义多字节发送的实现:

下面我们只需要修改几个部分就能实现了。

1. 修改报告描述符:

LPC1114/LPC11U14和LPC1343对比学习-管脚

2. 修改端点描述符:

LPC1114/LPC11U14和LPC1343对比学习-管脚

3. 修改输入输出变量:

LPC1114/LPC11U14和LPC1343对比学习-管脚

4. 修改其他与InReport和OutReport相关的地方。

5. 编写代码实现接收后原样返回。

6. 试验一下:

LPC1114/LPC11U14和LPC1343对比学习-管脚
 

关键字:LPC1114  LPC11U14  LPC1343  USB 引用地址:LPC1114/LPC11U14和LPC1343对比学习(八)USB

上一篇:完成stm32上HID的应用
下一篇:LPC1114/LPC11U14和LPC1343对比学习(七)SSP

推荐阅读最新更新时间:2024-03-16 14:30

C8051F320的USB调试
  C8051F320带有USB2.0的标准控制器,可以为需要USB接口的设备提供廉价、简易、和便于开发的解决方案。我就是在我的“虚拟示波器DIY”项目中使用了它,感觉不错,今天是第一次接上USB调试,用的固件是它本身开发程序带的例子,有些小的值得记录的经验和体会。   单片机上和USB的接口有四个,分别是VBUS、D+、D-、GND。但是多了一个REGIN接口,我今天的问题就出在这个口的处理上。虽然系统使用了USB口,但是在这之前我不知道这个单片机可以直接通过REGIN口总单片机取电,我就单独用个稳压管从USB取电然后通过VDD给它供电,所以一开始这个REGIN根本就没有接。出现的情况很是奇妙:只有当把仿真器连到板子上,使用仿真
[单片机]
玩转USB HID系列:Linux下使用C语言和libusb开发USB HID
实验环境 ubuntu 16.04 LTS 64-bit gcc,vim STM32做下位机 开发步骤 安装libusb sudo apt-get install libusb-1.0-0 注意:我在网上找到了多个安装教程写的安装命令和我的不一样: sudo apt-get install libusb-dev sudo apt-get install libusb-1.0-0-dev 这些命令安装的libusb我没有探索过,但有一点我知道,也是特容易踩坑的地方: 不同的libusb引用的头文件和函数还有编译时加的库名有细微的区别!!坑死我了 而好多教程都是上来就列代码,这就导致我们在看文章的时候觉得挺好,但是在自己机器上
[单片机]
玩转<font color='red'>USB</font> HID系列:Linux下使用C语言和libusb开发<font color='red'>USB</font> HID
USB 3.0时代如何为接口提速
USB从1996年推出至今已经走过了十几年的历程,最早的USB 1.0速度只有1.5Mbps,两年后升级为USB 1.1,速度也大幅提升到12Mbps,不过,今天此类接口的产品除了鼠标外已近乎绝迹。近年来广泛使用的USB 2.0接口产品,其速度达到了480Mbps,是USB 1.1的四十倍,但是USB 2.0的速度也早已无法满足高清音视频应用的需求。   2012年4月底,随着英特尔发布新一代的ivy bridge芯片组的原生支持USB3.0,更让USB3.0走下神坛。成本的降低让消费者买得起、用得起,普及性大为提升。另外,业界龙头微软将于2012年推出全新的Windows 8,其中装载USB3.0原生驱动程序,这使得USB3.0主
[模拟电子]
<font color='red'>USB</font> 3.0时代如何为接口提速
Pico示波器 USB速率传输瓶颈问题
示波器以高于台式示波器或者同类PC示波器的大缓存容量而著称。在过去的20多年中,历代PicoScope示波器总是能够提供优于任何价位示波器的超大缓存容量。 但是,PicoScope是通过USB连接到PC的,它的超级大缓存容量在很多时候会成为人们考虑的一个问题: 示波器的大缓存是否能够真正使用呢?USB连接是否会成为一个限制屏幕刷新率的瓶颈呢?或者大缓存示波器是否会因为采集或处理的数据量过大而突然卡住或者响应比较慢呢? 有些台式或者PC示波器的刷新率确实比较低,这样就限制了其本身缓存的使用。但是PicoScope不存在这个问题,你可以尽情的使用深缓存存储而不用担心突然卡住或者反应不灵敏情况,下面我们就来说明。 为了说明USB链接
[测试测量]
Pico示波器 <font color='red'>USB</font>速率传输瓶颈问题
USB 3.2规范即将定稿 将比前一代快两倍
  据《Anandtech》报导,USB 3.0 推广单位已发表了一项新的  USB 3.1  更新,来增加目前 USB 的 200% 传输速度,从 10 Gbps 到 20 Gbps。  USB 3.2  已经在最后校稿阶段,而也有向下兼容 (backward compatible)的功能。下面就随网络通信小编一起来了解一下相关内容吧。   据新数据显示, USB 3.2  将保持原有的  USB 3.1  物理层数据传输率与编码技术,传输速度的翻倍是由「双信道」的使用来达成。 目前的第一代及第二代  USB 3.1  只使用一个信道,如需使用双信道,双方设备都需具有 USB 3.1 Type-C 的缆线。   USB 针
[网络通信]
大一统下的USB-C也藏着“几宗罪”
国产手机的快充每年都在大跃进,去年不少机型还在‘一小时’的水平线上,今年最快的产品 iQOO 5 Pro 就直接杀进了 15 分钟。就在我手上也有 vivo 的 44W,OPPO 的 65W,小米的 120W,一个比一个生猛。   但如果进行一次混搭‘拉郎配’,比如让 OPPO 的线充小米,小米充 vivo,vivo 的则插在 OPPO 上。能插上去,也能充电,但都只有一个保底的速度,充电时间以几倍延长。   大一统下 USB-C,是不一样的规格与协议带来的混乱。   USB-C 让线材规格变得极为混乱   在之前写 《苹果还会为 iPhone 换上 USB-C 吗?》的文章中我提道,苹果多年来未对 Lightning 接口
[手机便携]
大一统下的<font color='red'>USB</font>-C也藏着“几宗罪”
合众达电子推出增强型XDS560USB仿真器
合众达电子日前正式对外发布了增强型 XDS560USB 仿真器 ---SEED-XDS560PLUS ,这是合众达自 1993 年推出第一台国产 TMS 320C 3X 硬件仿真器以来推出的第七代仿真器,这将是 DSP 调试工具发展的一个重要里程碑。 仿真器的更新换代是市场赋予合众达电子的使命,为了顺应 TI DSP 新技术发展以及市场对仿真器成本的考虑,我们在 TI XDS560 技术基础上采用了更高性价比 CPU 来实现 DSP 的开发。为了降低 DSP 开发门槛,更好普及与推广 DSP 技术,我们在 XDS560PLUS 新品发布的同时,全国实行 9800 元买一送一让利大活动! 与
[嵌入式]
合众达电子推出增强型XDS560<font color='red'>USB</font>仿真器
效仿欧盟和美国,巴西考虑强制苹果iPhone使用USB-C接口
苹果正遭受很大的压力,因为多地要求在iPhone上用USB-C标准接口取代Lightning接口。在欧盟决定USB-C将成为移动设备的强制性标准、美国参议员也考虑了类似的政策之后,现在巴西可能是下一个迫使苹果iPhone使用USB-C接口的国家。 据Tecnoblog报道,巴西监管机构(Anatel)在充电端口方面对智能手机制造商提出了新的要求。Anatel认为,USB-C可以“为消费者提供更大的便利”,也有助于减少浪费,因为用户可以重复使用他们的电源适配器。    然而,在巴西该要求只适用于智能手机(至少目前是这样)。Anatel表示,对于那些只能通过无线充电的设备,将不需要使用USB-C接口。作为对比,欧盟还将要求USB-
[手机便携]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
  • 学习ARM开发(16)
    ARM有很多东西要学习,那么中断,就肯定是需要学习的东西。自从CPU引入中断以来,才真正地进入多任务系统工作,并且大大提高了工作效率。采 ...
  • 学习ARM开发(17)
    因为嵌入式系统里全部要使用中断的,那么我的S3C44B0怎么样中断流程呢?那我就需要了解整个流程了。要深入了解,最好的方法,就是去写程序 ...
  • 学习ARM开发(18)
    上一次已经了解ARM的中断处理过程,并且可以设置中断函数,那么它这样就可以工作了吗?答案是否定的。因为S3C44B0还有好几个寄存器是控制中 ...
  • 嵌入式系统调试仿真工具
    嵌入式硬件系统设计出来后就要进行调试,不管是硬件调试还是软件调试或者程序固化,都需要用到调试仿真工具。 随着处理器新品种、新 ...
  • 最近困扰在心中的一个小疑问终于解惑了~~
    最近在驱动方面一直在概念上不能很好的理解 有时候结合别人写的一点usb的例子能有点感觉,但是因为arm体系里面没有像单片机那样直接讲解引脚 ...
  • 学习ARM开发(1)
  • 学习ARM开发(2)
  • 学习ARM开发(4)
  • 学习ARM开发(6)
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved