url

USB 重要文章:

http://blog.csdn.net/myarrow/article/details/8279156

http://www.docin.com/p-64670396.html

http://blog.chinaunix.net/uid-21977056-id-1806929.html

http://wenku.baidu.com/link?url=dGfd0evF4wvd56_RJCH_Z_MwdUviaHz22A9a1JV6KsbvN837spM_EaR2hKnC_8CEKvSB8scXe0Fik53dL-MSB_zk81vb3wQHfA7JmDAhbOO

http://blog.csdn.net/leo_wonty/article/details/6721214

http://download.csdn.net/detail/dqq89/3857713

http://www.cnblogs.com/god_like_donkey/archive/2010/09/29/1838659.html

http://blog.chinaunix.net/uid-24500033-id-121180.html

http://wenku.baidu.com/link?url=vKMPItQQ6f1Tv9DBLKuQHPvOahl8FSP0TOX6pxFgRDsM5yoQmVnfD5suW7RHONE5BB3P3F4r5bWxpjZD5vwTKuvfL6C6QYyZ1QvvKkgRhcm

http://www.docin.com/p-64670396.html

http://www.baidu.com/s?word=usb%E8%AE%BE%E5%A4%87%E6%8F%8F%E8%BF%B0%E7%AC%A6%E5%AE%8C%E5%85%A8%E8%A7%A3%E6%9E%90&tn=95953860_hao_pg&ie=utf-8

http://blog.csdn.net/myarrow/article/details/8279156

http://www.hep.by/gnu/kernel/usb/


USB 原理:

http://blog.sina.com.cn/s/blog_8bbf650701013mub.html

http://blog.csdn.net/kaizi318/article/details/7976389

http://blog.sina.com.cn/s/blog_4b4b54da01012znk.html

http://blog.sina.com.cn/s/blog_3d6cdc390100j62b.html

http://www.21ic.com/app/control/201111/97988_2.htm

http://blog.chinaunix.net/uid-12933827-id-2910462.html

http://blog.csdn.net/xiangpingli/article/details/7318654

USB driver:

http://blog.csdn.net/voice_shen/article/details/7396769

http://blog.chinaunix.net/uid-26849197-id-3487095.html

http://blog.chinaunix.net/uid-25909619-id-3381916.html

http://blog.chinaunix.net/uid-25885064-id-3215316.html

http://blog.chinaunix.net/uid-10386087-id-2959067.html

http://blog.csdn.net/weiqing1981127/article/details/8215708

http://blog.csdn.net/myarrow/article/details/7022973

http://www.360doc.com/content/12/0504/19/8363527_208666082.shtml

http://linux.chinaunix.net/techdoc/develop/2008/07/22/1019962.shtml

URB:

http://blog.csdn.net/lidaqiang99/article/details/6591024

http://blog.csdn.net/lidaqiang99/article/details/6591024

http://blog.csdn.net/fudan_abc/article/details/1860387


BLUE Z HID

http://blog.csdn.net/walkingman321/article/details/7216502


kernel open source :

https://www.kernel.org/doc/Documentation/usb/anchors.txt

http://oss.org.cn/kernel-book/ldd3/ch13s06.html

http://www.usb.org/developers/defined_class/#BaseClassE0h

http://www.bluetooth.com/Pages/beacons-retail-location.aspx

http://tali.admingilde.org/linux-docbook/usb/re03.html

http://lxr.free-electrons.com/ident?i=struct+usb_driver

https://www.usb.org/members_landing

https://msdn.microsoft.com/en-us/library/windows/hardware/hh406256(v=vs.85).aspx

USB 固件:

http://d1.amobbs.com/bbs_upload782111/files_13/ourdev_426983.pdf

http://download.csdn.net/detail/baqihuti525/4278103#comment

http://download.csdn.net/detail/gavincf/6456545

http://wenku.baidu.com/link?url=h5f32eeUF8inVJBrE-BO8Ly8wuIp7oPbjF1CH2KbJ816CPSxq3GjrZCoviyIuFVubMnM8cnzY4K3q71MgKTaPjkcbReJOFxNOy1gyP5Ha9O

设备描述符:

http://bbs.ednchina.com/BLOG_ARTICLE_1982579.HTM

http://www.baidu.com/s?

usb设备描述符完全解析


工作队列:

http://www.cnblogs.com/wwang/archive/2010/10/27/1862202.html



HCI:

http://fanli7.net/a/bianchengyuyan/C__/20130123/296114.html

http://wenku.baidu.com/link?url=eBpPXH97Ere8q4zqg81nH6S9sJlSeq5uQF3aCtxD6AsbHorM5zA1KaKElBVGFbJRYtzdj0I8__Uu37ig3GgfUpEYOfF5JnmsxoeelUQoUfW

http://blog.csdn.net/lizzywu/article/details/7514260

http://blog.csdn.net/zhang20072844/article/details/6610485

http://blog.sina.com.cn/s/blog_602f87700100e5q9.html


我理解的USB接口通信的几个关键点


1、硬件连接和数据传输的特点


(1)USB设备接口共有四根线:电源线VBUS,数据线D+、D-,地线GND。


采用的是差分数据传输。两根线有四种状态:低低、高高、低高、高低。低高、高低是正常数据传输时所用,低低是设备断开状态,高高好像是USB的复位状态。(这是我的理解,不一定正确吗,看过书以后再更正。)


(2)USB传输一般采用NRZI(非归零反相编码)编码方式:电平翻转表示0,电平维持表示1。


(3)在USB设备端,有一个SIE(串行接口引擎),对差分线上的BIT流进行解释。


2、USB设备检测的原理


在主机端,D+和D-两根线都被下拉电阻拉到了低电平。若是在设备端差分线上提供上拉的话,可以被主机检测到。比如在 D+线提供3.3V电源、1.5K左右电阻,则该设备被识别为“高速设备12Mbps”;如果在D-线提供上拉,则识别为低速设备(1.5Mbps)。


 


3、USB通信的主从原则


一般的USB主机和设备之间遵循主从通信的原理,每一次的数据传输都是又主机发起。


如果主机要输出数据,则先发一个握手包,通知设备。然后发送数据,设备接收到数据后,再发送一个确认包。


如果主机要输入数据,也是先发一个握手包,通知设备。设备然后将准备好的数据发送给主机。主机再给设备一个确认包。


 


4、USB数据通信的最小单位


USB数据传输的基本单位是一个包。以异步串行通信对比:它的一个传输单位是起始字节、N个数据位、奇偶校验位、停止位。USB传输也差不多,只是它称为包。


包的基本组成包括:同步域、包ID、数据、CRC校验、包结束符。跟异步串行通信本质上是相同的。


同步域用来告诉对方一个包的开始,并且利用NRZI编码规律的特点,可以同步通信双方的时钟


包结束是总线的特殊状态:低低状态,我前面提到过。但与我原来的想法有出入,是“低低”状态表示“包结束、复位”等特殊状态。


包ID用于指明该包的类型(主机令牌、数据、握手)。


对于包的理解有一个基本的理解就行了,因为包的处理是由SIE完成的。它会给用户提供一些包处理过后的标志,比如数据传输是否正常完成、主机发出了复位信号等等,用户能够理解这些标志就可以编程了。


5、USB数据包类型与USB的基本事务


USB接口的工作是由主机和设备通信来完成的,所以它所做的每一个基本工作都要由双方输出不同类型的数据包。USB的一个基本工作我们称为事务。


一个事务的基本组成最起码是三个包:由主机发令牌包,表明要干什么;紧跟着一个数据包(可能是主机输出、也可能是设备);收到数据的那一方发送一个握手包(表明它有没有收到、数据对不对)。


令牌包、数据包和握手包的含义比较好理解,还有一类特殊包,现在就先不研究了。


 


6、USB的控制传输


USB有四类传输过程:其中批量传输、终端传输、等时传输比较类似,每个传输就是一个数据输出或数据输入事务。主要用于USB主机与设备的数据交换。


比较复杂一点的是控制传输。


控制传输可以分为三个阶段:建立阶段、数据阶段和状态阶段。


建立阶段是一个建立事务:主机发一个SETUP令牌包、一个数据包,然后设备必须通过ACK握手包回应。


数据阶段可以是多个基本数据事务。这个阶段的数据传递只能是一个方向,要么全是输入事务、要么全是输出事务。


状态阶段是主机对数据传输阶段的结果进行检测:如果主机读了数据,则会使用一个数据输出事务表明自己是否正确收到了设备的数据;如果主机输出了数据,它要求设备返回数据接收的情况。实质上是一个与数据阶段传输方向相反的一个数据包。


 


7、USB的地址和端点


USB主机是通过地址和端点具体与USB设备交换数据的。即每一个包都是针对具体的地址、端点。


USB设备挂在总线上,只要总线上有数据的传输,它都能检测到。但是只有令牌包中指定地址 与本设备地址相同时,SIE才会将该数据接收进来,并对包中指定的端点进行状态确认。


特别要注意的是:USB设备的地址是可以动态分配的。在复位后,它使用地址0。在用地址0与主机做协调后,可以分配到新的地址。然后就可以使用新地址与主机通信了。


端点实际上是一个数据缓冲区(我的理解)。它与USB传输类型对应,每种类型都有输入、输出端点。比如控制传输对应有控制端点两个,一个输入(主机想要获取设备的控制传输数据时,就从这里取,当然设备先要准备好),一个输出(主机在控制传输阶段传输给设备的数据,就会由SIE写入这个输出端点,然后USB固件程序就可以从该端点读取主机来的数据进行处理。


 


8、USB的描述符


我觉得它实质上就是一个具体设备所有属性、配置、能力等等所有信息的综合。这是一个将数据与数据处理过程分开来的典型例子。


设备描述符:主要指明设备的类型、所使用的协议、VID、PID、设备版本号等。一个特别重要的信息是:控制传输输入端点0支持的数据长度。


其它描述符性质差不多,我这里就不再一一叙述了。

other:

http://blog.csdn.net/chyuanzheng/article/details/7945731

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值