RK3568 USB驱动开发

news2024/9/22 17:31:15

一.USB的DTS配置说明

1.USB 2.0 控制器 DTS

1.1 USB 2.0 Host 控制器 DTS

USB 2.0 Host0 控制器 (EHCI & OHCI) 的DTS为例:

其中,EHCI 控制器的 compatible 固定为 “generic-ehci”,OHCI 控制器的 compatible 固定为 “genericohci”。并且,EHCI 和 OHCI 复用同样的 clocks 和 phys。属性 “power-domains” 并不是每种芯片都需要配 置,只有当芯片的 USB 2.0 Host 控制器支持 power-domains 功能时,才需要配置该属性。

usb_host0_ehci: usb@fe380000 {
 compatible = "generic-ehci";
 reg = <0x0 0xfe380000 0x0 0x20000>;
 interrupts = <GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH 0>;
 clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST0_ARB>,
 <&cru SCLK_USBPHY0_480M_SRC>;
 clock-names = "hclk_host0", "hclk_host0_arb", "usbphy0_480m";
 phys = <&u2phy0_host>;
 phy-names = "usb";
 power-domains = <&power RK356x_PD_PERIHP>;
 status = "disabled";
};
usb_host0_ohci: usb@fe3a0000 {
 compatible = "generic-ohci";
 reg = <0x0 0xfe3a0000 0x0 0x20000>;
 interrupts = <GIC_SPI 28 IRQ_TYPE_LEVEL_HIGH 0>;
 clocks = <&cru HCLK_HOST0>, <&cru HCLK_HOST0_ARB>,
 <&cru SCLK_USBPHY0_480M_SRC>;
 clock-names = "hclk_host0", "hclk_host0_arb", "usbphy0_480m";
 phys = <&u2phy0_host>;
 phy-names = "usb";
 power-domains = <&power RK356x、_PD_PERIHP>;
 status = "disabled";
};

RK356x HOST2 第DTS节点名称定义如下:

 RK356x HOST2 DTS 配置如下:

&u2phy1_otg {
       phy-supply = <&vcc5v0_host>;
       status = "okay";
};
&usb2phy1 {
       status = "okay";
};
&usb_host0_ehci {
       status = "okay";
};
&usb_host0_ohci {
       status = "okay";
};

2.USB 2.0 OTG 控制器 DTS

2.1.USB 2.0 OTG DTS (适配 dwc2 驱动):

usb20_otg: usb@ff580000 {
 compatible = "rockchip,rk3328-usb", "rockchip,rk3066-usb",
     "snps,dwc2";
 reg = <0x0 0xff580000 0x0 0x40000>;
 interrupts = <GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH>;
 clocks = <&cru HCLK_OTG>, <&cru HCLK_OTG_PMU>;
 clock-names = "otg", "otg_pmu";
 dr_mode = "otg";
 g-np-tx-fifo-size = <16>;
 g-rx-fifo-size = <275>;
 g-tx-fifo-size = <256 128 128 64 64 32>;
 g-use-dma;
 phys = <&u2phy_otg>;
 phy-names = "usb2-phy";
 status = "disabled";
};

dr_mode:必须配置为 "host", "peripheral" 或者 "otg";

g-rx-fifo-size:配置 Gadget mode 的 rx fifo 大小;

g-np-tx-fifo-size:配置 Gadget mode 的 non-periodic tx fifo 大小;

g-tx-fifo-size:配置 Gadget mode 的每个 IN 端点的 tx fifo 大小(端点 0 除外);

g-use-dma:使能 Gadget 驱动使用 DMA 传输;

phys:配置 PHY 节点;

phy-names: 必须配置为 "usb2-phy".

二.USB 3.0 控制器 DTS

1.USB 3.0 Host 控制器 DTS

USB 3.0 Host 控制器为 xHCI,集成于 DWC3 OTG IP 中,所以不用单独配置 dts,只需要配置 DWC3 节 点,并且设置 DWC3 的 dr_mode 属性为 dr_mode = "otg"或者 dr_mode = "host",就可以使能 xHCI 控制 器。

2.USB 3.0 OTG 控制器 DTS

usbdrd3_0: usb0 {
        compatible = "rockchip,rk3399-dwc3";
        clocks = <&cru SCLK_USB3OTG0_REF>, <&cru SCLK_USB3OTG0_SUSPEND>,
             <&cru ACLK_USB3OTG0>, <&cru ACLK_USB3_GRF>;
        clock-names = "ref_clk", "suspend_clk",
                  "bus_clk", "grf_clk";
        power-domains = <&power RK3399_PD_USB3>;
        resets = <&cru SRST_A_USB3_OTG0>;
        reset-names = "usb3-otg";
        #address-cells = <2>;

        #size-cells = <2>;

        ranges;
        status = "disabled";
        usbdrd_dwc3_0: dwc3@fe800000 {
            compatible = "snps,dwc3";
            reg = <0x0 0xfe800000 0x0 0x100000>;
            interrupts = <GIC_SPI 105 IRQ_TYPE_LEVEL_HIGH 0>;
            dr_mode = "otg";
            phys = <&u2phy0_otg>, <&tcphy0_usb3>;
            phy-names = "usb2-phy", "usb3-phy";
            phy_type = "utmi_wide";
            snps,dis_enblslpm_quirk;
            snps,dis-u2-freeclk-exists-quirk;
            snps,dis_u2_susphy_quirk;
            snps,dis-del-phy-power-chg-quirk;
            snps,tx-ipgap-linecheck-dis-quirk;
            snps,xhci-slow-suspend-quirk;
            snps,xhci-trb-ent-quirk;
            snps,usb3-warm-reset-on-resume-quirk;
            status = "disabled";       };
   };

USB 3.0 OTG DTS 包含了父节点 “usbdrd3_0” 和子节点 “usbdrd_dwc3_0”。其中,除了 RK3328/RK3228H外,所有支持 DWC3 控制器的芯片,父节点的 compatible 都要加上 “rockchip,rk3399-dwc3”。所有芯片的 子节点 compatible 都配置为 “snps,dwc3”。父节点的作用是,配置芯片级相关的属性,如:clocks,power-domains,reset。子节点的作用是,配置控制器相关的属性,其中的 quirk 属性,适用于所有芯片 的 DWC3 控制器。

 

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

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

相关文章

39.克鲁斯卡尔(Kruskal)算法

一言 已知n个顶点&#xff0c;选n-1条最短的边&#xff0c;不可成环。 概述 克鲁斯卡尔&#xff08;Kruskal&#xff09;算法是用来求加权连通图的最小生成树的算法。其基本思想是按照权值从小到大的顺序选择n-1条边&#xff0c;保证这n-1条边不构成回路。 这就要求要首先构…

写给Java/Android开发者的Python入门教程

1. 前言 对于Java/Android开发工程师来说&#xff0c;已经掌握了Java语言&#xff0c;这时再学其他语言(C/C除外)&#xff0c;都是比较容易的&#xff0c;可能花上几个小时就能入门了。 作为一个Android开发工程师&#xff0c;今天一时兴起&#xff0c;学了下Python&#xff0…

初识进程以及父子进程

一 进程概念 什么是进程呢&#xff1f;许多资料都说一个已经加载到内存的程序就叫进程&#xff0c;意思是只要代码到了内存就能跑起来了吗?接下来我就谈谈对进程概念的理解。 1 如何管理进程 我们可能运行多个进程&#xff0c;这些进程有些结束&#xff0c;有些要退出&#x…

yolov5自己的数据集制作

文章目录 一、制作数据集1、创建文件夹结构如下2、将之前的图片以及标注数据放入mydata文件夹3、新建一个mydata.yaml文件 二、基于数据集训练模型1、基于数据集训练模型2、开始根据制作好的数据集训练模型3、模型训练结束 三、部署模型 文章参考博主&#xff1a;风吹落叶花飘荡…

Power BI 傻瓜入门 6. 从动态数据源获取数据

本章内容将介绍 发现如何从关系数据库和非关系数据库中提取数据学习如何使用Power BI使用在线和实时数据源跨多个数据源应用分析服务使用Power BI通过静态和动态数据解决纠正措施 数据有时可能有点复杂。诚然&#xff0c;上传一个包含几个电子表格的文件&#xff0c;或者一个…

计算机中整数的补码表示及二进制数轮

为了同学们能理好的理解数在计算机内的表示&#xff0c;我们可以把计算机中的整数看成N位进制数的数轮&#xff0c;N一般为2的幂&#xff0c;如下&#xff1a; 我们来举个例子&#xff1a;如果用4位二进制来表示整数&#xff0c;则可以表示的整数范围为-8&#xff08;即&#x…

详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题

本文中将详细介绍如何使用Ipopt非线性求解器求解带约束的最优化问题&#xff0c;结合给出的带约束的最优化问题示例&#xff0c;给出相应的完整的C程序&#xff0c;并给出详细的解释和注释&#xff0c;以及编译规则等 一、Ipopt库的安装和测试 本部分内容在之前的文章《Ubuntu2…

STM32-LTC6804方案成熟BMS方案

方案下载链接&#xff01;&#xff01;https://mp.weixin.qq.com/s?__bizMzU2OTc4ODA4OA&mid2247549092&idx1&snc73855c4e3d5afddd8608d8528864f95&chksmfcfb1373cb8c9a65a4bd1f545a1a587af882f209e7ccbb8944f4d2514d241ca1d7fcc4615e10&token539106225&a…

【字符函数】

✨博客主页&#xff1a;小钱编程成长记 &#x1f388;博客专栏&#xff1a;进阶C语言 &#x1f388;相关博文&#xff1a;字符串函数&#xff08;一&#xff09;、字符串函数&#xff08;二&#xff09; 字符函数 字符函数1.字符分类函数1.1 iscntrl - 判断是否是控制字符1.2 i…

【GWO-KELM预测】基于灰狼算法优化核极限学习机回归预测研究(matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

【Java基础面试四十六】、 List<? super T>和List<? extends T>有什么区别?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a;问题 参考答案&#x…

蓝桥每日一题(day 4: 蓝桥592.门牌制作)--模拟--easy

#include <iostream> using namespace std; int main() {int res 0;for(int i 1; i < 2021; i ){int b i;while(b){if (b % 10 2) res ;b / 10;}}cout << res; return 0; }

FFmpeg和rtsp服务器搭建视频直播流服务

下面使用的是ubuntu的&#xff0c;window系统可以参考&#xff1a; 通过rtsp-simple-server和ffmpeg实现录屏并发布视频直播_rtsp simple server_病毒宇宇的博客-CSDN博客 一、安装rtsp-simple-server &#xff08;1&#xff09;下载rtsp-simple-server 下载地址&#xff1a;R…

搜索问答技术学习:基于知识图谱+基于搜索和机器阅读理解(MRC)

目录 一、问答系统应用分析 二、搜索问答技术与系统 &#xff08;一&#xff09;需求和信息分析 问答需求类型 多样的数据源 文本组织形态 &#xff08;二&#xff09;主要问答技术介绍 发展和成熟度分析 重点问答技术基础&#xff1a;KBQA和DeepQA KBQA&#xff08;…

Python高级技巧

十三、Python高级技巧 1. 闭包 解决全局变量问题&#xff1a; 代码在命名空间上&#xff08;变量定义&#xff09;不够干净、整洁全局变量又被修改的风险 定义&#xff1a; ​ 在函数嵌套的前提下&#xff0c;内部函数使用了外部函数的变量&#xff0c;并且外部函数返回了内部…

什么是内存泄漏,为什么threadlocal会造成内存泄漏?

内存泄漏&#xff1a;指的是应用程序中存在无用的对象或者资源没有被垃圾回收机制回收&#xff0c;从而导致内存占用不断增加&#xff0c;最终导致应用程序的崩溃。 jvm里对象的引用按照从强到弱&#xff0c;分为四个强&#xff0c;软&#xff0c;弱&#xff0c;虚。强引用不会…

YOLOv8改进实战 | 更换主干网络Backbone之PoolFormer篇

目录 一、PoolFormer二、代码实现2.1 添加PoolFormer网络2.2 注册PoolFormer网络2.3 配置yaml文件yolov8-PoolFormer.yaml2.3 模型验证2.4 模型训练三、总结一、PoolFormer 2022 CVPR 论文链接:MetaFormer Is Actually What You Need for Vision Pytorch code:poolformer

微信支付API

微信支付API 一、概念二、主要实现步骤 一、概念 主要经过小程序内调用登录接口、商户server调用支付统一下单、商户server调用再次签名&#xff0c;商户server接受支付通知&#xff0c;商户server查询支付结果。 二、主要实现步骤 1、小程序调用wx.login方法&#xff0c;获…

AD9371 官方例程之 tx_jesd 与 xcvr接口映射

文章目录 前言一、AD9371 ----> FMC_DP二、FMC_DP ----> FPGA_TX/RX三、rx_data_x and tx_data_x must be connected to the same channel四、ADRV9009 前言 axi_ad9371_tx_jesd --> util_ad9371_xcvr接口映射讲解 一、AD9371 ----> FMC_DP AD9371内部原理图 …

oracle实现搜索不区分大小写

<if test"code ! null and code ! ">and upper(code) like upper(%${code}%) </if>关键字upper