如何在一个月内完成一个USB设备

来源:互联网 发布:金十数据网 编辑:程序博客网 时间:2024/04/29 23:59
如果想学习USB的开发,做一个简单的HID设备是一个很好的选择,你不用去编写驱动程序,因为操作系统都自带了。唯一要做的就是做固件(firmware)。
一个多月前,我开始了USB开发的学习,之前对硬件这东西是知之甚少了。这一个多月里,做PS/2键盘用了一个星期,复习六级用了一个星期,所以专心用于USB开发的时间也只有一个月。
大家都讲一个USB设备的开发周期是一年,一定不是指一个HID键盘。不过USB设备开发的艰难是真的,在开过的过程中,几次遇到问题,几天,甚至十几天都解决不了,那是何等的郁闷。不过,正是这些问题的出现,促使我去看HID标准、FX2的使用说明......促进了对USB标准、USB开发的了解。虽然现在只是开发出一个简单的HID,但我可以说,我对USB协议、HID协议、FX2的使用是比较了解的了,下一步的开发会顺畅很多。
我在这里只想跟大家分享一下我开发经验,让大家的开发再顺利些,起码能开发出一个简单的设备。以后我会补上LINUX下USB驱动开发的相关文章。我博客里还有更多东西(http://blog.csdn.net/manio)。
先列举一下我有的资源:
  CY7C68013A开发板一块
       CYPRESS control pannel
              程序文件夹中有:
FX2的TRM(ENGLISH,使用说明)
    FX2的EXAMPLE(这些很有用,帮助你建立概念)
       HID标准(ENGLISH)
       《USB技术及应用设计》(清华大学出版社 肖踞雄等著)
       《USB接口设计》(西安电子科技大学出版社 张弘著)
       GOOGLE
在第一个阶段,我只看《USB技术及应用设计》,了解USB协议的细节。我个人觉得这本书是很好的,讲得很详细,帮助你建立起一个对于USB的概念,比如说USB的几种传输、什么是包、什么是帧、什么是描述符、USB工作的流程、USB与主机的传输方式,等等。这些东西,在使用FX2开发时可能不能直接用上,但在你遇到问题时,进行测试时,你可以用一些很基本的原理来判断问题出在哪里。因为是带着问题(HID键盘怎么实现)来看书的,所以这一阶段,我已经了解了关于HID键盘的一些基本的东西,比如说键盘使用的是中断传输。
第二个阶段,开始使用开发板,进行实践。不过,在这里我遇到了最大的一个困难,就是不知为何,把CYPRESS的EXAMPLE下载到板子上,只有一个程序能够正确地运行。为了找出问题,我到处发帖,无奈的是,做USB开发的人其实还不是太多,更何况大家使用的板子不同,谁都不知道对方用的板子的情况。我就是在这个时候读遍了手头的文档,照着上面一步一步地做,最终还是运行不了。两个星期之后,我才想起为什么不打电话去给出这个板子的公司问问呢?然后就打了,在他们给了我一个配置方法之后,所有CYPRESS的程序都能在板子上运行了。原来是代码地址配置得不对,下载之后不能运行。那天,高兴得了差点上睡不着觉~~
后来,我阅读了几个CYPRESS的EXAMPLE,了解了BULK传输,了解了用到的一些寄存器,了解CYPRESS给的框架。然后,我就开始把原来找到的一个为EZ-USB写的HID键盘的固件代码改成FX2用的。
本来想,同一个公司的芯片,不就是改改寄存器,再看看有些其他的不同,改过来就是了(其实最后发现还真的是这样)。但这过程中,因为粗心,或者说因为对FX2设备的使用的了解还不是很深,又遇到了一些问题。我把它们分点列在下面,算是FAQ吧。
1.设备无法识别
这可能是因为EEPROM里的内容乱了。如果EEPROM的第一个字节决定设备下一步进行什么动作。如果乱了,设备可能发送错误的信息给主机,那么主机自然也就识别不了设备了。CYPRESS给了一个叫ZAPBIG的程序,用于恢复EEPROM的内容,CONTROL PANNEL的程序文件夹没有。如果谁要,我做乐意发给他。EEPROM恢复后,最后把FX2/EXAMPLE/EEPROM_IMAGE里的那个.IIC文件使用EEPROM下载按钮下载到EEPROM中,这样开发板上电后会自动运行KEIL的DEBUG MONITOR。
2.无法进行IN传输。
这个问题就比较低级了。因为我在ARM IN端点的时间,只写了EPxBCL,而没写EPxBCH。如果只知道一个数的低8位,而不知道8位,如何能确定一个字到底是多少?所以,在ARM一个端点时,端点计数器的值一定要明确给出。
3.当主机已经识别一个设备为HID键盘时,无法进行IN传输。
开始我以为原因是描述符出了问题,所以我把HID的标准给看了两遍,又参照别人的描述符文件,实在是找不出哪有错了。我在开始的时候也想到的端点使用的问题。我是使用EP6来作为IN端点的,但在看到有CYPRESS给的HID设备开发例子中用EP2来做很IN传输端点时,我也没觉得我用EP6作为IN传输端点有什么错,更何况,我也试着用EP2作为IN传输端点过,也是用不了。后来,我在网上看到一个例子用EP1来作为IN传输端点,抱着试试的心态,我改用EP1作为IN端点,奇迹般的,屏幕上出现了abcabcabcabcabc(当时的按钮设置有问题。。:))。至于为什么用其他端点不行,我仍然没有答案。如果谁知道,告诉我!
      
       在我调整好按键后,开发板可以很好的实现一个小键盘的功能了。现在看了,当初碰到的问题很是不值一提,不过总要经历的......
       文中有很多细节没有提到,大家可以GOOGLE一下。或者看看FX2的TRM。
 
       最后,我收藏夹里的链接给大家做参考:
Embeded
单片机
汇编
汇编伪指令注释(单片机新手入门学堂)-伟纳电子 www.willar.com
单片机MCS-51系列指令快速记忆法 - Duuboo's Final Fantasy
C语言
单片机C语言学习
初学者:volatile的应用
C变量的复杂宣言
USB
smth usb数字小键盘
USB开发网
[USB开发网-开发论坛] USB开发论坛
奇怪的问题,control panel已经显示了管道信息了,但是每次传输都没有任何反应
68013 EEPROM烧录问题, 飞狐兄,请教你:)
BusHound5.0使用问题
Specifiction
USB.org - HID Tools
Fx2
10分钟完成一个USB驱动程序
[推荐专业USB网站
USB2.0控制器CY7C68013特点与应用
USB驱动开发驱动程序开发网技术社区 - powered by phpwind.net
USB.org - Tools
嵌入开发网--下载中心-USB键盘特殊功能键的实现
驱动开发网
 
 
 
 
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 小米手机锁屏密码忘了怎么办 小米5x忘记了屏保锁屏密码怎么办 htc手机锁屏密码忘了怎么办 苹果7手机解锁密码忘了怎么办 魅族7plus锁屏密码忘了怎么办 捡到苹果手机不知道id密码怎么办 平板不知道id地址和密码怎么办 红米1s刷机变砖了怎么办 车玻璃被鞭炮炸了黑印子怎么办 出轨的事被家人知道后道处传怎么办 村霸霸占土地弱势村民该怎么办? 户户通没有插卡位置信息改变怎么办 出现重大污染天气时企业该怎么办 电子税务句注册后未绑定企业怎么办 报税的时候PIN码忘了怎么办 购房合同丢失开发商不给补怎么办 租赁合同丢了房东不退押金怎么办 小孩不愿意喝奶粉爱喝乳酸菌怎么办 长安通不记名卡丢了怎么办 农村电表箱里的开关坏了怎么办 建行手机银行登录密码忘了怎么办 手机银行登入密码忘记了怎么办 邮政手机银行登录密码忘了怎么办 建设手机银行登入密码忘记了怎么办 浪琴机械表秒针走的快怎么办 雷达晶萃陶瓷表镀金掉色怎么办 做信息稿部分人员没拍到照片怎么办 二建条件不够考后审核怎么办 学校官网的教务系统忘记密码怎么办 已参加两次高考失败还想复读怎么办 我高考失利想补习学藉怎么办 本科毕业证上是1寸照片怎么办 老婆父母不给户口本迁户口怎么办 深圳夫妻投靠双方再婚的网上怎么办 老人档案丢了要继承公证怎么办 农民把户口迁入城市后宅基地怎么办 离婚了再婚带孩子在上海上学怎么办 上班几天被公司辞退不发工资怎么办 在单位工作被领导边缘化该怎么办 退休人员户口迁到外地退休金怎么办 招工表填写和实际的有误怎么办