UHCI的数据流控制

USB接口(2)——USB控制器EHCI、OHCI、UHCI与usb hub芯片 EHCI和OHCI,UHCI的比较和区别 UHCI(universal host controller interface): Intel用在自家芯片组上的usb 1.1主控制器(host controller)的硬件实例。 EHCI(enhanced host controller interface): usb 2.0的主控制器标准接口。 OHCI(open host controller inferface):一个不仅仅是usb用的主控制器接口标准。主要是遵循csr (configuration sp 阅读详情

UHCI的数据结构和数据流控制

一、数据结构

主要涉及到三个数据结构:Frame list 、Transfer Descriptors(TD)、Queue Head(QH)。Frame list必须要4K字节对齐;而TD和QH需要16字节对齐,一般情况本身的结构大小要超过16字节。

三者之间的关系如下图所示:

其中Frame list base address从UHCI的IO Register中读到的,uhcispec中有介绍。Frame counter也是在IO register中读到,也base address共同得到当前UHCI需要处理的Frame list中的Frame pointer。

剩下的问题就是如何控制Frame pointer中TD、QH的数据流。

 

关于TD和QH的数据结构问题:

1、Frame list pointer:

Frame list pointer指第一个需要调度的结构体的地址。

Q:表示Link pointer指向的是TD(0)还是QH(1)。

T:表示告知HC,该Frame是否有有效的数据流入口。1、表示空的frame;0表示有效入口。

2、Transfer Descriptor

针对同步、中断、控制、bulk传输,有四种不同的TD,当然结构大同小异,只是部分控制bit不一样而已。按理说会有8个Dword,实际使用前4个Dword,最后4个Dword是留给software使用的。


 

Link pointer指指向另外一个TD或者QH。

Vf:告知HC,该深度遍历还是广度遍历。深度遍历就是跑向Link pointer的指向的TD;广度遍历跑向Link pointer指向的另外一个QH。1=depth first;0=breadth first。

Q:表示Link pointer指向的是TD(0)还是QH(1)。

T:1=Link pointer无效;0=Link pointer是有效的。该bit告知HC本TD中link pointer是否指向另外一个数据流入口。如果TD在一个队列里中,该bit代表告知HC,队列中已经没有另外的有效数据流入口了。也就是说本TD是最后一个TD。

 

另外的字段说明请看spec。

在status字段中,bit23是active bit。也就是说,Software将所有的QH或者TD设置好,Frame list base address也设置好之后,在将该bit置位,则HC马上开始USB的数据传输。在等待若干time之后判断是否得到ACK。

 

Buffer Pointer指本TD中需要传输的数据内容。大小必须不小于MAX Length中定义的size。

 

3、Queue Head

QH是特别针对控制、bulk和中断传输定义的结构。而同步传输中不会使用QH。必须16字节对齐。

QHLP:此字段指向下一个横向数据表的地址,可以是QH或者TD。一般情况是QH(多个队列)。

Q:表示Link pointer指向的是TD(0)还是QH(1)。

T:告知HC,本QH已经是本次调度序列中最后一个QH了。1=last QH;0=pointer有效,指向TD或者QH。

 

 

二、如何控制数据流

HCD设定HC的register:Frame list baseaddress和frame list index,并通过hc的run、stop控制HC执行调度序列。

HC首先从Frame list中读取一个入口,判断bit0 是否是pointer address有效;判断bit1 是指定TD还是QH;另外一个字段即pointer address。

如果针对isochronous传输,Frame list则指向TD,如果没有isochronous传输,则指向QH。如果指向TD,则HC获取到入口地址开始在USB总线上传输数据,每个TD包含的link pointer指向下一个入口,TD或者QH;如果是指向QH的,HC就会按照QH中的结构来相应处理。

 

1、  处理同步传输的描述符

同步传输的描述符是link到frame list中,每1ms发生一次数据的传送。所以同步传输的控制也要保证host端到端点之间的固定频率的数据传送。同步TD的处理如下:

1)、HC获取对应的Isochronous TD;

2)、HC decode TD的各个字段,来做相应的传输控制。

3)、HC产生USB token,开始传送 usb数据。

4)、当传输过程完成,HC将更新状态,标志TD非活跃状态。

5)、HC获取当前TD中link pointer指向的TD或者QH。

6)、类似的同样处理TD或者QH。

 

 

2、  处理bulk、control和interrupt的传输描述符

像bulk、control和interrupt TD传输数据是通过QH队列来实现的。步骤如下:

1)、HC从Frame list中获得QH,并确认是否有有效的入口。

2)、如果数据(TD or QH)入口有效,HC从QH的元素指针中获取TD或者QH,如果是TD,则跳转到3);如果QH则跳转到1);如果是无效的入口,直接跳转到10)。

3)、HC解析TD字段,觉得采取何种方式传输。

4)、HC产生USB token,并开始执行传输,setup阶段。

5)、等传输过程结束,HC更新状态。

6)、如果传输结束并成功,TD被标志位非活跃状态,并跳转到9)。

7)、如果此次传输没有成功,但是error次数没有达到门限值,那么TD将依旧重新开始活跃。跳转到10)。

8)、如果此次传输失败,而且error也达到了门限值,那么TD将被标志成非活跃态,跳转到10)。

9)、HC将当前TD的link pointer写入到当前QH结构中的元素指针中(也就是将QH中之前处理完的TD从链表中移除),如果link pointer的Vf bit置位了(depth),(将当前QH传递过去)跳转到2);否则直接进入10)。

10)、HC从当前QH的QH linkpointer中获取到QH或者TD的指向。如果该QH link pointer的T位置位的话,HC进入idle转跳等待1ms 帧时间的消耗完。

11)、UHCI的处理过程继续以此流程进行下去。

数据流控制的结构图如下:

 

下图是一个队列的实例:

xHCI1.1-框架和数据结构 Chapter 3 Architecturaloverview 各个部分为: Application software:应用软件使用一个或多个USB设备提供的服务。应用软件通过ClassDriver提供的标准接口连接到USB设备 ClassDriver software :这种软件运行在hostPC上,对应USB设备一个具体的“类”(MassStorage,Human interface,Audio,etc.).ClassDriver software通常是操作系统一部分... 阅读详情

相关推荐

USB 设备和传输特性之学习笔记

USB 设备的供电模式 自供电 (Self Powered)总线供电 (Bus Powered)同时具有上述两种供电能力 USB控制器能够给USB设备提供最多 500mA 的供电能力。如果仅仅usb总线设计上只存在总线供电能力的设备,最大电流损耗可能超出供电能力; 因此,自供电设备的存在是必要的----他们需要有自己专用的外部电源。 支持两种供电模式的 usb 设备,能在接入外部电源时进

cfy_phonex的专栏 2902

UHCI Intel Specification

qemu参考这篇文档来模拟usb uhci控制器的代码实现,qemu当中usb开发的必须文档

ESP32-P4 GDMA-AHB控制器寄存器详解与链表驱动实践

通用DMA(GDMA)是嵌入式系统中实现高效外设数据搬运的核心硬件模块,其基于AHB总线的架构支持高吞吐、低延迟的内存-外设直传。GDMA工作原理依赖寄存器精确配置、中断状态机管理及描述符链表调度机制,技术价值体现在零拷贝传输、硬件流控、CRC校验与多通道QoS保障等关键能力。典型应用场景涵盖USB Device高速通信、I2S实时音频流、ADC连续采样等对时序和可靠性要求严苛的工业与多媒体领域。本文深入解析ESP32-P4芯片中GDMA-AHB控制器的64个寄存器功能、中断四重机制(RAW/ST/ENA/

weixin_35949153的博客 53

USB基础---OHCI、UHCI、EHCI和XHCI控制器简介

OHCI、UHCI都是USB1.1的接口标准,而EHCI是对应USB2.0的接口标准,最新的XHCI是USB3.0的接口标准。   OHCI、UHCI、EHCI和XHCI控制器介绍   (1) OHCI(Open Host Controller Interface)是支持USB1.1的标准,但它不仅仅是针对USB, 还支持其他的一些接口,比如它还支持Apple的火线(Firewire,IE...

LoongEmbedded的专栏 1万+

ESP32 UHCI DMA串口驱动深度解析:寄存器控制与零拷贝工程实践

UART是嵌入式系统最基础的异步通信接口,其性能瓶颈常源于CPU轮询或中断频繁开销。UHCI(Universal Host Controller Interface)作为ESP32集成的专用DMA控制器,通过硬件链表调度、FIFO缓冲与中断状态机协同,实现高吞吐、低延迟、低CPU占用的串口数据搬运。其核心价值在于解耦协议处理与数据搬运,支撑Modbus、PPP等帧结构协议的实时解析。关键技术包括DMA描述符内存对齐约束、IRAM/PSRAM混合分配、环形链表原子维护及中断三级状态管理。本文围绕UHCI寄存器

weixin_29317963的博客 80

ESP32-S3 UHCI UART协议加速引擎深度解析与工程实践

UART是嵌入式系统最基础的异步串行通信接口,但传统裸帧传输面临帧边界模糊、无校验、可靠性差等固有缺陷。UHCI(Universal Host Communication Interface)作为ESP32-S3中集成于UART控制器内的硬件协议加速引擎,通过SLIP风格帧封装、硬件CRC/校验和、序列号管理及自动ACK机制,将UART升级为具备数据完整性、帧同步与轻量可靠性的结构化链路层。其核心价值在于卸载软件状态机负担,显著降低CPU占用并提升抗干扰能力,广泛适用于工业RS-485、传感器组网、OTA升

weixin_36474001的博客 48

Linux那些事儿之我是UHCI(19)非Root Hub的控制传输

下面来看非Root Hub的控制传输.还是从usb_submit_urb()开始,转而进入usb_hcd_submit_urb(),然后就进入到了uhci_urb_enqueue.我们来看uhci_urb_enqueue,它来自drivers/usb/host/uhci-q.c,再强调一下,我们现在看的是控制传输:   1377 static int uhci_urb_enqueue(st

4124

ESP32-P4 UART深度解析:UHCI中断、跨时钟域同步与GDMA实战

UART(通用异步收发传输器)是嵌入式系统最基础的外设通信接口,其核心原理涉及波特率生成、FIFO缓冲、中断驱动与跨时钟域数据同步。在高性能MCU如ESP32-P4中,UART已演进为多模态架构——融合标准UART、低功耗LP UART及面向GDMA的UHCI协议加速器,显著提升吞吐与能效。技术价值体现在零拷贝帧识别、硬件AT命令检测、RS485自动流控等工业级能力;典型应用场景包括物联网终端透传、工业总线网关、低功耗传感器唤醒及固件安全升级。本文聚焦UHCI超时中断机制与APB/SCLK双域寄存器同步规范

weixin_35949153的博客 50

Linux USB子系统 (1)

USB 简介 The Universal Serial Bus    1994年Compaq, Intel, Microsoft和NEC 4家公司联合开始制定USB. 开始制定这个总线的目的是: (1)连接PC和电话 (2)容易使用 (3)端口扩展 1996年一月发布第一版(version 1.0),最新的官方版本1.1在1998年九月发布,并且该文档还在继续开发,在1999年发布

liuxd3000的专栏 895

【ESP32-IDF】高级外设开发2:UART与GDMA的高效数据搬运实战

本文深入探讨ESP32 IDF框架下UART与GDMA的高效数据搬运实战,通过硬件架构解析、零拷贝传输实现和性能优化技巧,展示如何利用GDMA提升外设开发的数据处理效率,显著降低CPU占用率并确保高速稳定传输。

emacs5lisp的博客 317

ESP32 Uart串口控制器

前言 嵌入式应用通常要求一个简单的并且占用系统资源少的方法来传输数据。通用异步收发传输器 (UART) 即可以满足这些要求,它能够灵活地与外部设备进行全双工数据交换。ESP32 芯片中有3个UART控制器可供使用,并且兼容不同的UART设备。另外,UART还可以用作红外数据交换 (IrDA) 或 RS-485 调制解调器。 主要特性 支持3路UART,发送与接收FIFO共享RAM 支持5/6/7/8位数据长度 支持RS485、IrDA协议 支持DMA高速通信 支持UART唤醒模式 UART架构

8742

USB基础知识概论

 USB基础知识概论 目录 正文之前 1.此文目的 2.关于一些USB方面的文档 2.1.大而全的USB英文资料 2.2.简明扼要的USB英文资料 2.3.全系列的介绍Linux下的USB中文资料 3.声明 1.USB的来龙去脉 1.1.USB是什么 1.2.为何要有USB 2.USB相关的基础知识 2.1.U

mclaren_csdn的专栏 2822

USB——硬件控制器分类(OHCI UHCI EHCI xHCI)))

OHCI 不仅仅用于 USB,也支持一些其他的接口,比如苹果的 Firewire 等,OHCI 由于硬件比较难,所以软件要求就降低了,软件相对来说比较简单。全称是 Kinetis Host Controller Interface,因在 NXP Kinetis 系列微控制器中被大量使用而得名,是一个设计简单但功能完整的 USB 控制器,可以工作在 单一的主机和设备模式下,配合一些其他的芯片也可以支持 OTG 工作模式,具有占用内存小并且驱动程序易于开发的特性。OHCI、UHCI都是USB1.1的接口标准。

tyustli 3755

OSK VFS read数据流分析

1. block_read_full_page(struct page *page, get_block_t *get_block)其中page是读操作的数据存放的位置, 即OS从硬盘上读取数据将会存放到page中.2. 为这个page分配buffer_head, head = alloc_page_buffers(page); 每个bh对应文件系统的block.3. 调用submit_bh(RE...

weixin_30542079的博客 97

Windows 2000专用USB驱动完整安装包(含INF配置与微端口驱动)

简介:本资源为面向Windows 2000操作系统的USB设备兼容性解决方案,包含经验证的主机控制器驱动、通用USB驱动模型及设备级微端口驱动。核心文件win2000_usb.inf提供标准化安装指引,支持硬件ID识别与自动驱动部署;压缩包集成可执行安装程序、PUDN来源说明文档及完整驱动签名/配置信息,适用于解决Win2000下USB设备无法识别、枚举失败或功能异常等典型问题,助力老旧系统延续USB外设支持能力。

weixin_35755640的博客 255

ehci、xhci、uhci规范

ehci、xhci、uhci规范,供软件、硬件设计使用,usb相关接口

USB

第 1 章 USB的来龙去脉 目录 1.1. USB是什么1.2. 为何要有USB 1.1. USB是什么 USB是Universal Serial Bus的缩写,中文译为通用串行总线。 所以,从字面意思上,善于思考的人,就问有疑问: 那么与此USB相比,其他还有哪些非串行的总线,以及和此通用的串行总线来说,其他还有哪些相对“不通用”的串行总线呢?

SdustLiYang的专栏 2301

VASP+机器学习快速收敛AIMD

本文介绍了如何利用VASP结合机器学习技术快速收敛AIMD(从头算分子动力学)模拟。首先,通过训练机器学习力场,生成关键文件如ML_ABN(包含结构数据集)、ML_FFN(存储回归结果)和ML_LOGFILE(记录训练日志)。接着,配置INCAR文件以设置计算参数,包括并行化、分子动力学和机器学习相关参数。KPOINTS文件用于定义K点网格。计算完成后,备份CONTCAR文件作为后续模拟的初始结构。最后,利用训练好的力场文件进行纯机器学习力场分子动力学模拟,并提交任务执行。

qq_44812865的博客 1405
上一篇: U-boot分析与移植(6)----U-boot--Makefile
下一篇: Linux下读写芯片的I2C寄存器
asmxpl
博客等级 码龄15年 9粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值