jicheng0622

【原创】Kinetis USB模块开发(二)

0
阅读(5230)

    上篇说了下Kinetis USB开发前的所需要作的一些准备,咳咳,虽然准备的时间有点长了,哈哈。今儿就继续说说USB那点事儿,早前就说过USB开发是个慢工细活,所以会分多篇章来介绍,如果真的喜欢做做Kinetis USB开发的话请耐心等等,当然等不及的话可以网上看看相关资料或者书籍(王宜怀老师那本书关于Kinetis的USB介绍的很多,可以看看),我这里权且当作自己的开发笔记写下来,当然如果有人从中受益是最好不过了,希望如此吧,呵呵~

    本USB开发系列既然以开发为主,所以就不罗嗦太多一些最基本的概念了(当然有些概念还是需要提一下的,基础薄弱的博友可以找找相关资料恶补一下),主要内容都以最终的开发为目的,咳咳,觉着还是这样直接了当的好,写起来也过瘾大家看起来也过瘾,嘿嘿,如果中间有疑惑的可以博客里留言,下面就进入主题说说USB开发所需要了解的几个重要的知识点:

    首先浓缩一下USB开发所需要了解的相关概念,USB(即Universal Serial Bus,通用串行总线),是一种外部总线标准,用于规范计算机与外部设备之间的连接和通信,最开始由几个大牛公司(包括英特尔、康柏、IBM和Microsoft等)一块提出来(这里来一个小插曲,当年第一款带USB接口的设备就是苹果公司的iMac电脑,我一直觉着苹果公司貌似就是为超前和创新而生的企业,曾经九一年就曾用第一款商用的ARM芯片生产出了当时业界第一款掌上移动电脑Newton,结果因为太超前而没有市场,现在又以IPhone、IPad和IPod引领者手机、平板和音乐电子领域,不得不佩服一下,而且前几天看了条新闻,从苹果公司走出的员工产出了各种创新型企业反过来跟苹果竞争,怎一个NB了得)。咳咳,说多了,下面继续——USB发展至今已经经历多次版本升级,从USB1.0到USB1.1,再到USB2.0(后来又补充了USB-OTG),到最新的USB3.0,其中USB1.1支持低速(1.5Mbps)和全速(12Mbps)最大输出电流250mA,USB2.0增加了高速(480Mbps)最大输出电流500mA,而USB3.0则达到了5Gbps输出电流900mA(考虑到以后的USB设备供电问题),不过USB通信距离较短,但是不影响它在当今各种电子设备上的如此盛行的应用。

1.上面说了下USB常识性概念,下面就谈谈重点内容,现在还是广义上的说USB,下一篇会着重实际说说Kinetis 的USB模块。USB拓扑结构如下图所示,塔顶为USB主控制器和根集线器,下面接USB集线器,USB集线器将一个USB口扩展为多个USB口,多个USB口又可以通过集线器扩展出更多的接口,不过USB协议中对集线器的层数有限制,USB1.1规定最多为4层,USB2.0最多为6层,理论上一个USB主控制器最多可接127个设备,下面另一个图为我自己电脑上的8个USB主控制器和8个根集线器:

2.完整的USB数据传输过程为:首先由USB主控制器发出命令和数据,通过根集线器,如果有分支集线器的话则再通过它逐层发给USB目标设备,目标设备对接收到的数据进行处理解析之后,返回一些信息或者数据,然后它再逐层通过集线器上传到USB主控制器,最终USB主控制器将数据交给微处理器处理,至于USB主控制器何时启动一个完整的流程则可以根据需要软件控制,另外需要注意的是所有USB的数据传输都是由主机发起的,从设备负责应答(所以开发USB设备的话稍简单些,开发主机就麻烦了);

3.USB协议中,给USB总线定义了4种状态:SE0、SE1、J、K状态。两根线都被拉低(15k欧姆下拉电阻)时的状态定义为SE0状态;两根数据线都被拉高时定义为SE1状态(该状态是非法状态)。当有设备连接到主机,使D+或者D-被上拉(1.5k欧姆上拉电阻),被上拉的线为高电平而另一根数据线为低电平时,这种状态称为J状态(该状态为空闲状态),包被传送之前和之后,数据线上就是该状态。而K状态是两根数据线上的极性都与J状态相反的状态,主机通过K和J状态测试设备是否支持高速通信;

4.在USB传输中,制定了4种传输类型:批量传输、中断传输、实时传输以及控制传输。批量传输用于传输大量数据,要求传输不能出错,但对时间没有要求,适用于打印机、存储设备等;中断传输总是用于对设备的查询,以确定是否有数据需要传输,因此中断传输的方向总是从USB设备到主机,适用于USB鼠标、键盘等设备;实时传输要求数据以固定速率抵达或在指定时刻抵达,可以容忍偶尔的错误的数据,一般用于麦克风、喇叭等设备;控制传输主要用于传输少量的数据,对传输时间和传输速率没有要求,它是USB传输中最重要的传输,只有正确的执行完控制传输,才能进一步正确的执行其他传输模式。

    哎,真是长长的缓口气,越是写到最后越是力不从心,毕竟自己接触USB尚浅算不得专家,还有就是USB开发本身就是个大的系统开发,要这样一篇一篇的写下来真是愁煞我也,没有以前写的那么舒畅,所以从下篇开始就直接从Kinetis开发入手,尽量言简意赅,给出相应的软硬件解决方案即可,真累的慌,休息会儿,未完待续~