原创 [原创]USB学习小记-HID类学习流程

2008-9-7 14:09 4711 4 4 分类: MCU/ 嵌入式

前言


        断断续续的学习了将近三个月,才把USB的HID类搞明白,速度真是够慢的。利用晚上+周末的时间学习自己的东西确实是必要的,不过效率是有点低,以后要更专注一些才行,希望自己能做到吧。


        在学习过程中,刚开始主要参考了周立功编写的一本《PDIUSBD12 USB 固件编程与驱动开发》,后面的学习主要参考电脑圈圈的资料包,包括里面的HID类的英文协议文档,还有一位台湾前辈几年前写的几篇文章,还有网络下有下得到的一些例程。在此感谢各位大虾前辈的分享。


一,学习流程


         1,先大致看下USB1.1中文版的协议(就是网上能找到的翻译版),先了解一下USB1.1的工作流程(可能此时的你会对其中很多内容都很含糊,不过没关系,请坚持!);


        2,选择一款最常用的USB芯片,比如我选择的NXP的PDIUSBD12.有很多使用该芯片的源码可以在上网搜索得到,而且周立功公司为其写了一本书,前面的章节对USB的工作流程作了一个简单而又清晰的讲解,而不致让人陷入协议的海洋里;


        3,有了对USB1.1协议的大致了解,选好了开发的平台(我刚好手上有一块周立功公司的EASEARM2200的开发板,上面有D12)之后,先跑一下附带的例程(此开发板配套的例程是基于UCOS2系统的,刚开始用它来参考肯定晕)。没有能跑的例程,那就上网找一下经验证的例程,比如电脑圈圈在EDNCHINA建立的USB学习小组里有很好的几个例程,而且都是基于51+D12的,所以极具参考价值。我是参考周立功公司出的那本书来学习的,电脑圈圈的例程与此书的例子书写风格较相似,所以可以互相参考。如果也没有开发板,那可购买一套电脑圈圈他们搞活动的套件或者直接用51+D12自己搭一下,这样就可以直接用电脑圈圈写的例程了,可以避免走很多弯路。


        4,有了例程的直观印象后,此时可以上BUS HOUND5.0了。此软件可以观察到USB设备与主机(PC)之间的通讯数据,特别那11个标准请求的理解,通过此软件的观察,可以更好理解其相互之间是如何完成这个握手枚举过程的。


        5,好了,有了之前的准备工作,是否打算自己做一个设备了呢?嗯,如果学习是从易到难,那效率是事半功倍。USB分为好几个大类,最简单的类是HID类,即人机接口类,那可以从此入手。最常见的人机接口类设备就是鼠标键盘了。所以我们可以动手制作一个鼠标或键盘作为第一个实践例子。


       6,在真正动手写程序之前,还需要加深对USB枚举过程的理解和熟悉,特别是其流程。而其中最重要的就是对11个标准请求的理解了。枚举的过程就是设备对主机发过来的这些请求进行正确响应,告诉主机,“我”是一个什么样的设备,各种属性均是什么,完成枚举后,主机才能根据“我”的属性,对“我”发送过去的数据进行正确的解释。


       7,OK,那开始写程序了,我们选择做一个键盘作为第一个例子。用D12的朋友,在阅读过D12的数据手册后,参考电脑圈圈的例子,看其最底层的驱动是如何写的,先把这部分的驱动完成,再谈协议的实现。


《1》USB器件最底层的驱动编写;


《2》11个标准请求函数的编写;


《3》6个HID类请求函数的编写;(此6个函数很简单)


《4》USB中断部分的编写,可用查询或中断法,根据D12的中断寄存器的值,去调用11个标准请求函数;


《5》编写描述符;键盘要用到的描述符包括:1,设备描述符,2,配置描述符,3,接口描述符,4,HID描述符,5,端点描述符,6,报告描述符,7,字符串描述符。其中4,6为HID类专有的描述符,7是可选的。


        当完成上面5个部分的函数编写后,如果编写正确,如果你对枚举流程理解正确,如果描述符没错(可直接使用网上的例子的),那么此时应该能够枚举成功了,如果不正确,请分部检查以上5个部分的函数。


        8,完成第7步后,能枚举成功,可以说是成功一大半了。此时就考虑如何发数据发出去即可。对于HID类设备,特别是鼠标键盘这类的,只需你能按照报告描述符所描述的格式,把数据发送过去,那么PC端即会对你所发送的数据进行响应了,也就是你的键盘能输入数据了。


        整个HID类的,对于键盘鼠标这类设备的开发即可算是结束了。虽然步骤就是那么多,不过想最后成功,需要参考大量的资料,最重要是是英文的HID协议,里面有对描述符的详细讲解,还有例子。还有周立功公司的那本书,虽然后面的看不懂也暂时用不上,不过前面的结合D12这个芯片还是很有参考价值的。其它的书可以先不看吧,觉得没看也没什么。


       下一节再说说键盘和鼠标的报告描述符的意义和理解。


        欲知后事如何且听下回分解,哈~


                                                                                                       桂电飞天鼠


                                                                                                       2008.09.07


     附注:值得一看的参考资料(除例程源码外) 


1,Device Class Definition for Human Interface Devices (HID).pdf


2,HID Usage Tables.pdf


3,USB之人性化介面装置的报告描述元(1)(2)(3)三篇(林锡宽)


4,《PDIUSBD12 USB固件编程与驱动开发》


5,电脑圈圈的资料包以及在EDNCHINA上发布的例程及文档


6,USB学习笔记.doc


7,USB 项目技术报告,USB通讯若干问题探讨,对USB协议层的深层剖析(北航frank)


8,USB 基本知识(无名,一问一答形式的)


 rar 


在EASYARM2200上实现的简易键盘例程                                                                                                

文章评论0条评论)

登录后参与讨论
相关推荐阅读
mozhenhua_801426275 2014-08-07 11:23
DM9161CEP网线插拔的识别
    给公司搞了个项目...
mozhenhua_801426275 2009-03-01 15:07
[原创]FAT16文件系统实现关键流程
这个小结是做一个修改型的小项目,为了学习了解FAT16文件系统而写的,记录一下。//**********************************************************...
mozhenhua_801426275 2008-09-07 17:36
[原创][源码]USB多媒体键盘+混合HID鼠标键盘
--------所有USB相关源码均基于easyarm2200学习板                电脑圈圈准备出书了,俺从他写的文篇里收获良多,所以这里也不再打算写关于HID类的文章了,直接给出几个...
mozhenhua_801426275 2008-09-07 16:56
[原创]USB学习小记-HID类键盘的报告描述符的理解
二,键盘的报告描述符的理解       在参考别人的例程实现了键盘跑起来的时候,你这时候应该会想问的是,为什么描述符要这样写呢?       好的,我当初也有同样的疑问,那下面来简单说说键盘的报告描述...
mozhenhua_801426275 2008-04-02 23:49
开场白
    选了很久,最终还是在这里开博,希望能够长期稳定下来。    记录一下工作生活中的感受与想法。    多一些思考。...
广告
我要评论
0
4
1
2
3
4
5
6
7
8
9
0
广告
关闭 热点推荐上一条 /6 下一条