USB技术浅析(4)——USB标准请求

USB标准请求

USB主机对USB设备的配置操作是通过设备请求来实现的。
在这里插入图片描述
读取状态请求GetStatus
GetStatus请求主要用于USB主机读取USB设备、接口或端点的状态。在请求的数据阶段,USB设备向USB主机返回2字节数据。

1.读取设备
GetStatus请求读取设备的定义格式:
在这里插入图片描述
GetStatus请求读取设备的返回值:
在这里插入图片描述
2.读取接口
GetStatus请求读取接口的定义格式:
在这里插入图片描述
GetStatus请求读取接口的返回值:
在这里插入图片描述
3.读取端点
GetStatus请求读取端点的定义格式:
在这里插入图片描述
GetStatus请求读取接口的返回值:
在这里插入图片描述
(D0位表示端点的停止特性,0表示未停止,1表示停止)

清除特性请求ClearFeature
ClearFeature请求用于清除或者禁止设备、接口、端点的某些特性。(无数据阶段)

ClearFeature请求格式:
在这里插入图片描述
标准特性选择符: ENDPOINT_HALT:其接收方是端点,值为 0,对应于端点对的停止特性。 DEVICE_REMOVE_WAKEUP:其接收方是设备,值为 1,对应于端点的停止特性。 TEST_MODE:其接收方是设备,值为 2,用于 USB 设备的测试模式,其不能由 ClearFeature 请求来清除和禁止。 (USB 协议没有用于接口的特性选择符)
设置特性请求 SetFeature SetFeature
请求用于设置或使能 USB 设备、接口或端点的特性值。(没有数据阶段)

在这里插入图片描述
当wValue字段为TEST_MODE时,wIndex字段的高字节指明设备测试选择符,低字节必须置0。
USB协议当前支持的测试选择符:
Test_J:值为01H。
Test_K:值为02H。
Test_SE0_NAK:值为03H。
Test_Packet:值为04H。
Test_Force_Enable:值为05H。

设置地址请求SetAddress
设置地址请求SetAddress请求用于在USB设备上电时为其分配一个唯一的设备地址。(无数据阶段)

SetAddress请求的定义格式:
在这里插入图片描述
(wValue 字段的取值范围:0~127)

读取描述符请求GetDescription
GetDescription请求用于USB主机读取设备的指定的描述符,在数据阶段USB设备向USB主机返回指定的描述符。

GetDescription请求的定义格式:
在这里插入图片描述
设置描述符请求SetDescriptor
SetDescriptor请求用于设置USB设备的描述符(数据阶段)

SetDescriptor请求的定义格式:
在这里插入图片描述
wValue字段的高位指明了USB主机所操作的描述符的类型值,可选设备、配置、字符串、接口、端点、设备限定、其他速率配置描述符。wValue的低位字节指明了描述符的索引值,只对配置描述符和字符串描述符有效。
wIndex字段表示字符串描述符的语言ID,如果不是字符串描述符则应置0。
wLength指定了GetDescriptor请求所返回的字节数。

读取配置请求GetConfiguration
GetConfiguration请求用于主机读取USB设备当前的配置值,在请求的数据阶段,USB设备将向USB主机返回1个字节的配置值。

GetConfiguration请求的定义格式:
在这里插入图片描述
USB 设备在不同的状态,GetConfiguration 请求有不同的响应:
在这里插入图片描述
设置配置请求SetConfiguration
SetConfiguration请求用于为USB设备设置一个合适的配置值(无数据阶段)。

SetConfiguration请求的定义格式:
在这里插入图片描述
(wValue 字段的低位字节指明 USB 设备的配置值,高位字节保留)

读取接口请求GetInterface
GetInterface请求用于USB主机读取指定接口的设置值,即接口描述符的bAlternateSetting字段的值。在请求的数据阶段,USB设备将向USB主机返回1个字节的可替换设置值。

GetInterface请求的定义格式:
在这里插入图片描述
设置接口请求SetInterface
SetInterface请求用于为指定的接口选择一个合适的可替换设置(无数据阶段)。
SetInterface请求只在USB设备处于配置状态时有效,当USB设备的一个接口存在多个可替换设置时,SetInterface请求使得主机可以为其选择所需要的可替换设置。

SetInterface请求的定义格式:
在这里插入图片描述
同步帧请求SynchFrame
SynchFrame请求用于设置并报告端点的同步帧号,用于同步传输,只适用于同步端点。在请求的数据阶段,USB设备将向USB主机返回2个字节的帧号数据。
SynchFrame请求的定义格式:
在这里插入图片描述
(SynchFrame 请求只在 USB 设备处于配置状态时有效)

绍了USB Type-C接口的定义,重点解析了CC逻辑芯片和E-Mark芯片的作用,包括CC引脚的功能、设备是否需要CC逻辑芯片,以及与雷电接口的关系。同时,讨论了如何准确识别Type-C接口的标识,帮助读者理解Type-C接口的特性和应用场景。摘要由CSDN通过智能技术生成TYPEC浅析USB接口出现以来,相信很多人都遇到这一个问题——不论怎么熟悉你的电脑、USB接口位置,一般都没有一次就能找对方向插上,很大概率都要换各边重复插一次!对于个人来讲,特别是有点强迫症的工程师来说,真的难以接受这个事实!所以硬件工程师的位置上宁愿有很多的线缆或者USB-HUB,不为别的,就为了电脑一开机只要连一个HUB线,其它的USB数据线、U盘、USB设备等等,都统一接上,不需要再逐个去连接,不然一个个连(而且又不能一下插上的话),真的很浪费时间(而且很不爽)!……额,说着说着就说多了。我们切回正题吧。因最近做了个项目,虽说都是用的USB2.0(原来用的都是Micro USB/ Mini USB……接口),为了跟上时代的步伐,都上了TYPEC物理接口。原来的USB接口都只有最多5个信号VUBS/D-/D+/ID/GND,但是TYPEC竟然有N多的pin角,带着工程师应有的好奇心,要把这个整明白。早期有一篇DIY解刨TYPEC的线的文字<<TYPEC OTG与MICRO OTG线的区别>>有做了简单的介绍,当时也说了后需要发一篇关于TYPEC的解读文章,这里也是兑现下承诺吧。整理这篇文章真的是找了不少论坛资料,也看了不少大牛的文章才理解出来的,一些很牛X的技术,我也不多说了。(太深入和牛X的我也没研究过哈,担心说着说着大家都信了……).       这里我就总结下个人的几个问题点,然后按照问题答疑的方式给讲解下(基本定义姓百的大哥上面很多,这里我也汇总下,毕竟以后自己也可以看看,我希望这篇文章可以解决大部分新手的疑问!):1.TYPEC接口定义TYPEC插头PLUG引脚定义(Front View):TYPEC母头RECEPTOR引脚定义(Front View):       前文提过二则最大区别在于PIN数是不一样的,从下表可以看出差异。因为TYPEC协议将最大支持到20W甚至更大的功率,所以其Vbus引脚和GND引脚也特别多。另外,因为TYPEC还要支持高速、DP等协议,所以也多了其它功能的引脚。特别是其中的CC引脚。USB Type-C接口包含的2个通道配置(Channel Configuration)信号引脚(CC1 & CC2),用于功能协商。上述信号确定接口插入方向,并用于协商接口上的供电功能、替代模式和外设模式。【后面详细说明下CC的疑问】****************************************插入知识点******************************************通常用到的USB2.0的TYPEC线插头和Micro USB线插头的PIN对应关系****************************************插入知识点*****************************************CC引脚在DPF和UFP内部分别需要有上拉/下拉电阻,用来识别各自的功能。根据不同的上下拉电阻检测,可以确认负载信息。在DFP内部CC通过不同Rp上拉到电源。在UFP内部CC通过5.1K电阻下拉到GND。下行DFP设备必须可以区分是下拉电阻Rd还是负载Ra接入来确认是否有上行UFP设备接入并判断是否需要给Vconn供电。DFP设备只有检测到Ra时,才给Vconn供电。全功能TYPEC线缆内部是有CC芯片的,需要通过CC2(Vconn)对其供电。设备在给Vconn供电前,电源线缆在Vconn引脚需要有个Ra电阻(Ra表示Vconn对地负载,应该是线缆内部本身接Ra,设备根据读取线缆上面的信息来判断线缆的属性)。在某些线缆上,这有可能是个纯粹的电阻,也有可能是简单的负载。****************************************插入知识点********************************************DFP直的是下行端口,可以认为是HOST设备、电源适配器这类。UFP可以认为是从设备DEVICE,U盘、受电设备等。*******************************************插入知识点*********************************************************************************插入知识点*****************************************所以在文章<<TYPEC OTG与MICRO OTG线的区别>>中有解释说如果是单纯的将TYPEC-OTG线用在MICRO-OTG上是不行的,因为MICRO-OTG的ID引脚定义不同。所以要强制修改的话,需要将TYPEC-OTG内部的CC的下拉5.1K电阻,改为0R短路到GND,而且把这个信号对应到原先Micro的ID引脚信号上。下面是Micro-B Receptor转USB C plug的数转接线线信号图,可以参考一二。****************************************插入知识点*****************************************2.CC解读(Current Configuration)刚刚开始接触TYPEC时,经常看到CC这个引脚功能。开始觉得CC是个单纯的信号、有时候又理解为CC应该是类似单总线功能有数据通讯、又或者有是串口功能……这些理解都有问题。经过一些了解后,初步汇总如下,希望对大家也有帮助。若有高手过目,也请指点一二。CC实际有CC1和CC2。在插座上两个信号都有接。但是在插头上面一般只有CC1或者CC1&Vconn.设备通过CC1&CC2上的Rd/Ra来判断不同的功能,是否有负载接入、需要提供多达的电流、是否需要供电等信息。在DFP的CC pin有上拉电阻Rp,在UFP有下拉电阻Rd。未连接时,DFP的VBUS是无输出的。连接后CC pin相连,DFP的CC pin会检测到UFP的下拉电阻Rd,说明连接上了,DFP就打开Vbus电源开关,输出电源给UFP。而哪个CC pin(CC1,CC2)检测到下拉电阻就确定接口插入的方向,顺便切换RX/TX。比如在全功能TYPEC接口情况下:CC1&CC2都接下拉电阻Rd时,表示Debug accessory 模式;CC1&CC2都接Ra时表示Audio Adapter Accessory Mode (虽然还不懂是啥。。。但是手册是这么解的….);CC1接Rd、CC2为NC时(或者反之),表示有负载接入;CC1接Ra,CC2为NC时(或者反之),表示供电线缆接入,且没接负载(表示给Vconn供电,无需给VBUS供电);CC1接Rd、CC2接Ra时,表示有供电线缆接入,而且接着负载(给VBUS供电,同时CC2作为Vconn给线缆内部芯片供电5V,CC1传信号给UFP);或者是UFP(上行端口,即从设备)接入(表示需要给VBUS供电)考虑另外,对于需要广播电流输出能力的DFP而言,需要通过不同值的CC上拉电阻Rp来实现;对于UFP而言,需要检测CC管脚上的电压值来获取对方DFP的电流输出能力。****************************************插入知识点********************************************在DFP的CC pin有上拉电阻Rp,在UFP有下拉电阻Rd。未连接时,DFP的VBUS是无输出的。(所以通常淘宝上面买到的TYPEC转Micro的头,其只有VCC/D+/D-/GND信号连接,CC是没连的。故将Micro转接头接在带有PD的TYPEC电源线上后,VBUS就无输出,Micro端VBUS没有供电)。****************************************插入知识点**********************************************根据标准下拉电阻为Rd=5.1k,上拉电阻Rp为不确定的值。USB Type-C靠Rp的不同,从而在 CC pin检测到的电压就不一样,来控制DFP供电模式。在TYPEC中两个CC,实际上在不含芯片的线缆里只有一根cc线。含芯片的线缆也不是两根cc线,而是一根cc,一根Vconn,用来给线缆里的芯片供电(5V),这时就cc端没有下拉电阻Rd,而是下拉电阻Ra:800-1200Ω。****************************************插入知识点*****************************************CC1和CC2是两个关键引脚,作用很多:探测连接,区分正反面,区分DFP和UFP;实际上在不含芯片的线缆里只有一根cc线。含芯片的线缆也不是两根cc线,而是一根cc,一根Vconn,用来给线缆里的芯片供电(5V)。这时就cc端没有下拉电阻Rd,而是下拉电阻Ra.(即当线缆里有芯片的时一个cc传输信号,一个cc变成Vconn供电);支持PD的设备必须采用CC Logic芯片。USB Type-C目前支持最高20V/5A,此时必须要支持USB PD,即需要额外的PD芯片,所以不要以为是USB Type-C接口就可以支持到20V/5A。****************************************插入知识点*****************************************3.设备是否需要CC逻辑芯片所有全功能的Type-C电缆都应该封装有E-Marker:封装有E-Marker芯片的USB Type-C有源电缆,DFP和UFP利用PD协议可以读取该电缆的属性:电源传输能力,数据传输能力,ID等信息;但USB2.0 Type-C电缆可以不封装E-Marker。所有的DFP设备需要CC逻辑检测与控制芯片:DFP需要检测到CC管脚上有某个电压时,判断UFP设备已插入或拔出,来提供和管理VBUS。当没有UFP设备插入时,必须关闭VBUS。USB3.0/USB3.1应用中,除UFP设备以外的所有设备都需要CC逻辑检测与控制芯片:在USB2.0应用中,无需考虑方向检测问题,但USB3.0或者USB3.1应用中,必须考虑方向检测问题(有一种情况例外,比如U盘,移动硬盘等可以不考虑方向,不用CC芯片。)。持PD的设备必须采用CC Logic芯片:对于UFP而言,需要检测CC管脚上的电压值来获取对方DFP的电流输出能力。USB PD看似只是电源传输与管理的协议,实际上它可改变端口角色,可与有源电缆通讯,允许DFP成为受电设备等诸多高级功能。所有全功能的Type-C电缆都应该封装有E-Marker,但USB2.0 Type-C电缆可以不封装E-Marker综上,只有因为功耗较低而不需要检测电流能力的UFP(U盘,耳机,鼠标等)不需要CC逻辑检测端口控制芯片外,其余所有的DFP、DRP(如电脑,手机,平板,移动电源)、需要检测DFP电流输出能力的UFP、支持PD的设备,都需要CC逻辑检测与端口控制芯片。4.CC逻辑芯片和E-Mark芯片前文中有说道“持PD的设备必须采用CC Logic芯片”、“Electronically Marked Cable: 封装有E-Marker芯片的USB Type-C有源电缆”、“全功能的Type-C电缆封装有E-Marke”等信息,实际比较细心阅读的就可以看出所谓的CC逻辑芯片和E-MARK芯片是不同的:CC逻辑芯片针对的还是设备端;E-MARK针对的是线缆,而且规范中也经常提到“Electronically Marked Cable”其实就是我们所谓的e-mark芯片。E-MARK芯片技术自动识别电子产品所需的电压和电流。****************************************插入知识点**************************************如果TYPE-C接口提供超过5V的电压,或者是超过3A的电流,那么一定需要TYPE-C接口芯片去实现USB PD协议。      如果您的设备使用5V电压,并且不超过3A的电流。而且设备本身只往外供电,或者只接受对方供电,并且供电角色与数据传输角色为默认搭配(即供电方为HOST,用电方为Slave或者device)。那么不需要TYPE-C芯片。      C-C传输线上是否需要用到E-MARK 芯片。这个判断标准是,使用过程中,电流是否会超过3A?如果不超过,则可以不需要。若需要实现Battery Charging协议,这需要E-MARK芯片,这样既能够实现充电,又能够传输数据。****************************************插入知识点**************************************5.雷电接口和Type C二者关系Type C属于接口规格,雷电3则是指接口所支持的虚拟层面的协议,与Type C并不冲突。雷电带宽可达到40Gbps,相较USB 3.1的10Gbps差距高达4倍。雷电1和雷电2使用的接口形态是Mini DisplayPort口(Mini DP口),前两代雷电接口都有应用在苹果Mac系列电脑中.在USB Type C推出之后,Intel就将雷电3的物理接口由以往的mini DP改为USB Type C,性能上也做了更大的提升。传输速度提升到了 40 Gbps. Intel将接口规格基于Type C物理层,并完全能够实现USB Type C的绝大多数功能。所以雷电3同时支持USB3.1;但支持USB 3.1的Type C接口设备不一定支持雷电规范接口。也就是说USB Type-C不一定是雷电3,但是雷电3一定是USB Type-C接口,所有支持雷电3的接口旁都有一个雷电的“闪电”标志,方便区分。6.准确识别Type-C的标示Type-C类别不同的传输速率,支持不同的协议,标识也是不同的。只带有USB标识:表示支持USB2.0,普通的速率480Mb/s;带有USB标识,外加SS字样:表示支持USB3.1,速率5Gb/s;带有USB标识,外加SS字样,右上角多了数字10:表示支持USB3.1,速率10Gb/s;带有USB标识,外加SS字样,右上角多了数字10,右边增加D字样:表示支持USB3.1,速率10Gb/s,支持视频显示;带有USB标识,且有一个黑色的背景:全部支持PD协议,其中5Gb/s的字体为白色,其余均与上文一致!详情参看以下图示。7.参考文献:“http://news.eeworld.com.cn/xfdz/2015/0323/article_40868.html”;《Type-C Specification》;“https://blog.csdn.net/chenzhen1080/article/details/70183163”;《USB Type-C Specification Release 1.3.pdf》“http://www.eepw.com.cn/article/284329.htm” ;“”http://www.tronixin.com/showNews.asp?id=33;“”http://www.chongdiantou.com/wp/archives/37294.html;  ========================================
最新发布
03-08
### USB Type-C 接口中的 CC 逻辑芯片 USB Type-C 接口中配置通道 (Configuration Channel, CC) 负责连接状态检测、电缆方向识别和电源协商等功能。CC线路上集成了电阻器来指示端口的角色,即上游端口(UFP)或下游端口(DFP)。当设备插入时,通过检测这些固定电阻值可以确定插头的方向并建立初始通信链路[^1]。 对于支持Power Delivery (PD) 协议的Type-C接口而言,CC线上还承载着双向串行数据传输的任务,用于交换有关供电能力和请求的信息。这使得主机能够动态调整所提供的电力水平以满足外设需求而不必受限于传统USB标准所规定的5V/0.9A限制[^2]。 ```python # Python伪代码展示如何读取CC线路的状态 def read_cc_status(): cc_line_state = get_resistance_value() if cc_line_state == 'RA': return "Device is connected as UFP" elif cc_line_state == 'RD': return "Host is connected as DFP" else: return "Unknown connection state" ``` ### E-Mark 芯片功能解析 E-Mark (Embedded Marking) 是一种嵌入到主动式USB Type-C转接线内部的小型集成电路(IC),主要用于提供额外的安全性和特性描述能力。具体来说: - **身份验证**:确保只有经过认证的产品才能被系统接受; - **参数报告**:向两端设备汇报该条线缆所能承受的最大电流、电压等级和支持的数据速率等信息; - **扩展功能控制**:某些高端应用中还可以实现热插拔保护、信号均衡调节等功能[^3]; 因此,在涉及到高功率输送或者高速率数据传送场景下,具备E-Mark标记的优质线材显得尤为重要。 ### 雷电(Thunderbolt) 技术关联分析 雷电技术是一种由英特尔开发的技术,它不仅兼容USB协议同时也引入了自己的专有通讯方式。尽管物理层面上两者都采用了相同的Type-C外形设计,但在电气特性和软件堆栈方面存在显著差异。值得注意的是,并不是所有的USB Type-C端口都能完全发挥出雷电线所带来的全部性能优势——特别是那些依赖于PCI Express总线带宽的应用程序和服务[^4]。 为了使普通的USB Type-C端口获得完整的雷电体验,则需要在其硬件架构里集成特定控制器来处理更复杂的命令集转换任务。此时,CC逻辑与E-Mark机制将继续扮演重要角色,因为它们共同构成了整个生态系统的基础框架的一部分,保障了不同品牌间产品的互操作性以及安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值