usblinux系统开发
LINUX USB 系统
⼀、简述: (3)
⼆、 USB连接的基本知识 (6)
三、 OTG控制器 (8)
OTG的基本概念 (8)
Linux下的OTG架构 (10)
四、 EHCI控制器 (11)
EHCI的基本概念 (11)
Linux中EHCI控制器驱动的架构 (14)
五、 Linux中的USB设备驱动 (18)膜结构遮阳雨棚
USB设备的识别过程 (30)
六、 USB设备的调试 (30)
1、简述:
USB出?豪门,?问世便有IBM,Microsoft,compaq等前呼后拥,不红实在是没有道理,以致于连三岁??孩都知道买游戏?柄要买USB的。
USB名?这么?,但USB是什么呢?要是想份写驱动的活谋?,常会被问到这样的要求:“给我讲讲USB。”
论你是谁,遇到这样的问题?定要扭头就跑,不然?定被雷死。
USB使??便,硬件设计也简单,但开发?员还是谈USB?变。为什么呢,因为USB简单?便的外表下?是?个?分复杂的USB系统。简单?便和成本低廉的代价就是逻辑上的复杂,这?的逻辑指的就是USB协议。USB的协议之多之杂在IT界内绝对是史?前例的,数据传输的协议,控制协议,主控制器协议,设备相关的协议,硬件接?的协议,这些都要和USB扯上关系,都称??是USB协议,以?于有很多?雄?勃勃的研读了?年的USB协议才发现所研读的内容和??要想了解的东?扯不上关系。
在我看来,USB的成功主得益于两点:
先是集成电路技术的发展,使得控制器能集成更复杂的逻辑(USB协议)的同进价格还能降下来。?个产品要想推?开,?先是要?够便宜,要让?众能买得起?得起,其次是功能强?,集成电路技术的发展给了usb这两个条件。
但集成电路的发展带来的好处也被USB同时代的其它接?标准(如1394)所共享,USB绝对并成本最低,性格?最?,协议设计的最完美的接?,但USB为什么能独霸天下呢?是中国?的都知道,爹妈很重要。这就是USB之所以能成名的第?点,出?好。
有了Intel,IBM,Microsoft,compaq这好爹妈的?持,就算是阿?也能坐上皇位,向况USB不是阿?。这好爹妈运强?的影响?,给USB制定了?系列的标准,要想跟他们混就得尊守这个标准,其它团体也是敢怒不敢?,屁踮屁踮的就奔着USB去了。
USB系统概述
先,我们来回答?下?试官的问题,USB是什么,usb就是Universal Serial Bus(通?串?总线)。什么是Universal Serial Bus 呢。这个?语?就难以表达了,请看下?两张图:
少许的艺术细胞加上平时的使?经验就能理解第?张图的含义,?个USB主机可以通过hub 可以连接许多的从设备,组成像树?样的结构。
关键是第?张图,详细的描述的linux USB系统的??板块,这种结构基本上适?所有操作系统的USB架构。
可能是USB这三个字?看起来?较酷,稍和USB沾边的开发?员都会吹??做过USB开发,特别是那些介绍USB的垃圾书,从头到尾扯了?通他也没有告诉读者他讲的是USB技术的那?部份,在USB的整个架构中的作?。
先,USB分为主从两?体系,?般??,PC中的USB系统就是作主,??般的USB?标,U盘则是典型的USB从系统。即使是?个USB?标,也不要?看它,它其中也有很精深的USB技术。作为USB?标的第产国,我们实在没有什么好骄傲的,如果从零开始,花个?年?年我们国家也不?定能研发出?个像样的USB?标。
先说控制器这?块,我们?少要开发出USB的主控制器与从控制器,?标是低速设备,所需
的是最简单的?类从控制器。主控制器则复杂得多,因为太过于复杂了,所以就形成了?些标准。在?
个复杂的系统中,标准的好处就是可以让开发者把精?集中在??负责的?块中来,只需要向外界提供最标准的接?,?免于陷于技术的汪洋?海中。
USB主控制器主要有1.1时代的OHCI和UHCI,2.0时代的EHCI,这些标准规定了主控制器的功能和接?(寄存器的序列及功能),对我们驱动?程师??,这样的好处就是只要你的驱动符合标某?标准,你就能轻?易举的驱动所有这个标准的主控制器。要想把主控制器驱动起来,本来是?件很难的事情,估计全球的IT?程师没?个能有这样的?平,但有了标准,我们就可以轻松的占有这?个??平的IT?程师的劳动成果。
主控制器和驱动有了,我们还需要USB协议栈,这就是整个USB系统的软件部分的核?(有的资料中直接把其称为USB 核?),USB协议栈向使?USB总线的设备驱动提供操作USB总线的API,另则管理上层驱动传下来的的数据流,按USB主控制器的要求放在控制器驱动规定的位置,USB主控制器会调度这些数据。
我们这??到了调度这个词,USB主控制器的调度其实和?车的调度CPU的调度有相似之处,物理上的通路只有?条,但USB中规定的逻辑上的通路却有许多条,有时?个设备就会占??条逻辑通道,?USB系统中?会有多个设备同时运?。这就好像是只有?条铁路线,但来来往往的?车却有许多,USB主控制器的作?就是调度这些?车,?USB协议栈的作?则向上层的USB设备驱动提供不同的车次。
有了以上的这些模块,才能为USB?标设计驱动,这?点上ps/2?标的驱动和USB?标的驱动结构基本?样,只不过我们的数据通路是USB总线。
USB系统甚?把设备驱动都给标准化了,只要是?持USB的主机,就可以?持任何?个?商的USB?标,任何?个?商的U盘,只要是被USB系统包函的设备,只要这些设备?持相应
的标准,就?需重新设计驱动?直接使?。
下是简单的列出了USB设备类型,理想的情况USB系统要对这些设备作完整的?持,设备也必须符合USB规范中的要求。
1-audio:表⽰⼀个⾳频设备。
2-communication device:通讯设备,如电话,moden等等。
3-HID:⼈机交互设备,如键盘,⿏标等。
6-image图象设备,如扫描仪,摄像头等,有时数码相机也可归到这⼀类。
7-打印机类。如单向,双向打印机等。
8-mass storage海量存储类。所有带有⼀定存储功能的都可以归到这⼀类。如数码
相机⼤多数都归这⼀类。
9-hub类。
双球中奖规则详细11-chip card/smart card。
13 --Content Security
14--Video (Interface)
15--Personal Healthcare
220--Diagnostic Device
224--Wireless Controller (Interface)
239--Miscellaneous
254--Application Specific (Interface)
255-vendor specific.⼚家的⾃定义类,主要⽤于⼀些特殊的设备。如接⼝转接卡等。
理解了这两张图,基本能应付⼀下⾯试官了,但我建议还是随⾝带着这两张张图,因为USB 系统确实太复杂,⾔语难以表达,很可能他说的USB和你讲的USB压根就不是⼀个东西,只是都和USB相关。
但这两张图也不能回答所有的问题,随着USB技术的发展,USB系统中的⼀些不⾜也逐渐被承认,OTG就是这种情况下的主要产物。
现在市⾯上有些设备(⽐如⼀些MP4)即能插上电脑当U盘使,也能被U盘插上读取U盘。这样的设备在USB系统中是作主还是作从呢?
这就是OTG(On-The-Go),即可以作主也可以作从,传说中的雌雄同体。这主要是为嵌⼊式设备准备的,因为USB是⼀种主从系统,不能⽀持点对点平等的传输数据,OTG正是在这种需求下产⽣的,OTG不仅⽀持控制器的主从切换,在⼀定层度上,也⽀持相同设备之间的数据交换。
2、USB连接的基本知识
USB信号线
信号线名称颜⾊
1 Vbus 红
2 D- ⽩
3 D+ 绿
4 GNU ⿊
shell(⾦属壳)屏敝层
有了上⾯的表,剥开USB线看看花花绿绿的信号线都是有来头的,这些⾊彩也是USB规范中的⼀部份。
USB线览倒没有什么名堂,倒是USB接插件在这⼏年搞出不少事。如何安全过马路
随着USB OTG技术的发展,对接插件有了新的要求,STD标准的东西尺⼨太⼤,于是有了MINI标准,但有⼈觉得MINI标准的接插件还是太⼤,⼜忽悠出mirco标准,⽽且MINI和mirco 标准的接插件由4pin变成了5pin。
⼀般⽽⾔,靠近host⼀则的插头和插座称作A,靠近从设备的则称B,在OTG中,A则是指供电⽅。
2023一月一号高速免费几天Connector Color
mirco/mini-A receptacle White
mirco/min-AB receptacle Gray
mirco/min-B receptacle Black
mirco/min-A plug White
mirco/min-B plug Black
mirco/mini标准的接插件都是5pin,除了传统的vbus,D+,D-,GNU外,还多了⼀个ID pin。
细的的⼈都会发现,mirco/mini的接插件定义是5 pin,但线缆的信号线却是4根。这就是OTG的⽞机。
OTG规范中要求设备即能作主,也能作从,要实现这个功能,必须有寻⼀种⽅法来区别设备是作主还是作从。OTG的作⽅就是增来⼀个ID pin来判断设备是接⼊设备的是主还是从,按OTG的要求,同时作主和从的设备要使⽤mirco/min-AB receptacle,这样可以接⼊A型的plug,也可以接⼊B型的plug。
在a型plug中,ID线与地线相连,这样A型plug接⼊时ID线就被拉低,OTG控制器切换到主模式,当B型plug中,ID线悬空,这样ID线就为默认值(⾼电平),OTG控制器就处于从状态。
下图是两种常⽤的联接⽅式:
上图中pin脚的序列是vbus,D-,D+,ID,GND,我们要注意上图中pin4(ID)的连接⽅法,OTG 需要通过这个PIN脚来判断控制器是作主还是作从。
对驱动⽽⾔,OTG中的ID脚是我们需要主要关注的,⾄于其它的,了解⼀下就可以了,vbus主要是供电,D+/D-则是⽤来传输数据,就是我们前⾯所讲的主设备和从设备间唯⼀的⼀条铁路。USB 中⽤差分信号来传送数据,这就增加了传输的的抗⼲扰能⼒,⾼频率传输成为可能,usb2.0最⾼速度可以达到480Mbps/s。数据的传输主要由主控制器和从控制器来控制,这就回到了前⾯所说的,IC技术的发展给USB技术铺平了道路,USB的主从控制器实际上是⼀个专⽤的CPU,专门负责编解码USB数据和搬运数据,如果这些⼯作全交给cpu去做,CPU早就累瘫了。在2.0问世之初,480Mbps/s的频率远远超出许多CPU的极限速度。
3、OTG控制器
OTG的基本概念
⾸先,提出⼀个问题,OTG和EHCI/OHCI/UHCI是同⼀类概念吗?
那我们先看⼀看OTG能做些什么。
在OTG中,我们⼀般不把设备叫做主设备或从设备,⽽称作A-DEVICE和B-DEVICE。⼀般⽽⾔,A-DEVICE作主,B-DEVICE作从,但也不能这样绑定,A-DEVICE也可以作从,这时A-DEVICE 仍要为总线提供电⼒。
OTG设备使⽤插头中的ID引脚来区分A/B Device,ID接地被称作为A-Device,为连接时候的USB Host,A-Device始终为总线提供电⼒。ID悬空被称作为B-Device,为连接时候的USB Device(作从),设备的USB Host/USB Device⾓⾊可以通过HNP切换。
OTG Device:使⽤Micro AB插座,可以在运⾏时切换Host/Device。
仅外设B-Device:仅仅能作为外设的B-Device(分为插头⼀体和插头线缆分离的)。
可见,OTG主要是负责控制器状态的切换,这种切换要根据接⼊的设备来判断。OTG主要使⽤在嵌⼊式设备中,说到嵌⼊式不能不提降低功耗了,所以仅有ID线的检测还是不够的。
OTG中的三⼤协议
SRP(Session Request Protocol):
B-Device使?。通过数据线上的脉冲,请求A-Device打开VBUS并且开始-个Session。Session为从VBUS打开到关闭这?段时间。
持:A-Device允许回应SRP,B-Device(包括仅能作为外设的B-Device),允许发起SRP。?个能够?持HNP的B- Device应该能够发起SRP。当A插头插?时关闭VBus的Host必须?持回应SRP,VBus总是打开的Host不必响应SRP。
ADP(Attach Detection Protocol):
提供设备检测是否有对端设备插⼊。
HNP(Host Negotiation Protocol):
OTG设备通过HNP来切换Host/Device⾓⾊。
脸上长钩子OTG不同连接⽅式的不同过程
OTG Device /Embedded Host 与仅作为外设的B-device(带A插头型)
Host端检测到A插头插⼊,停⽌ADP,打开VBus,因为B-Device的A插头与设备作为⼀体,此时B-Device必定与A插头连接,Host检测到外设连接,开始枚举。
OTG Device/Embedded Host 与仅作为外设的B-device(A插头为线缆连接) Host段检测到A插头插⼊,停⽌ADP,打开VBus,如果B-Device是线缆连接完毕在将A插头插⼊则整个连接过程与上⾯⽆异,因为此时B-Device可能还没有插⼊插头,则设备连接超时,VBus再次关闭,等待下⼀次ADP的改变(线缆连接完毕),再次打开VBus,此时开始正常总线枚举。OTG Device 与 OTG Device
Host端检测到插头插⼊,则打开VBus,如果没有外设检测到,则关闭VBus,打开ADP Probing,Device端检测到插头插⼊,则打开SRP,如果线缆没有插⼊,则SRP超时,Device端开始进⾏ADP Probing,当线缆连接完毕,Device端侦测到ADP变化,发送SRP请求Host打开VBus,Host回应SRP并且打开VBus,完成设备连接。
从上⾯的过程可以看出,ADP和SRP的⽬的都是为了节能,平时VBus上的供电是并没有打开的,⽽且在空闲⼀段时间后
VBus也会⾃动关闭。在VBus不供电的情况下就需要靠ADP和SRP来检测外设并打开VBus的供电。如果VBus上⼀直有电流供应,ADP和SRP就⽆⽤武之地了。可见,在嵌⼊式的世界⾥,确实要精打细算,ADP和SRP是何等的复杂,这么复杂的设计仅是为了省⼏毫安的电流。
回来我们前⾯的问题,OTG和EHCI/UHCI/OHCI是同⼀类的概念吗?
OTG的作⽤只是负责切换主从状态的切换,同时,在功耗⽅⾯也有要求,OTG要求vbus不能像PC那样永远供电,所以这样就需要有⼀套设备发现机制,这就是SRP和ADP了。OTG也允许同进充许同类设备进⾏数据传输(A TO A),这就是HNP发挥作⽤的时候了。
当OTG⼰经发现设备,VBUS供电开启,系统处于HOST或DEVICE状态,这时OTG的使命就完成了,接下来的⼯作就交给主控制器(EHCI/OHCI/UHIC)或从控制器了。
所以OTG的主要是在设备接⼊的那⼀刻起作⽤,此后USB还是要按传统的HOST/DEVICE的⽅式来通讯。当然,有些OTG控制器会集成⼀些HOST控制器的功能,这些控制器并不符合任何⼀种标准,⼀旦遇到这种OTG控制器,驱动开发⼈员就要倒霉了。USB系统中最复杂的就是主控制器了,如果与主控制器与USB标准有出⼊,就⽆法重⽤⼤量成熟的控制代码,驱动开发⼈员就需要重新去研究整个USB协义,这⽆疑是⼀份耗时耗⼒不讨好的活。
Linux下的OTG架构
内核定义了⼀个struct otg_transceiver的结构体,这个结构体描述的OTG需要⽀持的接⼝
struct otg_transceiver {
struct device *dev;
const char *label;
u8 default_a;
enum usb_otg_state state; //记录OTG控制器的状态,在实际的处理中这个⽐较重
要。
struct usb_bus *host;
struct usb_gadget *gadget;
/* to pass extra port status to the root hub */
u16 port_status;
u16 port_change;
无语的个性签名/* bind/unbind the host controller */
int (*set_host)(struct otg_transceiver *otg,
struct usb_bus *host);//这个接⼝⽤来启⽤或禁⽤主控制器,是关键的
接⼝
/* bind/unbind the peripheral controller */
int (*set_peripheral)(struct otg_transceiver *otg,
struct usb_gadget *gadget);
/* effective for B devices, ignored for A-peripheral */
int (*set_power)(struct otg_transceiver *otg,
unsigned mA);//⼀般⽤来设置vbus上的供电
/
* for non-OTG B devices: set transceiver into suspend mode */
int (*set_suspend)(struct otg_transceiver *otg,
int suspend);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论