usb

来源:互联网 发布:java程序员发展前景大不大 编辑:程序博客网 时间:2024/04/30 04:20

最近在c8051f340上实现usb ccid设备通信,以学习usb知识,费了好大的力气才彻底搞定,简要说说过程。

开始时比较固执,从0开始,看了一会儿手册,再按仿照例程的代码进行初始化,同时参考一个现有的其他芯片的代码的架构,试图融合两套代码的优点,“架构采用现成的,代码采用例程的”,每一步都要和手册进行比较,但是结果并不理想,原因有两个。

第一是两个芯片的差异比较大,现成的架构不太可能完全不动的移植到另一个平台上,因为同时参考两套代码,状态很乱,哪个的优点都没学成,无力再调试,只好另起炉灶了。
第二个是usb比起以前的串行通信,还是要复杂一点,有时移植一部分代码看不到效果,还会引起驱动层的反应不良,机器在这一阶段就蓝屏了好多次,后来插上设备几秒就迅速拔下来,避免机器重启。

断断续续的经过了近两个月以及两个版本之后,第三个版本基本完全采用官方提供的例程,不再同时参考两套代码。只做代码风格上的修改,每一步修改都保证usb的效果不变,因为对芯片的usb部分也稍微熟悉了,对usb规范也懂了皮毛了,这次修改的效果很明显,很快一个usb ccid设备就可以通讯了,但是........

它不稳定,经常憋死,不能在办公室环境中稳定通信的设备没有价值。

这之后又经历了一个第四版,憋了好几天,请教了好几个高手,最后发现是多设置一个寄存器导致的,修正了就完全正确了。

usb知识是基本功,usb通讯在大部分情况下可以取代串口通讯了,学usb要多问,要个人带一下。