USB EHCI知识点

news2024/11/16 15:33:29

1 EHCI和Companion UHCI端口切换
1.1 ICH6 EHCI
如果PCI控制器包括了伴随控制器,那么USB 2.0 HC(Host Controller)必须作为一个多功能PCI设备使用。伴随HC的功能码必须小于EHCI HC功能码。如果一个 PCI设备仅仅包括一个EHCI控制器(即没有其他伴随控制器和其它PCI功能)那么根据PCI规范, EHCI HC功能码必须是0。 结构参数寄存器HCSPARAMS的 N_CC(Num of Companion Controllers)域指示EHCI HC是否包括伴随HC。当N_CC域有一个非0值时表示EHCI HC存在伴随HC,如果N_CC域为0时,EHCI HC不包含伴随HC。

1.2 USB Rate Matching Hub
If the SoC has USB Rate Matching Hub (RMH), then EHCI does not need companion OHCI, the RMH connects to port1 of 4-port EHCI. The USB RMH Think Time is equal to hub descriptor register of 8 full-speed bit times. Refer to Atom C2000 EHCI chapter.

1.3 Companion HC和嵌入式TT的区别
本章讨论的是PC机的USB Host架构,对于嵌入式系统来说,由于EHCI(ARC、DWC2、TDI)在RootHub中集成了TT,所以不需要执行端口切换,仅仅使用宏ehci_is_TDI(ehci)进行判断即可。

当EHCI RootHub集成了TT时,由于标准的EHCI PORTSCx寄存器没有外接设备速度描述,所以Vendor针对这个问题进行了扩展:
- 一种是使用PORTSCx的B27...26作为外接设备的速度显示,for example 40nm iMX 6Quad
- 另外一种是扩展一个额外的寄存器HOSTPCx(Host Port Control,which are extensions to PORTSCx,Linux内核关键字是has_hostpc),主要包含PHCD(PHy Clock Disable)和PSPD(Port SPeed Detection)2个bit位,for example Intel Moorestown SoC (45nm Atom Z600, released on May 05, 2010)

1.4 github NT5.1
IoConnectInterrupt()
base/ntos/io/pnpmgr
drivers/wdm/usb/driver/hub.pnp/usbhub.c
USBH_SubmitInterruptTransfer()
当port连接改变时,usbhub调用USBH_IoInvalidateDeviceRelations()通知PNP管理器,接下来PNP管理器通知usbccgp驱动去读取设备和配置描述符,并创建PDO。
drivers/wdm/usb/usbccgp/parent.c
TryGetConfigDescriptor()
PNP: IoInvalidateDeviceRelations()
创建类PDO并通知PNP管理器加载USB类驱动。

2 EHCI知识点
2.1 IAAD - Interrupt on Async Advance Doorbell
不同类型的传输如何处理unlink urb
- unlink control/bulk urb,调用start_unlink_async()处理,两阶段处理,先从链表中删除,再通知HC更新缓冲的地址(作用类似于更新CPU cache的函数flush_all_cache()),HC更新完成后会触发STS_IAA中断,通知CPU已经安全unlink了
- unlink interrupt urb,可以参考ehci_urb_dequeue()以及qh_completions()中的处理
- unlink isochronous urb,可以参考ehci_urb_dequeue()以及scan_periodic(),itd_complete()中的处理
Figure 2-1 Generic Queue Head Unlink Scenario

[PATCH 17/25] USB: EHCI: use hrtimer for the IAA watchdog
https://www.spinics.net/lists/linux-usb/msg67160.html

2.2 Watchdog Timer
Watchdog Timer - 主要用于发现和处理EHCI irq lost(主要给Isochronous或者对于irq有bug的EHCI使用need_io_watchdog强制打开)的情况
ehci_irq()
ehci_work() - 假如EHCI irq lost,这个函数也可以充当polling的角色
turn_on_io_watchdog()

3 SoC showcase
3.1 Amlogic 28nm S912
S912 was released in 2016. One dwc2 OTG 0xC900_0000 and one dwc2 EHCI 0xC910_0000. Phicomm OTT Box T1 used S912.

3.2 Atmel SAMA7G54
SAMA7G54 was released in May 2022. It integrated 3-port MPH EHCI, port1 and port2 are shared with two independent USB devices.

UDPHS_CTRL.bit8 of each USB device instance is used to mux EHCI port1 or port2 with USB device. UDPHS means USB Device High Speed Port. Refer to SAMA7G54 datasheet 71.5.2 UTMI Transceiver Sharing.

UHPHS_OHCI: 0x0040_0000
UHPHS_EHCI: 0x0050_0000
UDPHSA: 0xE081_4000
UDPHSB: 0xE081_8000
TCPCA: 0xE084_0000
TCPCB: 0xE084_4000

Atmel SAM V71 (vehicle) has a single port USB mini host, every host pipe has an independent FIFO. Host Address 1/2/3 Register include 7bits USB device address.

3.3 iMX51
iMX51 was released in 2009. Refer to github imx51.dtsi.
QSB: Quick Start Board
SABRE: NXP Smart Application Blueprint for Rapid Engineering
USBOTG: 0x73f8_0000, ARC
USBH1: 0x73f8_0200, USB3317
USBH2: 0x73f8_0400
USBH3: 0x73f8_0600

3.4 iMX 6Quad SABRE
iMX 6 was released in 2011. Refer to github imx6qdl.dtsi, 6qdl means 6Quad and 6DualLite.
iMX 6Quad有4个Chipidea SPH (Single Port Host) USB EHCI,其中第一个SPH具有OTG功能,第3和第4个是HSIC。
USBOTG: 0x0218_4000
USBH1: 0x0218_4200
USBH2: 0x0218_4400
USBH3: 0x0218_4600
USBPHY1: 0x020C_9000
USBPHY2: 0x020C_A000

3.5 ISP1362
Refer to datasheet: 11.3 USB ports
2-port MPH ISP1362 = PSHC + ISP1181B

Refer to datasheet: 11.6 Features of the interrupt transfer
An interrupt transaction causes an interrupt to the CPU only if the transaction is ACK-ed or has error conditions, such as STALL or no respond. An ACK condition occurs if data is received on the IN token or data is sent out on the OUT token.

ISP: Philips' integrated host solution pairs
Firms introduce USB host controllers
https://www.eetimes.com/firms-introduce-usb-host-controllers/#

4 Abbreviations
ARC:Argonant RISC Core
Atmel SAMA7G54: SAM means Smart ARM-based Microcontroller Cortex A7
CCGP:Windows USB Common Class Generic Parent,Linux内核类似的驱动就是usb_generic_driver(generic.c)
CCGP MI_:Common Class Generic Parent Multi Interface
CYPRESS TD_Poll:Task Dispatch
giveback:归还 - ehci_urb_done() -> usb_hcd_giveback_urb()。USB PD中的giveback(= 1)指sink会响应source的GotoMin请求,返还部分电力给source。
halt:停车或者站住,来自于德语;USB endpoint停止运行,返回stall handshake。recovery方法:control ep接收下一次SETUP PID时,自动清除halt标志;其它ep使用clear_feature复位ep halt。
IAAD:EHCI Interrupt on Async Advance Doorbell
ISP1161:Philips' Integrated host Solution Pairs 1161,“Firms introduce USB host controllers”,https://www.eetimes.com/document.asp?doc_id=1290054
MPH:USB Multi-Port Host,Intel的MPH的Port1作为OTG使用,和DWC3(仅作为slave)使用一个MUX开关来控制Host还是UDC连接到该Port1
SL811HS:Cypress/ScanLogic 811 Host/Slave,性能上与ISP1161(Integrated host Solution Pairs 1161)相当
SPH:USB Single-Port Host
TDI:TransDimension Inc.,该公司首先发明了将TT集成到EHCI RootHub中的方法,这样对于嵌入式系统来说,就省去了OHCI/UHCI的硬件,同时降低了成本,作为对该公司的纪念,Linux内核定义了宏ehci_is_TDI(ehci);产品UHC124表示USB Host Controller;收购了ARC USB技术;现已被chipidea收购,chipidea又被mips收购
TT:Transaction Translator(事务转换器,将USB2.0的包转换成USB1.1的包)
USB Host枚举时-71错误码可能原因:DP和DM走线太长导致眼图差;DP和DM接反了 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/623489.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一站式完成车牌识别任务:从模型优化到端侧部署

交通领域的应用智能化不断往纵深发展,其中最为成熟的车牌识别早已融入人们的日常生活之中,在高速公路电子收费系统、停车场等场景中随处可见。一些企业在具体业务中倾向采用开源方案降低研发成本,但现有公开的方案中少有完成端到端的车牌应用…

Blindly Assess Image Quality in the Wild Guided by ASelf-Adaptive Hyper Network

Abstract 真实失真图像的盲图像质量评估(BIQA)一直是一个具有挑战性的问题,因为在野外采集的图像包含各种各样的内容和各种类型的失真。目前绝大多数的BIQA方法都专注于如何预测合成图像的质量,但当应用于真实世界的失真图像时却失败了。为了应对这一挑…

Android Activity和Fragment的对比

参考来源 参考来源 参考来源 状态方法对比 onAttach() 作用:fragment已经关联到activity,这个时候 activity已经传进来了, 获得activity的传递的值 就可以进行 与activity的通信里, 当然也可以使用getActivity(),前提是这个fragm…

在CSDN逮到一个阿里10年老测试,聊过之后收益良多...

老话说的好,这人呐,一但在某个领域鲜有敌手了,就会闲得蛋疼。 前几天我在上班摸鱼刷CSDN的时候认识了一位阿里测试大佬,在阿里工作了10年,因为本人天赋比较高,平时工作也兢兢业业,现在企业内有…

ChatGPT - 基于 ChatGLM-6B 搭建私有 ChatGPT 在线聊天服务

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://blog.csdn.net/caroline_wendy/article/details/131104546 Paper:GLM: General Language Model Pretraining with Autoregressive Blank Infilling 一篇于2022年发表在ACL会…

平面坐标变换(单应性变换/Homography变换)

单应性(homography)变换用来描述物体在两个平面之间的转换关系,可以用于描述平移、翻转、缩放、旋转、仿射变换等。其是对应齐次坐标下的线性变换,可以通过矩阵表示: 其中,H为单应性变换矩阵,假设变换前坐标为(x,y)&am…

指针--按值调用与模拟按引用调用,非法访问内存

在前面的章节介绍过普通变量作函数参数的方法&#xff0c;它其实是一种按值调用&#xff08;Call by Value&#xff09;的方法&#xff0c;即程序将函数调用语句中的实参的一份副本传给函数的形参。 例题&#xff1a;演示程序按值调用的例子。 #include <stdio.h> void…

关于ASO优化的搜索指数

搜索指数指数可以看出该关键词的热度&#xff0c;每一个关键词都对应着相应的指数&#xff0c;它代表着有多少人在搜索这个词。同一个词搜索的人越多&#xff0c;该关键词的热度指数就越高。 在应用商店内每天都会有用户去搜索应用&#xff0c;那么关键词的热度值至少是100。热…

三分钟免费将 Claude API 接入个人服务

首先我们介绍一下今天的主角 Claude Claude 是最近新开放的一款 AI 聊天机器人&#xff0c;是世界上最大的语言模型之一&#xff0c;比之前的一些模型如 GPT-3 要强大得多&#xff0c;因此 Claude 被认为是 ChatGPT 最有力的竞争对手。Claude 的研发公司是专注人工智能安全和研…

干货|SpringCloud-Eureka注册中心、服务提供者与消费者

内容速览&#xff1a; 一、关于注册中心、服务注册、服务发现 1问&#xff1a;为什么需要注册中心&#xff1f;2问&#xff1a;什么是服务注册&#xff1f;3问&#xff1a;什么是服务发现&#xff1f; 二、关于 Eureka 实现服务注册与服务发现 1.Eureka的特点2.Eureka注册中心…

Linux防火墙学习笔记3

iptables链的概念&#xff1a; 当客户端访问服务器端的Web服务的时候&#xff0c;客户端发送请求报文到网卡&#xff0c;而TCP/IP协议栈是属于内核的一部分。客户端的请求报文会通过内核的TCP协议传输到用户空间的Web服务&#xff0c;而客户端报文的目的地址为Web服务器所监听的…

裸辞后,过于真实...

前言 我从事软件测试行业&#xff0c;我仅从个人体验上说一下裸辞一个月的心路历程。 本人从事软件测试行业9年&#xff0c;主流测试软件都会用&#xff0c;功能&#xff0c;性能&#xff0c;接口&#xff0c;自动化测试都能独立搞定&#xff0c;近5年测试管理经验。年龄31岁…

城市内涝的原因及解决措施

城市内涝是城市面临的一个严重问题&#xff0c;它不仅会影响城市的交通、生产和生活&#xff0c;还会对城市的环境和生态造成破坏。 城市内涝是指由于强降水或连续性降水超过城市排水能力致使城市内产生积水灾害的现象。造成内涝的客观原因是降雨强度大&#xff0c;范围集中。…

Stable Diffusion使用入门教程

本文参考bilibili的链接&#xff1a;B站第一套系统的AI绘画课&#xff01;零基础学会Stable Diffusion&#xff0c;这绝对是你看过的最容易上手的AI绘画教程 | SD WebUI 保姆级攻略_哔哩哔哩_bilibili 目录 一、prompt提示词 1、概况 2、prompt分类 3、提示词的权重分配 4、…

使用 ChatGPT(简单)+ GitHub 存储库创建 C# 聊天机器人

在本指南中&#xff0c;我们将深入探讨使用 ChatGPT 和 C# 构建聊天机器人的过程。我们将涵盖从设置 ChatGPT API 访问到部署聊天机器人的所有内容。让我们开始吧&#xff01; 最后你会发现 GitHub Repo 设置您的 ChatGPT API 访问权限 在我们开始构建我们的聊天机器人之前&…

day4 ARM异常处理

目录 异常 概念 处理机制 ARM异常源 ARM异常模式 ARM异常响应 异常向量表 FIQ和IRQ ARM微架构 指令流水线 多核处理器 异常 概念 处理器在正常执行程序的过程中可能会遇到一些不正常的事件发生这时处理器就要将当前的程序暂停下来转而去处理这个异常的时间异常事件处…

为什么CRM一定要走行业化?

很多企业、很多销售对CRM的负面评价集中在不够贴合行业、不人性化&#xff0c;也就是功能不够细分和实用。因为CRM几乎是所有企业管理系统中最贴近业务实际的&#xff0c;但各行各业的业务千差万别&#xff0c;所以功能完备、使用满意度高的CRM一定是深度行业化、与不同行业业务…

计算机网络第三章——数据链路层(上)

提示&#xff1a;节物风光不相待。桑田碧海须臾改 文章目录 前言3.1.1 数据链路层功能数据链路层功能概述 3.2.1 封装成帧和透明传输封装成帧透明传输组帧的四种方式字符计数法字符填充法零比特填充法违规编码法 3.3.1 差错控制&#xff08;检错编码&#xff09;奇偶校验码CRC循…

【编程语言 · C语言 · while语句】

​while 语句 循环 在前面我们了解到, 程序在运行时可以通过判断, 检验条件作出选择。此处&#xff0c;程序还必须能够重复&#xff0c; 也就是反复执行一段指令&#xff0c; 直到满足某个条件为止。 while 语句 while语句可以执行循环结构。 语法&#xff1a; while(表达…

6.8 互斥锁/读写锁的概念及使用、死锁的避免

目录 线程通讯-互斥 互斥锁初始化-pthread_mutex_init 互斥锁销毁pthread_mutex_destroy 申请锁-pthread_mutex_lock 释放锁-pthread_mutex_unlock 读写锁 死锁的避免 ​编辑 条件变量 线程的GDB调试 笔记 线程的互斥和同步 临界资源概念&#xff1a; 互斥锁的创…