0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入解析RK3588 U-Boot板级文件:evb_rk3588.c核心逻辑拆解

jf_44130326 来源:Linux1024 2026-02-24 15:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

嵌入式开发领域,瑞芯微RK3588凭借超强的算力、丰富的接口和广泛的场景适配性,成为高端边缘计算、消费电子项目的热门选择。而U-Boot作为嵌入式系统第一道门,负责硬件初始化、引导内核启动,其板级适配代码直接决定了芯片硬件能力的落地。

今天我们聚焦RK3588评估板(EVB)的核心板级文件——u-boot/board/rockchip/evb_rk3588/evb_rk3588.c拆解这份代码的底层逻辑,搞懂RK3588USB功能是如何在U-Boot中被初始化和管理的。

wKgZPGmOXcqANRrfAAAv0f_A8Ck906.png

一、文件定位:RK3588 USB功能的板级适配基石

evb_rk3588.cRockchipRK3588评估板定制的U-Boot板级适配文件,核心职责是RK3588USB DWC3控制器提供板级初始化和管理逻辑,是评估板USB功能能正常工作的核心保障。

具体来说,这份文件的核心价值体现在3点:

1.适配瑞芯微RK3588USB OTG控制器(基于DWC3架构),实现硬件复位、参数配置等底层操作;

2.支撑USB Gadget(设备模式)功能,是瑞芯微Rockusb协议(刷机/调试专用)的底层依赖;

3.处理USB 3.0/2.0模式的兼容逻辑,包括PHY初始化失败时的降级策略(USB3.0→USB2.0),保证基础功能不丢失。

简单讲:没有这份文件,RK3588评估板的USB刷机、USB调试等核心功能,在U-Boot阶段就无法正常工作。

二、逐行拆解:核心宏定义与函数功能

这份文件的代码围绕“USB控制器适配展开,我们从宏定义、全局配置、核心函数三个维度,逐一解析其功能。

1.硬件相关宏定义:操作时钟与复位的地址钥匙

#defineCRU_BASE0xfd7c0000#defineCRU_SOFTRST_CON420x0aa8

RK3588的硬件操作依赖时钟复位单元(CRU,这两个宏是操作USB OTG控制器复位的关键:

CRU_BASECRU模块的基地址,所有时钟、复位寄存器都基于此地址访问;

CRU_SOFTRST_CON42USB OTG控制器的软复位寄存器偏移量,写入特定值可触发/释放复位。

这是嵌入式开发的典型设计:通过物理地址直接操作硬件寄存器,实现对底层硬件的控制。

2.全局配置结构体:DWC3控制器的参数清单

staticstructdwc3_device dwc3_device_data = {.maximum_speed = USB_SPEED_SUPER,.base=0xfc000000,.dr_mode = USB_DR_MODE_PERIPHERAL,.index =0,.dis_u2_susphy_quirk =1,.dis_u1u2_quirk =1,.usb2_phyif_utmi_width =16,};

这是给DWC3 USB控制器的初始化参数,每一项都针对RK3588的硬件特性定制:

maximum_speed:默认开启USB 3.0超高速(SUPER);

dr_mode:强制工作在设备模式(而非主机模式),因为U-Boot阶段USB主要用于刷机/调试;

dis_u2_susphy_quirk/dis_u1u2_quirk:关闭USB2.0 PHY休眠、U1/U2节能模式,避免初始化失败或稳定性问题;

usb2_phyif_utmi_width:配置USB2.0 PHY接口宽度为16位,匹配RK3588的硬件设计。

3.核心函数解析:USB功能的核心操作逻辑

1usb_gadget_handle_interruptsUSB中断的响应入口

intusb_gadget_handle_interrupts(intindex){dwc3_uboot_handle_interrupt(0);return0;}

功能:处理USB Gadget模式下的中断请求。

U-Boot运行时,USB设备模式会产生各类中断(比如数据传输完成、设备枚举),该函数是中断处理的入口”——内部调用U-Boot通用DWC3驱动的中断处理函数,确保中断被及时响应,保证USB数据传输不中断。

2rkusb_usb3_capableUSB3.0能力的判断开关

boolrkusb_usb3_capable(void){returntrue;}

功能:告知上层逻辑(如Rockusb协议),当前板子支持USB 3.0

Rockusb是瑞芯微定制的USB协议(用于刷机、烧录固件),该函数直接返回true,表示RK3588评估板硬件支持USB 3.0,上层可启用高速传输模式,提升刷机/调试效率。

3usb_reset_otg_controllerUSB控制器的复位操作

staticvoidusb_reset_otg_controller(void){writel(0x00100010,CRU_BASE+CRU_SOFTRST_CON42);mdelay(1);writel(0x00100000,CRU_BASE+CRU_SOFTRST_CON42);mdelay(1);}

功能:对USB OTG控制器执行软复位,清除硬件异常状态。

硬件初始化前,复位是必备步骤:

1.向复位寄存器写入0x00100010,触发OTG控制器复位;

2.延时1ms,确保复位动作完成;

3.写入0x00100000释放复位;

4.再延时1ms,保证控制器稳定运行。

这一步能解决控制器残留的异常状态,为后续初始化铺路,是嵌入式硬件初始化的常规操作

4board_usb_initUSB初始化的核心入口

intboard_usb_init(intindex,enumusb_init_typeinit){u32 ret =0;usb_reset_otg_controller();// 先复位控制器#ifdefined(CONFIG_SUPPORT_USBPLUG)// 启用USB插拔检测时,默认降级为USB2.0dwc3_device_data.maximum_speed = USB_SPEED_HIGH;if(rkusb_switch_usb3_enabled()) {// 若开启USB3.0,尝试初始化USB3.0 PHYdwc3_device_data.maximum_speed = USB_SPEED_SUPER;ret = rockchip_u3phy_uboot_init();if(ret) {// PHY初始化失败,强制USB2.0rkusb_force_to_usb2(true);dwc3_device_data.maximum_speed = USB_SPEED_HIGH;}}#else// 未启用插拔检测,直接初始化USB3.0 PHYret = rockchip_u3phy_uboot_init();if(ret) {// 失败则降级为USB2.0rkusb_force_to_usb2(true);dwc3_device_data.maximum_speed = USB_SPEED_HIGH;}#endif// 调用通用驱动完成DWC3控制器初始化returndwc3_uboot_init(&dwc3_device_data);}

功能U-Boot板级USB初始化的核心函数,是USB控制器能工作的总开关

执行流程拆解:

1.先复位控制器,清理初始状态;

2.若开启CONFIG_SUPPORT_USBPLUGUSB插拔检测):

先默认设置为USB2.0高速模式,再检查是否启用USB3.0

尝试初始化USB3.0 PHY,失败则强制降级为USB2.0

3.若未开启插拔检测:直接初始化USB3.0 PHY,失败则降级;

4.最后调用U-Boot通用DWC3驱动的初始化函数,完成控制器配置。

这个函数的设计体现了嵌入式开发的容错思想:优先尝试高性能模式(USB3.0),失败则降级到基础模式(USB2.0),保证核心功能不丢失。

5board_usb_cleanup(条件编译):USB资源的清理入口

#ifdefined(CONFIG_SUPPORT_USBPLUG)intboard_usb_cleanup(intindex,enumusb_init_typeinit){dwc3_uboot_exit(index);return0;}#endif

功能:仅在启用USB插拔检测时生效,负责清理USB控制器资源。

USB设备插拔时,需要释放旧的控制器资源,该函数调用通用驱动的退出函数,保证多次插拔时USB功能的稳定性。

三、USB功能异常排查流程图:快速定位问题

U-Boot阶段USB功能异常(刷机失败、调试无响应)的排查流程图,直接对照即可快速缩小故障范围,适配evb_rk3588.c的核心逻辑:

wKgZPGmOXcqABG3pAAHtnQtm430238.png

四、总结:嵌入式板级适配的核心思路

evb_rk3588.c虽代码量不大,但浓缩了嵌入式板级适配的核心思想:

1.分层设计:硬件无关的逻辑交给U-Boot通用驱动(如DWC3驱动),硬件相关的细节(复位、PHY配置)交给板级文件;

2.容错设计:关键功能(如USB3.0)做降级兼容,保证基础功能可用;

3.硬件直操:通过物理地址操作寄存器,实现对底层硬件的精准控制。

对于RK3588开发者来说,理解这份代码不仅能解决USB初始化失败、刷机异常等问题,更能掌握板级适配的核心逻辑——把通用驱动和具体硬件结合,让芯片的能力真正落地。

最后,留一个互动问题:你在做RK3588开发时,遇到过USB初始化失败的问题吗?评论区聊聊你的排坑经验~

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式
    +关注

    关注

    5209

    文章

    20625

    浏览量

    336758
  • 评估板
    +关注

    关注

    1

    文章

    1028

    浏览量

    31318
  • RK3588
    +关注

    关注

    8

    文章

    585

    浏览量

    7540
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    瑞芯微RK3588开发RK3588 EVBRK3588S EVB解读

    瑞芯微RK3588开发RK3588 EVBRK3588S EVB解读 瑞芯微旗舰芯
    的头像 发表于 09-22 15:54 2.3w次阅读
    瑞芯微<b class='flag-5'>RK3588</b>开发<b class='flag-5'>板</b><b class='flag-5'>RK3588</b> <b class='flag-5'>EVB</b>和<b class='flag-5'>RK3588</b>S <b class='flag-5'>EVB</b>解读

    RK3588 EVB开发原理图讲解【八】 RK3588 power Tree

    GPU负载高时自动通知RK860-2调高CPU电压 RK3588 Power Tree完整版图太大,截图看不完,需要的可以下载附件完成版。 RK3588 EVB开发
    发表于 03-01 11:38

    RK3588 EVB 开发介绍

    行业AIoT终端设备。RK3588 EVB功能配置表 2. RK3588S EVB:更轻薄 消费RK3
    发表于 03-16 16:39

    RK3588 EVB 用户使用指南

    本文档主要介绍 RK3588 EVB 基本功能和硬件特性、多功能硬件配置、软件调试操作使用方法,旨在帮助调试人员更快、更准确地使用 RK3588 EVB,熟悉
    发表于 03-16 16:57

    RK3588J和RK3588是什么关系?

    RK3588J是不是一个开发的名字,里面的SOC是RK3588?还是RK3588J属于RK3588的子系列?
    发表于 03-13 14:22

    RK3588RK3588S之间的区别是什么

    RK3588类似,但是接口较少,主要面向消费类的产品。 RK3588S的视频输入输出接口,type-c接口,SATA接口,RJ45网口
    发表于 03-10 19:22 3w次阅读

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI
    的头像 发表于 06-10 10:31 8063次阅读
    <b class='flag-5'>RK3588</b>-MIPI屏幕调试笔记:<b class='flag-5'>RK3588</b>-MIPI-DSI

    【LGA封装RK3588核心板】基于RK3588,小而强大的ArmSom-W3 CORE BOARD

    Armsom-RK3588 LGA Core board 是一款基于Rockchip RK3588芯片平台,采用LGA(506pin)封装设计的一款极小尺寸的RK3588核心板
    的头像 发表于 07-03 16:08 3434次阅读
    【LGA封装<b class='flag-5'>RK3588</b><b class='flag-5'>核心板</b>】基于<b class='flag-5'>RK3588</b>,小而强大的ArmSom-W3 CORE BOARD

    rk3588rk3588s的区别

    rk3588rk3588s的区别 Rockchip是一家专业的半导体公司,成立于2001年,总部位于中国深圳,主要从事集成电路的设计、开发和销售。他们的热门产品RK3588RK3588
    的头像 发表于 08-15 16:44 2.1w次阅读

    RK35883588s的区别

    RK35883588s的区别 Rockchip RK3588RK3588s是两种功能强大且广受欢迎的片上系统(SoC)解决方案,用于一系列设备,包括智能电视、高性能平板电脑、笔记本
    的头像 发表于 08-15 17:03 2.9w次阅读

    极小极轻LGA封装 |RK3588核心板SOM-3588-LGA现货发售!

    SOM-3588-LGA 是一款基于Rockchip RK3588芯片平台,采用LGA(506pin)封装设计的一款极小尺寸的商规核心板。现在核心
    的头像 发表于 10-23 11:50 5045次阅读
    极小极轻LGA封装 |<b class='flag-5'>RK3588</b><b class='flag-5'>核心板</b>SOM-<b class='flag-5'>3588</b>-LGA现货发售!

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型

    迅为电子RK3588S与RK3588硬件性能区别及板卡选型
    的头像 发表于 06-25 15:30 6567次阅读
    迅为电子<b class='flag-5'>RK3588</b>S与<b class='flag-5'>RK3588</b>硬件性能区别及板卡选型

    RK3588!黑神话悟空,启动?-迅为电子RK3588开发

    RK3588!黑神话悟空,启动?-迅为电子RK3588开发
    的头像 发表于 08-30 14:13 2548次阅读
    <b class='flag-5'>RK3588</b>!黑神话悟空,启动?-迅为电子<b class='flag-5'>RK3588</b>开发<b class='flag-5'>板</b>

    PET_RK3588_CORE核心板

    一、PET_RK3588_CORE 核心板图片 二、PET_RK3588_CORE 核心板详细参数 注意:RK3588 引脚大部分是功能复用
    的头像 发表于 01-15 14:12 1745次阅读
    PET_<b class='flag-5'>RK3588</b>_CORE<b class='flag-5'>核心板</b>

    RK3588原理图

    RK3588开发原理图文件
    发表于 02-24 15:57 73次下载