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

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

3天内不再提示

RK3588平台SSD PCIE调试踩坑记:不插SSD就死机?两步搞定引脚与驱动配置

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

扫码添加小助手

加入工程师交流群

最近看好多人因为pcie这个问题困扰,遂再更一版关于pcie调试的文章。

嵌入式开发中,PCIE接口SSD因高速读写特性,常作为RK瑞芯微)平台的核心存储方案。但调试时难免遇到诡异问题——比如插入SSD时一切正常,不插SSD系统就直接起不来,甚至改了配置后还偶发启动失败。

今天结合实际调试文档,拆解这两个典型坑的排查过程与解决方案,帮你避开PCIe SSD调试的隐形陷阱

一、初始坑:不插SSD,系统直接罢工

wKgZPGkanJeAdJX4AAEd8aB7PPo931.png


1.现象:插与不插,两种命运

正常场景:插入SSD后,系统启动流畅,SSD能被正确识别并正常读写;

异常场景:拔掉SSD,系统卡在启动阶段,无报错日志,直接死机

2.排查:从时钟定位到引脚配置

一开始怀疑电源PCIe链路问题,逐一排查后发现关键线索:

测量PCIe相关电压(如vpcie3v3):无论是否插SSD,电压均稳定在3.3V,排除电源故障;

示波器PCIe时钟信号不插SSD时,时钟引脚无输出,插入后时钟恢复正常——问题出在时钟使能的控制逻辑。

进一步核对DTS(设备树)配置,发现核心控制引脚PCIE30X4_CLKREQn_M1(对应GPIO4 RK_PB4)的配置存在问题:

//初始错误配置

pcie20x1_0_clkreqn_m1: pcie20x1-0-clkreqn-m1 {

rockchip,pins = <4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_none>; //浮空状态

};

&pcfg_pull_none表示引脚处于浮空状态:插入SSD时,SSD会主动拉低该引脚触发时钟输出;不插SSD时,引脚电平悬空,无法触发时钟,导致系统启动卡住。

3.解决方案:浮空下拉,让引脚有个准信

只需修改引脚的拉取状态,将浮空改为下拉,确保即使不插SSD,引脚也能维持稳定电平以触发时钟:

//修改后正确配置

pcie20x1_0_clkreqn_m1: pcie20x1-0-clkreqn-m1 {

rockchip,pins = <4 RK_PB4 RK_FUNC_GPIO &pcfg_pull_down>; //下拉状态

};

重新编译烧录后测试:不插SSD时,时钟信号正常输出,系统顺利启动——第一个坑解决!

二、二次坑:改了下拉,仍偶发死机

1.新现象:偶尔启动失败,无规律可循

解决初始问题后,测试中发现新情况:系统约有10%概率启动失败,重启几次又能恢复,无固定触发条件,排查难度更高。

2.根因:驱动加载干扰引脚电平

再次核对DTS,发现&pcie3x4PCIe控制器节点)中,将之前修改的引脚配置关联到了驱动:

//存在问题的PCIe控制器配置

&pcie3x4 {

reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;

vpcie3v3-supply = <&vcc3v3_pcie30>;

pinctrl-names = "default";

pinctrl-0 = <&pcie20x1_0_clkreqn_m1>; //引脚关联驱动

status = "okay";

};

问题在于:驱动加载时,会动态调整关联引脚的电平,导致PCIE30X4_CLKREQn_M1引脚有时高、有时低,电平不确定性触发PCIe链路初始化失败——这也是启动失败无规律的原因。

查阅RK官方原理图与配置说明后确认:该引脚无需关联PCIe驱动,需独立控制以保证电平稳定。

3.终局解决方案:删关联+独立配置,彻底稳电平

分两步修改,彻底隔绝驱动对引脚的干扰:

步骤1:删除PCIe驱动与引脚的关联

修改&pcie3x4节点,注释或删除pinctrl-0配置,断开驱动与引脚的绑定:

//修改后的PCIe控制器配置

&pcie3x4 {

reset-gpios = <&gpio4 RK_PB6 GPIO_ACTIVE_HIGH>;

vpcie3v3-supply = <&vcc3v3_pcie30>;

pinctrl-names = "default";

//注释关联配置:避免驱动干扰引脚电平

// pinctrl-0 = <&pcie20x1_0_clkreqn_m1>;

status = "okay";

};

步骤2:单独配置引脚为固定电平调节器

新增pcie3x4_clkreqn_m1节点,将引脚配置为regulator-fixed(固定调节器)类型,强制拉低并确保启动阶段稳定:

//独立引脚配置(关键)

pcie3x4_clkreqn_m1: pcie3x4-clkreqn-m1{

compatible = "regulator-fixed"; //固定电平类型

gpio = <&gpio4 RK_PB4 GPIO_ACTIVE_LOW>; //低电平有效

pinctrl-names = "default";

pinctrl-0 = <&pcie20x1_0_clkreqn_m1>; //引用下拉配置

regulator-name = "pcie3x4_clkreqn_m1";

enable-active-low; //使能信号低电平有效

start-delays-us = <5000>; //启动延迟5000微秒(避免冲击)

off-on-delay-us = <5000>; //切换延迟5000微秒

regulator-always-on; //引脚始终保持使能

regulator-boot-on; //系统启动阶段即开启

};

start-delays-usoff-on-delay-us:避免引脚电平突变导致的链路误判;

regulator-always-onregulator-boot-on:确保从系统上电到启动完成,引脚始终维持稳定低电平。

修改后经过百次启动测试:无论是否插SSD,系统均100%正常启动,偶发故障彻底解决!

三、调试核心要点:3避坑准则

1.引脚拉取状态:拒绝浮空,优先下拉

PCIeCLKREQn类控制引脚(如本文的GPIO4 RK_PB4),需避免&pcfg_pull_none(浮空),不插设备时会因电平不确定断时钟,下拉(&pcfg_pull_down)是更安全的选择。

2.驱动关联:控制引脚别绑驱动

PCIe核心数据引脚(如时钟控制、复位),无需在&pcie3x4等控制器节点中通过pinctrl-0关联驱动,否则驱动加载会干扰电平稳定性。

3.独立配置:用regulator-fixed稳电平

关键控制引脚建议按固定调节器配置,加上延迟参数(如5000us)和始终开启属性,从硬件层面杜绝电平波动。

结尾

PCIe调试常因引脚电平”“驱动关联这类细节卡壳,看似诡异的故障,往往藏在DTS的几行配置里。你在RK平台调试PCIe设备时,还遇到过哪些?欢迎在评论区分享,一起避坑提效!



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

    关注

    5212

    文章

    20763

    浏览量

    338789
  • SSD
    SSD
    +关注

    关注

    21

    文章

    3165

    浏览量

    122706
  • 引脚
    +关注

    关注

    16

    文章

    2127

    浏览量

    56153
  • RK3588
    +关注

    关注

    8

    文章

    601

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI之屏参配置

    RK3588-MIPI屏幕调试笔记:RK3588-MIPI-DSI之屏参配置
    的头像 发表于 06-10 10:36 4983次阅读
    <b class='flag-5'>RK3588</b>-MIPI屏幕<b class='flag-5'>调试</b>笔记:<b class='flag-5'>RK3588</b>-MIPI-DSI之屏参<b class='flag-5'>配置</b>

    BSP调试#03:Ethernet(RK3588

    本合集的是我当初调试 RK3588 平台时的 原始笔记 ——只保留了那些的问题接口,没出过问题的内容全删掉了。文章框架如下: 其中,“
    的头像 发表于 04-03 15:53 1.1w次阅读
    BSP<b class='flag-5'>调试</b>#03:Ethernet(<b class='flag-5'>RK3588</b>)

    BSP调试#04:HDMI TX(RK3588

      本合集的是我当初调试 RK3588 平台时的 原始笔记 ——只保留了那些的问题接口,没出过问题的内容全删掉了。文章框架如下: 其中
    的头像 发表于 04-10 09:23 6616次阅读
    BSP<b class='flag-5'>调试</b>#04:HDMI TX(<b class='flag-5'>RK3588</b>)

    BSP调试#05:MIPI DSI(RK3588

       本合集的是我当初调试 RK3588 平台时的 原始笔记 ——只保留了那些的问题接口,没出过问题的内容全删掉了。文章框架如下: 其
    的头像 发表于 04-17 11:54 8849次阅读
    BSP<b class='flag-5'>调试</b>#05:MIPI DSI(<b class='flag-5'>RK3588</b>)

    BSP调试#08:Audio(RK3588)

    本合集的是我当初调试 RK3588 平台时的 原始笔记 ——只保留了那些的问题接口,没出过问题的内容全删掉了。文章框架如下: 其中,
    的头像 发表于 05-09 10:44 7329次阅读
    BSP<b class='flag-5'>调试</b>#08:Audio(<b class='flag-5'>RK3588</b>)

    ROC-RK3588S-PC开发板支持SATA协议的SSD使用

    简介ROC-RK3588S-PC 开发板上有 1 个 M.2 接口。可以软件配置成 M.2 SATA3.0 接口,支持 SATA 协议的 SSD 使用,也可以软件配置成 M.2
    发表于 07-12 17:44

    RK3588S(Android 12) M.2接口的配置与使用手册指南

    1、ROC-RK3588S-PC (Android 12) M.2接口的配置与使用ROC-RK3588S-PC 开发板上有 1 个 M.2 接口:可以软件配置成 M.2 SATA3.0
    发表于 08-18 17:32

    Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇一 ] - PCIE的开发指南

    RK3588共有5个PCIe的控制器,硬件IP是⼀样的,配置⼀样,其中⼀个4Lane DM模式可以⽀持作为EP使⽤,另外⼀个2Lane和3个1Lane控制器均只能作为RC使⽤。
    的头像 发表于 11-02 09:22 4814次阅读
    Banana Pi BPI-W3 <b class='flag-5'>RK3588</b><b class='flag-5'>平台</b><b class='flag-5'>驱动</b><b class='flag-5'>调试</b>篇 [ <b class='flag-5'>PCIE</b>篇一 ] - <b class='flag-5'>PCIE</b>的开发指南

    Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇二 ] - PCIE的开发指南

    Banana Pi BPI-W3 RK3588平台驱动调试篇 [ PCIE篇 ] - PCIE
    的头像 发表于 11-02 09:24 2268次阅读
    Banana Pi BPI-W3 <b class='flag-5'>RK3588</b><b class='flag-5'>平台</b><b class='flag-5'>驱动</b><b class='flag-5'>调试</b>篇 [ <b class='flag-5'>PCIE</b>篇二 ] - <b class='flag-5'>PCIE</b>的开发指南

    RK3588 PCIe设备识别失败?一招避“非法Class”陷阱

    前言:在RK3588平台开发过程中,你是否遇到过这样的窘境:明明PCIe总线上挂好了网卡模块,lspci能识别到芯片,可驱动就是加载失败,排查半天找不到关键问题?别慌!本文将带你一
    的头像 发表于 08-29 08:32 2246次阅读
    <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIe</b>设备识别失败?一招避<b class='flag-5'>坑</b>“非法Class”陷阱

    开发者必备,10 分钟搞定 RK3588 PCIE 拆分!

    前言:在嵌入式开发中,PCIe接口的灵活配置直接影响设备扩展能力与性能发挥。RK3588作为旗舰芯片,其PCIe拆分机制更是让硬件设计与软件调试
    的头像 发表于 11-13 08:31 2296次阅读
    开发者必备,10 分钟<b class='flag-5'>搞定</b> <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIE</b> 拆分!

    一文搞懂 RK3588 PCIe:从硬件资源到拆分配置 + 避指南(含脑图)

    资源解析、 3  大拆分方案实战、关键配置步骤及避要点,附带可视化脑图,助力开发者快速落地  PCIe  相关项目。       一、 RK3588
    的头像 发表于 11-20 18:18 5169次阅读
    一文搞懂 <b class='flag-5'>RK3588</b> <b class='flag-5'>PCIe</b>:从硬件资源到拆分<b class='flag-5'>配置</b> + 避<b class='flag-5'>坑</b>指南(含脑图)

    实战复盘:RK3588 SPI+PCIe3x4方案启动修复,从节点配置驱动适配全解析

          在 RK3588 嵌入式项目中, “ 接口配置匹配 ” 是高频点 —— 近期 基于 linux6.1 内核
    的头像 发表于 01-08 10:24 942次阅读
    实战复盘:<b class='flag-5'>RK3588</b> SPI+<b class='flag-5'>PCIe</b>3x4方案启动修复,从节点<b class='flag-5'>配置</b>到<b class='flag-5'>驱动</b>适配全解析

    RK3588+AP6256|不掉电重启AP模式调试实录

    前言:在嵌入式Linux项目中,把WiFi模组切换为AP模式是个常见需求——配网、调试、本地组网都离不开它。但AP6256这颗模组在AP模式下的概率,远比STA模式高得多。今天基于RK35
    的头像 发表于 05-14 08:31 293次阅读
    <b class='flag-5'>RK3588</b>+AP6256|不掉电重启AP模式<b class='flag-5'>踩</b><b class='flag-5'>坑</b><b class='flag-5'>调试</b>实录

    BSP调试#09:拓展GPIO (RK3588)

    本合集的是我当初调试 RK3588 平台时的 原始笔记 ——只保留了那些的问题接口,没出过问题的内容全删掉了。文章框架如下: 其中,“
    的头像 发表于 05-14 21:23 25次阅读
    BSP<b class='flag-5'>调试</b>#09:拓展GPIO (<b class='flag-5'>RK3588</b>)