USB
文章平均质量分 91
业余程序员plus
分享知识,传播开源精神,致敬郝斌老师!
展开
-
USB总线-Linux内核USB设备信息解析(十六)
Linux内核中USB设备信息及拓扑结构可以从/sys/kernel/debug/usb/devices和/sys/bus/usb/devices中获取,下面介绍这些信息如何解读。原创 2024-03-21 23:08:23 · 509 阅读 · 0 评论 -
USB2.0设备检测过程信号分析
这里写自定义目录标题1.简介2.硬件2.1.Low-speed2.2.Full-/High-speed3.信号电平3.1.Low-/Full-speed3.2.High-speed4.检测过程参考资料1.简介USB设备接入的Hub端口负责检测USB2.0设备是否存在和确定USB2.0设备的速度。检测设备是否存在和确定设备速度涉及一系列的信号交互,下面将分析该过程。2.硬件USB低速设备和全速/高速设备的连接器在硬件结构上有所不同,而主机或者Hub接收端连接器的D+、D-接有15K的下拉电阻。2.1原创 2024-03-08 22:24:21 · 1035 阅读 · 0 评论 -
USB总线-Linux内核USB3.0 Hub驱动分析(十四)
USB Hub提供了连接USB主机和USB设备的电气接口。USB Hub拥有一个上行口,至少一个下行口,上行口连接上一级的Hub的下行口或者USB主机,连接主机的为Root Hub,下行口连接下一级Hub的上行口或者USB设备。经过Hub的扩展,一个USB主机可以和多个USB设备通信。良好的扩展性电源管理探测设备连接和断开连接总线错误探测和修复支持USB1.0、USB1.1、USB2.0、USB3.2设备。原创 2023-11-26 23:12:57 · 841 阅读 · 0 评论 -
USB总线-Linux内核USB3.0主机控制器驱动初始化流程分析(十三)
RK3588有2个USB3.0 DRD控制器,2个USB2.0 Host控制器。USB3.0 DRD控制器既可以做Host,也可以做Device,向下兼容USB2.0和USB1.0。USB3.0 DRD控制器的内部结构如下图所示;总线接口为AXI或AHB;USB3.0和USB2.0及USB1.0硬件上独立;USB3.0控制器数字逻辑部分对应SS MAC,PHY接口为PIPE,PHY为USBDP PHY,和DP使用同一个PHY;原创 2023-10-13 00:14:34 · 2299 阅读 · 0 评论 -
USB总线-Linux内核USB3.0控制器初始化代码分析(三)
1.概述RK33999使用synopsys dwc3的USB3.0控制器IP。早期的初始化需要在两个模块中进行,一个在rockchip官方提供的驱动中初始化,位于drivers/usb/dwc3/dwc3-rockchip.c文件中,主要初始化和CPU紧密相关的内容,如时钟、复位、电源、extcon(用于USB模式切换),另一个在synopsys提供的驱动中初始化,位于drivers/usb/dwc3/core.c文件中,这部分和USB3.0控制器密切相关,如USB3.0控制器内部寄存器地址、USB3.0原创 2021-07-25 23:50:43 · 7211 阅读 · 5 评论 -
USB总线-Linux内核USB3.0设备控制器复合设备之USB gadget configfs分析(七)
1.简介configfs是基于ram的文件系统,与sysfs的功能有所不同。sysfs是基于文件系统的kernel对象视图,虽然某些属性允许用户读写,但对象是在kernel中创建、注册、销毁,由kernel控制其生命周期。而configfs是一个基于文件系统的内核对象管理器(或称为config_items),config_items在用户空间通过mkdir显式的创建,使用rmdir销毁,在mkdir之后会出现对应的属性,可以在用户空间对这些属性进行读写,与sysfs不同的是,这些对象的生命周期完全由用户空原创 2022-03-23 22:26:56 · 7207 阅读 · 3 评论 -
USB总线-Linux内核USB3.0主机控制器驱动框架分析(十二)
如下图所示,Linux内核中USB主机体系结构由五部分组成,分别为Application Software、USB Class Driver、USB Core(USB Driver)、USB Host Controller Driver、USB Host Controller。应用程序处于用户空间,通过系统调用访问Class Driver,从而间接的访问USB设备,如主机端的应用程序aplay、arecord可以访问USB音频设备。原创 2023-09-24 23:05:37 · 1301 阅读 · 0 评论 -
USB总线-Linux内核USB设备驱动ftrace分析(十一)
ftrace追踪USB设备驱动工作过程原创 2022-10-04 14:52:39 · 1721 阅读 · 1 评论 -
USB总线-Linux内核USB3.0设备控制器中断处理程序分析(九)
1.概述USB设备枚举、请求处理、数据交互都涉及USB设备控制器中断。当有事件发生时,USB设备控制器首先将事件信息通过DMA写入到事件缓冲区中,然后向CPU发出中断,随后CPU调用中断处理函数开始处理中断事件。2.事件dwc3 USB设备控制器事件使用dwc3_event数据结构描述,由4个字节组成。按位域区区分,可分为3类事件,分别为设备端点事件、设备事件及其他核心事件。dwc3_event_type用来描述事件的类型,is_devspec == 1表示事件为设备事件,否则表示设备端点事件。dwc原创 2022-05-06 23:41:30 · 4540 阅读 · 0 评论 -
USB总线-RK3399 USB3.0控制器特性介绍(二)
1.RK3399 USB下图是RK3399 SOC的框图。RK3399包含了2个USB2.0 Host控制器;两个USB3.0 OTG控制器,同时兼容USB2.0。USB3.0使用的是Synopsys公司的IP,驱动也使用Synopsys的dwc3 USB驱动。2.USB3.0 OTG Controller简介USB3.0 OTG控制器可以作为主机(Host)、设备(Device),或者根据从USB2.0 PHY和DFP/UFP/Data Role Swap输入的ID状态确定是USB2.0/3.0原创 2021-07-04 23:38:09 · 5076 阅读 · 0 评论 -
USB总线-Linux内核USB3.0设备控制器驱动框架分析(四)
1.概述如下图所示,USB控制器可以呈现出两种不同的状态。USB控制器作为Host时,称为USB主机控制器,使用USB主机控制器驱动。USB控制器作为Device时,称为USB设备控制器,使用UDC(usb device controller)驱动。本节只分析USB控制器作为Device时的驱动框架。USB控制器作为Device时,驱动框架可分为5层。最上层的是Gadget Function驱动,代表了具体设备的驱动,如大容量存储设备驱动(U盘、移动硬盘等)、通讯类设备驱动(USB串口、USB虚拟网卡等原创 2021-09-16 22:26:11 · 5179 阅读 · 0 评论 -
USB总线-Linux内核USB3.0设备控制器之dwc3 gadget驱动初始化过程分析(五)
1.概述USB设备控制器(UDC)驱动的框图如下图所示,由三部分组成。第一部分是UDC驱动核心层,在drivers/usb/gadget/udc/core.c文件中实现,该层是一个兼容层,将USB Function驱动和具体的USB gadget驱动隔离开,抽象了统一的接口和数据结构,向USB Function驱动提供了统一且稳定的接口,同时完成USB Function驱动和USB gadget驱动的匹配。第二部分是gadget driver层,负责驱动硬件工作,和具体的USB设备控制器硬件相关,dwc3原创 2022-02-17 21:44:47 · 12888 阅读 · 5 评论 -
USB总线-Linux内核USB设备驱动之UAC2驱动分析(十)
1.概述UVC(USB Audio Class)定义了使用USB协议播放或采集音频数据的设备应当遵循的规范。目前,UAC协议有UAC1.0和UAC2.0。UAC2.0协议相比UAC1.0协议,提供了更多的功能,支持更高的带宽,拥有更低的延迟。Linux内核中包含了UAC1.0和UAC2.0驱动,分别在f_uac1.c和f_uac2.c文件中实现。下面将以UAC2驱动为例,具体分析USB设备驱动的初始化、描述符配置、数据传输过程等。2.UAC2.0 Gadget Function驱动下面是UAC2.0的原创 2021-11-21 19:39:37 · 7029 阅读 · 14 评论 -
USB总线-USB总线简介(一)
1.简介USB是通用串行总线(Universal Serial Bus)的缩写。在USB总线出现之前,计算机与键盘、鼠标、扫描仪、打印机都使用专用的接口连接,不同设备的接口不能互用,扩展性很差,每次插拔设备都要关闭计算机,不支持热插拔,且通信速率很低。为了解决上述问题,USB总线诞生了。USB总线就好像一条管道,管道里流过的东西只要符合USB协议,至于具体流的是什么东西,USB总线并不关心,可以是自来水,可以是污水,可以是天然气,也可以是石油。对应具体的设备上,只要是支持USB协议的设备,都可以连接计算机原创 2021-07-04 23:32:23 · 15214 阅读 · 1 评论 -
USB总线-Linux内核USB3.0设备控制器之UDC驱动分析(六)
1.概述UDC驱动的接口都定义在drivers/usb/gadget/udc/core.c文件中。USB Function驱动通过调用这些接口匹配及访问USB设备控制器,而底层USB控制器驱动要实现这些接口定义的功能。下面分析一下主要的UDC驱动接口调用流程。2. 接口分析2.1.驱动绑定Composite层通过调用UDC core层的usb_udc_attach_driver和usb_gadget_probe_driver接口将Function驱动和UDC驱动绑定。前者通过UDC设备的名称匹配,通原创 2022-03-13 22:02:29 · 9607 阅读 · 0 评论 -
USB总线-Linux内核USB3.0设备控制器复合设备之legacy方式分析(八)
1.概述在usb gadget configfs引入到内核之前,内核都使用硬编码的方式实现复合设备,无法在用户空间动态修改和绑定不同的function驱动,若要修改,则需要修改内核代码,重新编码,非常不方便。目前这部分代码在被放到drivers/usb/gadget/legacy/目录下。被编译成内核模块时,名称以g开头,如音频设备g_audio.ko、串口设备g_serial.ko、CDC设备及大容量存储设备g_multi.ko。USB gadget configfs和legacy相比只是实现复合设备的原创 2022-03-31 23:11:53 · 2644 阅读 · 1 评论 -
USB3.2链路训练及状态机解析
LTSSM(Link Training and Status State Machine)定义了USB3.2总线链路层连接性及链路层电源管理。LTSSM由12种不同的链路状态组成,可以根据它们的功能对其进行表征。LTSSM有4个可操作的link状态,分别为U0、U1、U2及U3。U0是使能Enhanced SuperSpeed链路的状态,此使总线上可以传输数据包,也可以处于空闲状态。U1是低功耗的link状态,此时总线上没有数据传输,且Enhanced SuperSpeed总线链路层连接性被关闭。原创 2023-08-18 23:31:10 · 2305 阅读 · 0 评论