xhci 寄存器学习

xhci 寄存器介绍

查看linux 代码:

1733 /* There is one xhci_hcd structure per controller */
1734 struct xhci_hcd {
1735     struct usb_hcd *main_hcd;
1736     struct usb_hcd *shared_hcd;
1737     /* glue to PCI and HCD framework */
1738     struct xhci_cap_regs __iomem *cap_regs;
1739     struct xhci_op_regs __iomem *op_regs;
1740     struct xhci_run_regs __iomem *run_regs;
1741     struct xhci_doorbell_array __iomem *dba;
1742     /* Our HCD's current interrupter register set */
1743     struct  xhci_intr_reg __iomem *ir_set;

主要寄存器是:xhci_cap_regs, xhci_op_regs, xhci_run_regs,xhci_doorbell_array

  50 struct xhci_cap_regs {
  51     __le32  hc_capbase;
  52     __le32  hcs_params1;
  53     __le32  hcs_params2;
  54     __le32  hcs_params3;
  55     __le32  hcc_params;
  56     __le32  db_off;
  57     __le32  run_regs_off;
  58     __le32  hcc_params2; /* xhci 1.1 */
  59     /* Reserved up to (CAPLENGTH - 0x1C) */
  60 };

对应手册是
在这里插入图片描述

 176 struct xhci_op_regs {
 177     __le32  command;
 178     __le32  status;
 179     __le32  page_size;
 180     __le32  reserved1;
 181     __le32  reserved2;
 182     __le32  dev_notification;
 183     __le64  cmd_ring;
 184     /* rsvd: offset 0x20-2F */
 185     __le32  reserved3[4];
 186     __le64  dcbaa_ptr;
 187     __le32  config_reg;
 188     /* rsvd: offset 0x3C-3FF */
 189     __le32  reserved4[241];
 190     /* port 1 registers, which serve as a base address for other ports */
 191     __le32  port_status_base;
 192     __le32  port_power_base;
 193     __le32  port_link_base;
 194     __le32  reserved5;
 195     /* registers for ports 2-255 */
 196     __le32  reserved6[NUM_PORT_REGS*254];
 197 };

对用手册是:

在这里插入图片描述
在这里插入图片描述
其中端口寄存器:
在这里插入图片描述
在这里插入图片描述

寄存器读写实操

root@raoxu-PC:/sys# lspci | grep -i usb
00:14.0 USB controller: Intel Corporation Comet Lake PCH-V USB Controller
root@raoxu-PC:/sys# lspci -s 00:14.0 -v
00:14.0 USB controller: Intel Corporation Comet Lake PCH-V USB Controller (prog-if 30 [XHCI])
        Subsystem: ASRock Incorporation Device a3af
        Flags: bus master, medium devsel, latency 0, IRQ 122
        Memory at 99330000 (64-bit, non-prefetchable) [size=64K]
        Capabilities: [70] Power Management version 2
        Capabilities: [80] MSI: Enable+ Count=1/8 Maskable- 64bit+
        Kernel driver in use: xhci_hcd

首先查看xhci 寄存器基地址为:0x99330000
也可以通过其他方式获取到:

cat /proc/iomem | grep xhci
    99330000-9933ffff : xhci-hcd

读取 Operational Register Space 首地址:
在这里插入图片描述
在这里插入图片描述
根据代码和手册可以找到,需要找到Host Controller Operational Registers的地址偏移为:

root@raoxu-PC:/sys# busybox devmem 0x99330000 
0x01000080

读出来的偏移值0x80
那么偏移地址就是0x99330080

那么如何得到port的地址呢:
在这里插入图片描述
根据介绍,我们只需要根据port num 进行计算就可以了。
以我插入的鼠标为例:

/:  Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 5000M
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
    |__ Port 1: Dev 2, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M
    |__ Port 5: Dev 3, If 0, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 5: Dev 3, If 1, Class=Human Interface Device, Driver=usbhid, 12M
    |__ Port 10: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
        |__ Port 3: Dev 8, If 0, Class=Human Interface Device, Driver=usbhid, 1.5M

如何port 为 10
那么基地址为:addr = 0x99330080 + (0x400 + 0x10 * (10 -1)) = 0x99330510
那么读取状态:

root@raoxu-PC:/sys# busybox devmem 0x99330510 
0x00000E03

在这里插入图片描述
最高位写1 进行复位

root@raoxu-PC:/sys# busybox devmem 0x99330510 32 0x80000E03
root@raoxu-PC:/sys# busybox devmem 0x99330510 
0x000006E1

输入命令可以看到设备复位了

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

为你的音视频创作提供助力,好莱坞电影专业音效素材全集

一、素材描述 本套好莱坞电影音效素材全集,来自欧美等国专业音频制作公司和好莱坞电影制作机构多年创作积累的音效库,经过专家精选并配以中文解释,分享给广大业内人士和业余爱好者使用,不失为难得的专业音效素材,为你…

2024年4月国产数据库大事记-墨天轮

本文为墨天轮社区整理的2024年4月国产数据库大事件和重要产品发布消息。 目录 2024年4月国产数据库大事记 TOP102024年4月国产数据库大事记(时间线)产品/版本发布兼容认证代表厂商大事记排行榜新增数据库厂商活动相关资料 2024年4月国产数据库大事记 …

Vue3的CRUD模版(附Demo)

目录 前言模版 前言 用惯Vue2之后,在碰Vue3后,整体还是有所区别 此文主要做一个回顾总结 假设界面如下: 可CRUD,对应的新增 添加一些必选项: 其中数据库的设计如下: 模版 对应需要注意参数位置、初始…

Python 全栈系列243 S2S flask_celery

说明 按现有的几个架构部件,构建数据流。 S Redis Stream。这个可以作为缓冲队列和简单任务队列,速度非常快,至少是万条/秒的速度。 Q RabbitMQ。这个作为任务队列,消息也主要是元数据。读速比较慢,但有一些特性&a…

【激活函数--中】激活函数和阶跃函数的可视化及对比

文章目录 一、Python中绘制阶跃函数的图形二、实现和可视化Sigmoid函数2.1 Python实现2.2 可视化Sigmoid函数 三、比较Sigmoid函数与阶跃函数3.1 Sigmoid函数与阶跃函数的差异3.2 Sigmoid函数与阶跃函数的共同点 一、Python中绘制阶跃函数的图形 在Python中实现阶跃函数的代码…

智能AI个人名片小程序源码系统 带完整的安装代码包以及搭建部署教程

在当今数字化时代,个人名片不再仅仅是一张简单的纸质卡片,而是演变成了一种更加智能、便捷的数字化工具。为了满足这一需求,小编给大家分享一款智能AI个人名片小程序源码系统,该系统不仅提供了完整的安装代码包,还附带…

(41)5.6-5.8数据结构(栈和队列的应用和数组)

1.栈在括号匹配中的应用 #define _CRT_SECURE_NO_WARNINGS #define MaxSize 10 typedef struct { char data[MaxSize];//静态数组存放栈中元素 int top; //栈顶指针 }SqStack;//初始化栈 void InitStack(SqStack& S);//判断栈是否为空 bool StackEmpty(SqStack S…

轮式机器人简介

迄今为止,轮子一般是移动机器人学和人造交通车辆中最流行的运动机构。它可达到很高的效率, 如图所示, 而且用比较简单的机械就可实现它的制作。 另外,在轮式机器人设计中,平衡通常不是一个研究问题。 因为在所有时间里,轮式机器人一般都被设计成在任何时间里所有轮子均与地接…

vue3父子组件相互调用方法详解

💟 上一篇文章 Vue2中父子组件互相传值和方法调用 📝 系列专栏 vue从基础到起飞 目录 1、前言 2、子组件调用父组件方法(setup组合式) 2.1 父组件Father.vue 2.2 子组件Child.vue 3、父组件调用子组件方法(setup组…

每天五分钟计算机视觉:使用极大值抑制来寻找最优的目标检测对象

本文重点 在目标检测领域,当模型预测出多个候选框(bounding boxes)时,我们需要一种方法来确定哪些候选框最有可能表示真实的目标。由于模型的不完美性和图像中目标的重叠性,往往会有多个候选框对应于同一个目标。此时,极大值抑制(Non-Maximum Suppression,NMS)技术就…

租用香港Windows服务器要注意的几种安全防护措施

在网络世界里,永远没有绝对的安全,但我们可以通过采取适当的措施使风险降低。对于选择香港Windows服务器租赁的企业和个人来说,保护数据的安全性与隐私至关重要。下面将介绍几种关键的租用香港Windows服务器时应注意的安全防护措施。 1.使用本…

汽车线控转向系统介绍

汽车线控转向系统由方向盘总成、转向执行总成和主控制器(ECU)三个主要部分以及自动防故障系统、电源等辅助系统组成。 线控转向系统(Steering-By-Wire),取消了方向盘和转向车轮之间的机械连接部件,彻底摆脱了机械固件的限制,完全由电能来实现…

【qt】联合容器和集合容器

联合容器和集合容器 一.QMap1.应用场景2.添加数据3.删除数据4.修改数据5.查找数据6.数据个数7.是否包含8.返回所有的键名 二.QHash1.应用场景: 三.QMultiMap四.QMultiHash五.QSet1.应用场景2.交集3.并集4.差集 总结: 一.QMap 1.应用场景 QMap的底层实现…

智能座舱语音助手产品方案

一、用户调研与痛点分析 1.目标用户分析 用户画像 性别女性年龄50地域2-3线城市职业退休或退居二线教育中专、 大专、 本科财务家庭财务管理者爱好享受生活、 照顾家庭标签有闲有小钱二、产品定位与卖点提炼 购车目的 愉悦自我, 专属于自己的座驾: 家…

接口自动化入门: Requests请求头设置详解!

在进行接口自动化测试时,设置请求头是非常重要的一步。请求头可以包含各种信息,例如身份验证、内容类型、接受语言等。在实际的测试中,我们使用Python的Requests库来发送HTTP请求,并设置请求头来模拟不同的场景和需求。 下面将通…

【系统架构师】-案例篇(八)数据流图

数据流:数据流是系统中数据的流动,它可以是输入、输出或存储在系统中的数据。 数据处理过程:数据处理过程是对数据进行处理的单元,可以是一个物理设备或软件模块。 数据存储:数据存储是系统中存储数据的单元&#xff0…

共享云桌面如何助力企业信息化和数字化?

随着科技的飞速发展,信息化和数字化已经成为企业转型的重要方向。共享云桌面作为一种新兴的信息化工具,正以其独特的优势助力企业实现信息化和数字化的目标。本文将详细探讨共享云桌面如何助力企业信息化和数字化的过程,以及它所带来的效益。…

使用图网络和视频嵌入预测物理场

文章目录 一、说明二、为什么要预测?三、流体动力学模拟的可视化四、DeepMind神经网络建模五、图形编码六、图形处理器七、图形解码器八、具有不同弹簧常数的轨迹可视化九、预测的物理编码和推出轨迹 一、说明 这是一篇国外流体力学专家在可视化流体物理属性的设计…

vcomp140.dll丢失怎么修复,四种vcomp140.dll丢失的修复办法

vcomp140.dll文件丢失可能会导致一些程序无法正常运行。这些程序通常是使用Microsoft Visual Studio 2015开发的,并且依赖于该动态链接库文件来处理并行计算相关的功能。一旦vcomp140.dll文件丢失或损坏,这些程序在启动或执行特定任务时可能会遇到各种问…

视频批量剪辑神器,一键修改尺寸,轻松打造专业视觉盛宴!

视频已经成为我们生活中不可或缺的一部分。无论是制作精美的短视频,还是编辑专业的宣传片,视频剪辑都是一项必不可少的工作。然而,面对大量的视频素材,如何高效地进行批量剪辑,特别是修改视频尺寸,成为了许…