完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
近来USB风开始吹大了,驱动开发网上的USB论坛一太堆菜鸟喊着要USB的资料。论坛也不时
有人求串口转并口的USB程序。 但传说中的周X的USB板还需要4XX元的高价。被公开出来的USB资料也不齐全,没有一个公 认的硬件平台,让菜鸟得到资料也无从下手。 基于以上不是原因的原因,并且为了促进虾坛繁荣安定,提高众虾素质,扩大DX板销量, 以便丁丁有更多资本投资到论坛服务器上,进而让更 多爱好者有学习交流的机会,提高电子人才的竞争力,加大我国IT行业发展,提高人口素 质,惯切3个db的指导思想。。。。 (只见砖头突然从四面八方飞来~~~啊~~~) 本菜艰难地从砖头堆爬起,高举起丁丁的DX板,大力高呼“要学复杂协议,先从USB学起 ~~~~” (又是一轮砖头。。。) 下面的是本坛的振坛三宝之一,DX板!! (振坛三宝就是仿真器,DX板,汉显模块) 说到这个DX板功能就多着了,一般搞单片机1,2年的家伙想要把上面所有资源都发挥的淋 漓尽致是不容易的。DX板的终极资源就是后面的没有 焊接的D12和8019。他们对应的也就是现在流行协议中的USB和TCP/IP(如果还有CAN那就天 下无敌了)别以为这两个东西是放着看的,实际上都 能调通。 今天或以后的一段时间里,本菜都将为大家一一奉献上DX板的USB全功略(有代码的哦,不 过PC端的代码暂时只考虑给买了DX板的人)。 由于本人的DX板是前期大LCD的,和后期的DX板区别在于USB的INT脚接法和LCD屏型号不 同。 1。 第一次接触USB是因为大学的毕业设计,当时是弄的很头痛,后来无意间在网络上找到了徐 光宇老师的一份USB资料,然后周X公司也出了本D12 的书,之后自己买了本USB协议。当时就凭这三件法宝弄懂了USB的。不过先说明一点,一 般说的USB都是在说DEVICE的,就是从设备,而不是主 设备。而且本文是以D12为主的讲叙USB开发流程。 USB协议其实算比较复杂的了,开始搞的时候的确一头冒水,不过坚持就是胜利嘛,把资料 和程序多看几次,反复看几次,基本就知道是什么一 回事。然后很快你就会觉得慢慢懂了,再回头看以前那本看了就想睡觉的USB协议大全,居 然越看越觉得有味道:)由于USB一直是我业余的搞 作,没有实际的市场项目经验(DX板是否属于市场项目呢??呵呵),所以某些地方说不 清的话,还请其他大侠门指点。 初学USB你还是老实地看协议,但不需要多,只需要大致了解什么叫枚举,和枚举的应答顺 序。枚举的过程大家可以看周X的那本D12的书。我大 致说说,其实从USB插上PC开始,到安装驱动然后能用,中间需要很多应答的,主要嘛,就 是PC分配个地址,问问你这个什么设备,,再问问有 多少个端点,每个端点用来干吗等等的一大堆问问答答,如果问问答答都OK了,那么你这 个USB设备就基本能用了,以后收发数据等的都比较简 单了。 至于怎么知道PC问什么,然后你又怎么答呢?这个你就得看协议了。一般枚举中都是用控 制端点来传输数据的,例如PC发个包包过来,D12就会 有个控制端点有数据的中断,其实就是D12的INT脚变低,然后引发单片机中断(当然要你 开了单片机的INT 低有效的中断啦),在我们的单片 机程序中,就收到个INT中断,要知道这个是什么中断?你就得读D12的中断寄存器。如何 读?你看看D12的DATASHEET就是了,其实D12是用总线 方式的(也有不是总线方式的,其实两种接法),接到单片机后用法就好象驱动8279, 8155那样的总线访问。读中断寄存器后就根据读出来的 数看看是什么中断,其实读出来就那么2个字节,而且第二个字节只有1位可以用,就是DMA 操作已完成的中断。根据字节中的位判断哪个功能有 中断,然后就去处理就是了。 有时候是USB总线复位,有时候是控制端点IN,控制端点OUT,等等的中断。每个中断都有 相应的处理函数的。这里还要说明下之前的IN和OUT, 其实是方向,这个IN 和OUT都是针对PC来说的,就是IN包是D12到PC,OUT包是PC到D12。对 于其它USB芯片都这样说方向的。 2。每个USB包都有帧同步,编码技术,CRC校验等涉及通信技术多于编程技术的东西,但这 些东西你看看知道有这么回事就是了,因为对于大多 数USB芯片来说,如D12,他收的时候都已经帮我们解好码,校验好的了,我们就不需要理 会什么,反正从D12读出来的数据包就是我们想要的, 没有一点多余的东西。同样地,你发的时候它自然也会弄好编码好然后发出去,没有一点 缺少的东西。 3。上面说了,PC在枚举中总爱问你的USB设备的,他问的这些东西我们叫问题,其实术语 叫请求。但请求并不是都是PC到设备的,有些是设备 到PC的。请求都是通过控制端点来传输的,D12的话控制端点就是他的端点0,1。数据包如 果是设备请求包,也就是SETUP包,它会在控制端点 上传输的,也就是包头后的地址后的端点号不是1,就是0。然后后面的一个DATA包跟的数 据就是请求的内容。如果是用户数据,也就是我们主 动想传输的东西,例如利用USB传个字符到DX板上等的这些就是IN,OUT包,包里面包含了 端点号,然后下一个DATA包就是用户的数据了。对应 是哪个端点,D12都会来个中断,然后你就读D12的寄存器,知道是不是端点有数据,是哪 个端点有数据,再利用相应的底层函数读出数据,再 处理。 4。PC问了问题(请求),我们当然得来个回答,这里的回答一般就是描述符了。一般是, 也就是特殊不是,有时候例如来的是厂商请求,那么 我们回答的就是对应的东东,而不是什么描述符了。例如来了一个获取版本的厂商请求, 那我们回答的就是版本号。为什么是获取版本号的请 求?其实是人为定义的而已,没有一个固有的标准,所以你可以利用你的厂商请求来传输 用户数据。此乃题外话:) 说回描述符,这个你就得看协议了,为什么USB接口的设备包罗万象呢?有HID,USB硬盘 的,打印机扫描仪摄象头,甚至音响~~~??就是因为 他有描述符这个东西。描述符是一大堆的数据(反正都是数字游戏了),PC通过读取描述 符,就可以知道你这个是什么东西,有什么特性了。 具体请看USB协议吧。周X的那本书也有写到描述符,但它里面我觉得刻意漏掉了类(HID) 描述符和报告描述符这两个比较爽的描述符,(为什 么我说比较爽?你想象下如果能把DX板变成一个USB鼠标来玩,并且不用装驱动,插到有 2000以上的电脑就能用的话,你说爽不爽?要做USB鼠 标,你就得了解这两个描述符咯,不过类描述符比较难懂-_-!..)所以嘛,这些大家还得 老老实实看协议咯,呵呵。。 好了,其实上面说的都是笼统的东西,如果没看过协议部分的家伙就想单靠这么点文字看 懂的话是不可能的,其实我也是在夸夸其谈而已。骗 骗分数嘛:)按上面所说的,我提出了一个学习过程,当然有效无效见仁见智了: 如果你连什么叫USB的端点,什么叫批量,控制传输等东西都不知道,那你先回家看书,第 一页都没翻完就想这自己精通变神仙是不可能的。 如果你看的有点闷了,就自己大概想想枚举的过程,每一个描述符都大致了解一下。 打开周X的D12,给我完完全全看懂那个16页的表2.2和2.3,明白透设备请求的格式(TMD那 个表画的真难看,当年我用了2天时间就看这个表 ~~~~) 看懂D12的接线图,其实书上说的我也糊涂,你们有DX板的话就好好看看那个原理图的接 法,丁丁可是高手哦,第一次做D12就完全接对了(台下 老丁:-_-#!!!你你你。。。) 看D12的寄存器吧,好几个,其实就象8279,8155那类东西嘛,里面都有寄存器的,只是 D12的比较多一点。各自的读写寄存器的底层函数可以 看周X的书。 写枚举部分的程序?不用你写咯,这么烦琐,拿来就用嘛,咱们新时代的人是站在巨人的 肩膀D~~ 嘿嘿,其实基本就这么多了,大家先看着办。 我买的两本USB书是: 《PDIUSBD12 USB 固件编程与驱动开发》 周立功 等编著 (才不信是他著的,其实代码都 是非力谱先公布的) 《USB外围设备设计与应用》 许永和编著 健莲科技 改编 (红色的书,这本东东一开始 看的时候相当头晕,但后期才发现大意义重大啊~~,书是针对CY7C63单片机说的,但其实里面内容相当GOOD) 我的USB开发工具: DX大虾学习板 |
|
相关推荐
|
|
{:1:}
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
4016 浏览 0 评论
8602 浏览 0 评论
5991 浏览 0 评论
4154 浏览 1 评论
5225 浏览 0 评论
请问一下qspi mtsr引脚传输一次32bit后引脚不拉低怎么解决?
438浏览 2评论
688浏览 2评论
4813浏览 2评论
最近UJA1023开发遇到问题了,各位大神有谁知道可以替代这颗芯片的
613浏览 1评论
851浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 10:31 , Processed in 0.653247 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号