<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>RK3568平台BSP构建 on Potter的个人笔记</title><link>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/</link><description>Recent content in RK3568平台BSP构建 on Potter的个人笔记</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Wed, 15 Oct 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/index.xml" rel="self" type="application/rss+xml"/><item><title>RK3568平台 I2S的接口调试与dts配置</title><link>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-7-i2s/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-7-i2s/</guid><description>&lt;h4 id="1-项目目标"&gt;&lt;strong&gt;1. 项目目标&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;本次任务的核心目标是在 RK3568 平台上，成功使能并调试多个I2S接口（I2S1, I2S2, I2S3），以实现与外部设备（如FPGA）的数字音频数据通信。具体包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;配置I2S1和I2S3为音频输出 (Playback)。&lt;/li&gt;
&lt;li&gt;配置I2S2为音频输入 (Capture)。&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="2-调试主线与过程"&gt;&lt;strong&gt;2. 调试主线与过程&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;整个调试过程遵循“&lt;strong&gt;硬件分析 -&amp;gt; DTS配置 -&amp;gt; 命令行测试 -&amp;gt; 问题定位与解决&lt;/strong&gt;”的清晰脉络。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;前期准备 - 硬件资源分析:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;首先，对RK3568 SoC的I2S硬件资源进行梳理，明确了I2S0/1/2/3控制器的基本功能和用途（如I2S0用于HDMI，I2S1/2/3为通用）。&lt;/li&gt;
&lt;li&gt;将DTS中的I2S控制器节点（&lt;code&gt;i2s@fe4...&lt;/code&gt;）与产品原理图上的GPIO引脚进行了一一对应，为后续的&lt;code&gt;pinctrl&lt;/code&gt;配置打下了坚实基础。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;中期实施 - DTS配置与声卡注册:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;simple-audio-card&lt;/code&gt; 驱动模型来“链接”SoC的I2S控制器（CPU DAI）和一个虚拟的 &lt;code&gt;dummy-codec&lt;/code&gt;（Codec DAI），从而在ALSA框架下注册了三张独立的声卡。&lt;/li&gt;
&lt;li&gt;分别为&lt;code&gt;card 1&lt;/code&gt; (I2S1, output), &lt;code&gt;card 2&lt;/code&gt; (I2S2, input), &lt;code&gt;card 3&lt;/code&gt; (I2S3, output) 编写了DTS节点。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;后期验证 - 系统性测试与问题发现:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;使用 &lt;code&gt;aplay -l&lt;/code&gt; 和 &lt;code&gt;arecord -l&lt;/code&gt; 命令，成功验证了三张声卡均已在系统中注册。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I2S1 (Output):&lt;/strong&gt; 使用 &lt;code&gt;speaker-test -D hw:1,0 ...&lt;/code&gt; 进行测试，设备工作正常，无报错。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I2S2 (Input):&lt;/strong&gt; 使用 &lt;code&gt;arecord -D hw:2,0 ...&lt;/code&gt; 进行测试，命令按预期“挂起”等待外部时钟，符合I2S Slave模式的正确行为。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I2S3 (Output):&lt;/strong&gt; 使用 &lt;code&gt;speaker-test -D hw:3,0 ...&lt;/code&gt; 进行测试，发现严重问题：设备虽能打开，但持续抛出 &lt;code&gt;Write error: -32, Broken pipe&lt;/code&gt; 错误。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 id="3-核心知识学习与沉淀"&gt;&lt;strong&gt;3. 核心知识学习与沉淀&lt;/strong&gt;&lt;/h4&gt;
&lt;p&gt;在调试过程中，对Linux音频子系统和DTS进行了系统性的学习。&lt;/p&gt;</description></item><item><title>RK3568平台USB OTG端口功能调试</title><link>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-4-usb/</link><pubDate>Wed, 15 Oct 2025 00:00:00 +0000</pubDate><guid>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-4-usb/</guid><description>&lt;h2 id="项目概述"&gt;&lt;strong&gt;项目概述&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;背景:&lt;/strong&gt;
在基于Rockchip RK3568的定制化项目中，基于公版SDK, 重新梳理板上的USB接口，并解决板载的USB 3.0 OTG (Type-A) 端口在默认BSP配置下，无法正常识别U盘等Host模式设备。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我的职责与贡献:&lt;/strong&gt;
作为项目的BSP工程师，我独立负责诊断并解决此USB功能性问题。我的核心贡献在于：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;执行了系统性的问题排查&lt;/strong&gt;，覆盖了从硬件原理图核对，功能确认，故障分析，到内核设备树（dts）代码编写调试和&lt;code&gt;sysfs&lt;/code&gt;运行时状态分析以及性能基线测试的详细排查。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主导并实施了解决方案&lt;/strong&gt;：根据产品的硬件原理图，验证两个USB-A口和一个USB-C口的工作情况。并通过修改设备树(DTS)，定下解决方案：将&lt;code&gt;usbdrd_dwc3&lt;/code&gt;控制器的&lt;code&gt;dr_mode&lt;/code&gt;由&lt;code&gt;&amp;quot;otg&amp;quot;&lt;/code&gt;强制修改为&lt;code&gt;&amp;quot;host&amp;quot;&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精确定位了问题根源&lt;/strong&gt;：OTG端口的ID引脚在当前硬件设计下并不存在，导致控制器无法自动检测plug-in，因此无法切换Host/Device模式。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;完成了性能与功能的完整验证&lt;/strong&gt;，确保修改后的端口不仅能稳定识别设备，其数据传输速率也达到了USB 3.0标准。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将整个调试过程和技术分析&lt;/strong&gt;沉淀为详细的技术文档，为未来类似问题提供了清晰的解决范例。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="我的方法论嵌入式外设调试流程"&gt;&lt;strong&gt;我的方法论：嵌入式外设调试流程&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;本次调试遵循了一套由表及里、从软件到硬件的标准化诊断流程：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;文档与电路功能分析:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;研读RK3568 TRM，理解其USB子系统架构（2个USB3控制器、OHCI/EHCI控制器、Combo PHY等）。&lt;/li&gt;
&lt;li&gt;核对硬件原理图，确认OTG端口的物理连接，特别是ID和VBUS引脚。&lt;/li&gt;
&lt;li&gt;梳理两A（USB-A）一C（USB-C）的数据流走向&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;设备树(DTS)与驱动映射:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;深入分析&lt;code&gt;rk3568.dtsi&lt;/code&gt;等芯片级设备树文件，梳理&lt;code&gt;usbdrd30&lt;/code&gt; (OTG)、&lt;code&gt;usbhost30&lt;/code&gt; (Host)、&lt;code&gt;usb2phy&lt;/code&gt;等核心节点之间的配置和关系。&lt;/li&gt;
&lt;li&gt;理清控制器与PHY之间的&lt;code&gt;phys&lt;/code&gt;引用关系，并记录汇总成表格。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;运行时状态诊断:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;利用&lt;code&gt;sysfs&lt;/code&gt;下的&lt;code&gt;extcon&lt;/code&gt;接口 (&lt;code&gt;/sys/class/extcon/extcon0&lt;/code&gt;)，实时查看内核感知的OTG端口状态（&lt;code&gt;USB-HOST=0&lt;/code&gt;），印证了其未进入Host模式的猜想。&lt;/li&gt;
&lt;li&gt;回到硬件原理图，研究USB-A/mini/micro/C四种接口的插拔原理，寻找解决方案。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;方案实施与验证:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;在板级DTS中，创建&lt;code&gt;&amp;amp;usbdrd_dwc3&lt;/code&gt;的覆盖节点，将其&lt;code&gt;dr_mode&lt;/code&gt;强制设为&lt;code&gt;&amp;quot;host&amp;quot;&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;重新编译并烧录固件，再次使用&lt;code&gt;hdparm&lt;/code&gt;进行测试，验证问题已解决。&lt;/li&gt;
&lt;li&gt;SOC端USB作为主，则拒绝一切主设备的接入，由SOC端供电，因此，将固件升级（主设备典型应用）安排到外部按键方式触发进入Maskrom模式来进行&lt;/li&gt;
&lt;li&gt;系统成功加载后，该USB-A口则作为普通host口使用。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;技术总结和文档输出:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;仔细梳理&lt;a href="https://potterwhite.github.io/blog/2026/07/30/soc-%e6%9d%bf%e7%ba%a7-bring-up-%e5%b7%a5%e7%a8%8b%e6%89%8b%e5%86%8c/"&gt;SoC 板级 Bring-up 工程手册&lt;/a&gt;里的硬件分层数据流模型，在项目结尾终于成稿。&lt;/li&gt;
&lt;li&gt;更新 dts 调试的心得，一并沉淀进&lt;a href="https://potterwhite.github.io/blog/2026/07/30/soc-%e6%9d%bf%e7%ba%a7-bring-up-%e5%b7%a5%e7%a8%8b%e6%89%8b%e5%86%8c/"&gt;SoC 板级 Bring-up 工程手册&lt;/a&gt;的「从 dts 入手」一节&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id="项目成果"&gt;&lt;strong&gt;项目成果&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;功能修复:&lt;/strong&gt; OTG端口现可稳定识别U盘及其他USB Host设备。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;性能达标:&lt;/strong&gt; 修复后，使用&lt;code&gt;hdparm -t /dev/sda&lt;/code&gt;测试，端口读取速度恢复至 &lt;strong&gt;~48MB/s&lt;/strong&gt;，符合USB 3.0标准。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;方案固化:&lt;/strong&gt; 最终的DTS修改被合入产品代码库，成为该硬件的标准化配置。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;文档沉淀:&lt;/strong&gt; 完整的调试过程、代码分析和相关资料被整理归档。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="技术栈与工具"&gt;&lt;strong&gt;技术栈与工具&lt;/strong&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;硬件平台:&lt;/strong&gt; Rockchip RK3568 SoC&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;软件环境:&lt;/strong&gt; Linux Kernel 5.10, Buildroot&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;核心技术:&lt;/strong&gt; Device Tree (DTS), USB 2.0/3.0 Subsystem, OTG, XHCI/EHCI/OHCI, Kernel &lt;code&gt;extcon&lt;/code&gt; Framework&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;调试工具:&lt;/strong&gt; &lt;code&gt;hdparm&lt;/code&gt;, &lt;code&gt;sysfs&lt;/code&gt;, dmesg, 串口调试&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;</description></item><item><title>RK3568平台MIPI转eDP芯片LT8911EXB Bring-up与验证</title><link>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-3-lt8911exb/</link><pubDate>Fri, 26 Sep 2025 00:00:00 +0000</pubDate><guid>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-3-lt8911exb/</guid><description>&lt;script type="module"&gt;
 import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
&lt;/script&gt;
&lt;h3 id="项目总结rockchip-rk3568-平台-mipi-dsi-转-edp-接口调试与验证"&gt;&lt;strong&gt;项目总结：Rockchip RK3568 平台 MIPI-DSI 转 eDP 接口调试与验证&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;作者:&lt;/strong&gt; Potter White&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日期:&lt;/strong&gt; 2025年9月&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;项目类型:&lt;/strong&gt; Rockchip, Bring-Up, Linux Kernel Driver, Device Tree, I2C&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="1-项目概述-project-overview"&gt;&lt;strong&gt;1. 项目概述 (Project Overview)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;背景 (Situation):&lt;/strong&gt;
在一个基于 Rockchip RK3568 SoC 的定制化项目中，需要将 MIPI-DSI 视频信号通过 Lontium LT8911EXB 桥接芯片转换为 eDP 信号，以驱动一块 eDP 接口的显示屏。在初始的 BSP (Board Support Package) 集成后，显示屏未能正常点亮，内核日志（&lt;code&gt;dmesg&lt;/code&gt;）中也未出现 LT8911EXB 相关驱动的加载信息。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我的职责与贡献 (My Role &amp;amp; Contributions):&lt;/strong&gt;
作为项目的 BSP 工程师，我负责从硬件原理到内核驱动的全链路调试，以实现该显示通路的功能 Bring-up。我的核心贡献包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;执行了系统性的硬件健康检查&lt;/strong&gt;，验证了 LT8911EXB 芯片工作的基本条件，包括电源、时钟和复位电路。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;深入分析了 Linux 设备驱动模型&lt;/strong&gt;，厘清了设备树 (DTS)、内核驱动与硬件之间的交互与触发机制。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精确定位了驱动加载失败的根本原因&lt;/strong&gt;：设备树中 I2C 地址与 GPIO 属性的配置与驱动代码及硬件规范不符。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主导并实施了设备树的修正方案&lt;/strong&gt;，成功使内核驱动与硬件设备匹配，并正确加载。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;沉淀了调试过程中的关键知识点&lt;/strong&gt;，形成了包括 RC 电路、I2C 地址表示法、示波器探头使用等在内的技术笔记，为团队知识库做出了贡献。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="2-我的方法论嵌入式外设-bring-up-诊断流程"&gt;&lt;strong&gt;2. 我的方法论：嵌入式外设 Bring-up 诊断流程&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;本次调试过程遵循了一套从硬件到软件、由表及里的系统性排查方法。这个流程旨在快速收敛问题范围，避免在不确定的方向上浪费时间。&lt;/p&gt;</description></item><item><title>RK3568平台显示子系统Bring-up与多接口调试</title><link>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-2-display/</link><pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate><guid>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-2-display/</guid><description>&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;作者:&lt;/strong&gt; Potter White&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日期:&lt;/strong&gt; 2025年8月&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="项目概述-project-overview"&gt;&lt;strong&gt;项目概述 (Project Overview)&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;背景 (Situation):&lt;/strong&gt;
在一个基于Rockchip RK3568 SoC的定制化项目中，需要同时或独立地使能LVDS、MIPI-DSI和HDMI 2.0三大显示接口。其中，LVDS接口需向FPGA输出超越官方规格的1920x1080@30Hz视频流；HDMI与MIPI则需要绕过EDID检测，强制输出固定的1080p@60Hz信号。初始BSP中这些通路均未配置，需要从零开始进行Bring-up。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我的职责与贡献 (My Role &amp;amp; Contributions):&lt;/strong&gt;
作为项目的BSP工程师，我独立负责整个显示子系统的Bring-up与对接任务。我的核心贡献在于&lt;strong&gt;通过对数据手册和内核源码的深度挖掘，完成了纯软件层面的配置与调试&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;深入研究并梳理了RK3568显示子系统的数据流&lt;/strong&gt;，清晰地描绘了从内存(Memory) -&amp;gt; VOP -&amp;gt; 各接口控制器 -&amp;gt; Combo PHY的完整硬件链路。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主导并完成了设备树(DTS)的精确配置&lt;/strong&gt;，为LVDS、MIPI-DSI、HDMI三大接口正确设置了VOP路由、时序参数(Timings)以及PHY复用关系。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通过精密的DTS配置，成功驱动SoC物理层(PHY)输出正确的数字视频信号&lt;/strong&gt;，为后续与FPGA的信号握手及HDMI显示器的点亮奠定了坚实基础。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;成功实现了超越官方规格的视频流输出&lt;/strong&gt;，在满足时钟频率限制的前提下，稳定实现了LVDS接口1920x1080@30Hz的信号输出，并获得FPGA端的成功接收。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将整个调试过程提炼并撰写成一套标准作业程序(SOP)与技术文档&lt;/strong&gt;，为团队未来所有显示接口的调试工作提供了清晰、高效的指导框架。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="我的方法论显示接口调试标准作业程序-sop"&gt;&lt;strong&gt;我的方法论：显示接口调试标准作业程序 (SOP)&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;为了系统性地解决此类“点屏”或“信号对接”问题，我沉淀了一套分为四个阶段的SOP。该流程将模糊的调试任务分解为清晰、可验证的步骤，能够快速定位问题是在SoC软件配置侧，还是在对端设备(FPGA/屏幕)侧。&lt;/p&gt;
&lt;h3 id="项目相关技术文档-project-related-technical-documents"&gt;&lt;strong&gt;项目相关技术文档 (Project-Related Technical Documents)&lt;/strong&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://potterwhite.github.io/blog/2026/07/30/soc-%e6%9d%bf%e7%ba%a7-bring-up-%e5%b7%a5%e7%a8%8b%e6%89%8b%e5%86%8c/"&gt;SoC 板级 Bring-up 工程手册&lt;/a&gt;&lt;/strong&gt;: 其中「底层验证」一节，详细阐述了从信息收集到底层验证的四个关键阶段。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://potterwhite.github.io/blog/2025/08/18/how-to-rk3568%e4%b8%8b%e5%bc%ba%e5%88%b6hdmi%e7%9a%84%e9%85%8d%e7%bd%ae"&gt;How-to: RK3568下强制HDMI的配置&lt;/a&gt;&lt;/strong&gt;: 记录了如何通过修改驱动代码和DTS来强制HDMI连接状态与分辨率。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://potterwhite.github.io/blog/2025/08/18/rockchip%e6%98%be%e7%a4%ba%e5%ad%90%e7%b3%bb%e7%bb%9f%e5%85%b3%e9%94%ae%e6%a6%82%e5%bf%b5%e8%a7%a3%e6%9e%90"&gt;Rockchip显示子系统关键概念解析&lt;/a&gt;&lt;/strong&gt;: 总结了VOP、DRM端口路由等核心概念。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://potterwhite.github.io/blog/2025/08/18/lcdslvds-on-rk3568-bring-up-%e6%95%b0%e6%8d%ae%e6%b5%81%e7%a0%94%e7%a9%b6"&gt;LCDs(lvds) Bring-Up 数据流研究&lt;/a&gt;&lt;/strong&gt;: 深入分析了LVDS从内存到物理引脚的完整数据链路。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="项目成果与验证-results--verification"&gt;&lt;strong&gt;项目成果与验证 (Results &amp;amp; Verification)&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;遵循SOP，我成功使能了RK3568的所有目标显示接口。所有配置均通过软件工具和对端设备的反馈得到验证。&lt;/p&gt;
&lt;h2 id="内核模式验证-modetest"&gt;&lt;strong&gt;内核模式验证 (modetest)&lt;/strong&gt;&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;modetest&lt;/code&gt;工具的输出确认内核已为各个接口成功创建并应用了我们强制指定的模式，绕过了EDID检测。以下是LVDS接口的示例：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Connectors:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;id encoder status name size &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;mm&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; modes encoders
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;172&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;171&lt;/span&gt; connected LVDS-1 0x0 &lt;span style="color:#0000cf;font-weight:bold"&gt;1&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;171&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; modes:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index name refresh &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;Hz&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; hdisp hss hse htot vdisp vss vse vtot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8f5902;font-style:italic"&gt;#0 1920x1080 29.41 1920 1968 2000 2040 1080 1083 1088 1111 66660 flags: nhsync, nvsync; type: preferred, driver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;174&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;173&lt;/span&gt; connected HDMI-A-1 0x0 &lt;span style="color:#0000cf;font-weight:bold"&gt;1&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;173&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; modes:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index name refresh &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;Hz&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; hdisp hss hse htot vdisp vss vse vtot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8f5902;font-style:italic"&gt;#0 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: preferred&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#0000cf;font-weight:bold"&gt;190&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;189&lt;/span&gt; connected DSI-1 68x121 &lt;span style="color:#0000cf;font-weight:bold"&gt;1&lt;/span&gt; &lt;span style="color:#0000cf;font-weight:bold"&gt;189&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; modes:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; index name refresh &lt;span style="color:#ce5c00;font-weight:bold"&gt;(&lt;/span&gt;Hz&lt;span style="color:#ce5c00;font-weight:bold"&gt;)&lt;/span&gt; hdisp hss hse htot vdisp vss vse vtot
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#8f5902;font-style:italic"&gt;#0 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: nhsync, nvsync; type: preferred, driver&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;结论:&lt;/strong&gt; 内核DRM框架已按DTS预期工作，&lt;code&gt;clock-frequency&lt;/code&gt;与时序参数均正确加载。HDMI与MIPI接口也通过类似方式得到验证。&lt;/p&gt;</description></item><item><title>RK3568平台千兆以太网控制器Bring-up与验证</title><link>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-1-gmac/</link><pubDate>Fri, 25 Jul 2025 00:00:00 +0000</pubDate><guid>https://potterwhite.github.io/portfolio/embedded-bsp/bringup-rk3568/module-1-gmac/</guid><description>&lt;script type="module"&gt;
 import mermaid from 'https://cdn.jsdelivr.net/npm/mermaid@10/dist/mermaid.esm.min.mjs';
&lt;/script&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;作者:&lt;/strong&gt; Potter White&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;日期:&lt;/strong&gt; 2025年7月&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id="项目概述-project-overview"&gt;&lt;strong&gt;项目概述 (Project Overview)&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;背景 (Situation):&lt;/strong&gt;
在一个基于Rockchip RK3568 SoC的定制化产品开发项目中，我负责对板载的千兆以太网接口（GMAC1, &lt;code&gt;ethernet@fe010000&lt;/code&gt;）进行初次的功能Bring-up。在初始BSP配置下，该网络接口未能被内核正确初始化，日志显示&lt;code&gt;Cannot attach to PHY&lt;/code&gt;和&lt;code&gt;Failed to reset the dma&lt;/code&gt;等错误。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;我的职责与贡献 (My Role &amp;amp; Contributions):&lt;/strong&gt;
作为项目的BSP工程师，我负责诊断并解决此底层软硬件集成问题。我的主要工作包括：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;执行了端到端的系统性排查&lt;/strong&gt;，覆盖了从物理电路到内核驱动的全链路。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;精确定位了问题根源&lt;/strong&gt;，将其归因于设备树（DTS）中关于GMAC1的时钟树、引脚功能（pinctrl）配置与硬件设计不匹配。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;主导并实施了设备树的修正方案&lt;/strong&gt;，成功使能网络接口并确保其稳定运行。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;通过&lt;code&gt;iperf&lt;/code&gt;进行了性能验证&lt;/strong&gt;，确认网络吞-吐量达到千兆以太网的设计标准。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;将调试过程沉淀为一套标准作业程序 (SOP)&lt;/strong&gt;，用于指导未来类似外设的Bring-up工作。&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h1 id="我的方法论嵌入式外设bring-up标准作业程序-sop"&gt;&lt;strong&gt;我的方法论：嵌入式外设Bring-up标准作业程序 (SOP)&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;我总结了一套系统性的硬件Bring-up工作流。该流程将问题排查结构化，通过分阶段、多层次的验证，能够定位并解决从物理层到驱动层的部分复杂问题,并大量缩短调试时间。&lt;/p&gt;
&lt;h3 id="第一部分标准化移植流程-standard-porting-workflow"&gt;&lt;strong&gt;第一部分：标准化移植流程 (Standard Porting Workflow)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;此流程用于在硬件设计已知且大概率正确, 且串口功能稳定可用的情况下，进行设备树（DTS）和phy驱动调试。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;感兴趣可以看我的日志: &lt;a href="https://potterwhite.github.io/blog/2025/07/25/gmac-bring-up-work-flow"&gt;GMAC Bring Up Work Flow&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="第二部分异常诊断清单-troubleshooting-checklist"&gt;&lt;strong&gt;第二部分：异常诊断清单 (Troubleshooting Checklist)&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;当标准化流程不成功，或怀疑硬件存在未知问题时，此清单提供了一个从物理层到控制层的系统性排查路径。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;感兴趣可以看我沉淀的方法论: &lt;a href="https://potterwhite.github.io/blog/2026/07/30/soc-%e6%9d%bf%e7%ba%a7-bring-up-%e5%b7%a5%e7%a8%8b%e6%89%8b%e5%86%8c/"&gt;SoC 板级 Bring-up 工程手册&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="sop流程图"&gt;SOP流程图&lt;/h3&gt;
&lt;pre class="mermaid"&gt;graph TD
 %% === 定义与样式 ===
 classDef dark_main fill:#2c3e50,color:white,stroke:#8e9eab;
 classDef dark_debug fill:#4b3e58,color:white,stroke:#b8a3d3;
 classDef dark_decision fill:#27ae60,color:white,stroke:#88d1a1;
 classDef dark_result_ok fill:#16a085,color:white,stroke:#72d6c1;
 classDef dark_result_fail fill:#c0392b,color:white,stroke:#e69a93;

 %% === 主流程 (左侧) ===
 subgraph &amp;#34;标准化移植流程 (Standard Porting Workflow)&amp;#34;
 direction TB
 S[&amp;lt;b&amp;gt;开始&amp;lt;/b&amp;gt;]:::dark_main
 A[&amp;lt;b&amp;gt;1. 硬件接口确认&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;GMAC0或GMAC1]:::dark_main
 B[&amp;lt;b&amp;gt;2. 时钟模式分析&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;25MHz与125MHz两种时钟的流向]:::dark_main
 C[&amp;lt;b&amp;gt;3. 设备树DTS适配&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;从瑞芯微的ModeConfig手册里节选正确dts配置]:::dark_main
 D[&amp;lt;b&amp;gt;4. 编译与验证&amp;lt;/b&amp;gt;]:::dark_main

 S --&amp;gt; A --&amp;gt; B --&amp;gt; C --&amp;gt; D
 end

 %% === 决策点 (中央) ===
 F{&amp;#34;&amp;lt;div style=&amp;#39;text-align:center&amp;#39;&amp;gt;&amp;lt;i class=&amp;#39;fa fa-question-circle&amp;#39;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b&amp;gt;验证&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;网络是否正常工作?&amp;lt;/div&amp;gt;&amp;#34;}:::dark_decision
 D --&amp;gt; F

 %% === 诊断流程 (右侧) ===
 subgraph &amp;#34;异常诊断锦囊 (Troubleshooting Checklist)&amp;#34;
 direction TB
 G[&amp;#34;&amp;lt;div style=&amp;#39;text-align:left; padding:10px;&amp;#39;&amp;gt;&amp;lt;i class=&amp;#39;fa fa-bolt&amp;#39;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b&amp;gt;物理层健康检查 (L1)&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;- 电源 (Power Rails)&amp;lt;br&amp;gt;- 复位信号 (Reset Signal)&amp;lt;br&amp;gt;- 参考时钟 (Reference Clock)&amp;lt;/div&amp;gt;&amp;#34;]:::dark_debug
 H[&amp;#34;&amp;lt;div style=&amp;#39;text-align:left; padding:10px;&amp;#39;&amp;gt;&amp;lt;i class=&amp;#39;fa fa-bullseye&amp;#39;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b&amp;gt;控制通路验证 (L2)&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;- U-Boot &amp;#39;mii read&amp;#39;&amp;lt;br&amp;gt;- Kernel &amp;#39;sysfs&amp;#39; &amp;lt;/div&amp;gt;&amp;#34;]:::dark_debug
 I[&amp;#34;&amp;lt;div style=&amp;#39;text-align:left; padding:10px;&amp;#39;&amp;gt;&amp;lt;i class=&amp;#39;fa fa-cogs&amp;#39;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b&amp;gt;关键逻辑审查 (Logic Review)&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;- 硬件模式 (Strapping Pins)&amp;lt;br&amp;gt;- 时钟流向 (Clock Direction)&amp;lt;/div&amp;gt;&amp;#34;]:::dark_debug

 G --&amp;gt; H --&amp;gt; I
 end

 %% === 成功/失败出口 ===
 SUCCESS[&amp;lt;b&amp;gt;&amp;lt;i class=&amp;#39;fa fa-check-circle&amp;#39;&amp;gt;&amp;lt;/i&amp;gt; 成功&amp;lt;/b&amp;gt;]:::dark_result_ok
 FAILURE[&amp;#34;&amp;lt;div style=&amp;#39;text-align:left; padding:10px;&amp;#39;&amp;gt;&amp;lt;i class=&amp;#39;fa fa-undo&amp;#39;&amp;gt;&amp;lt;/i&amp;gt; &amp;lt;b&amp;gt;修正并迭代&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;根据诊断结果&amp;lt;br&amp;gt;返回&amp;lt;b&amp;gt;阶段3或4&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;重新适配DTS&amp;lt;/div&amp;gt;&amp;#34;]:::dark_result_fail

 %% === 流程连接 ===
 F -- &amp;#34;是 (Yes)&amp;#34; --&amp;gt; SUCCESS
 F -- &amp;#34;否 (No)&amp;#34; --&amp;gt; G
 I --&amp;gt; FAILURE
 FAILURE -.-&amp;gt; C &amp;amp; D&lt;/pre&gt;
&lt;hr&gt;
&lt;h1 id="项目成果与验证-results--verification"&gt;&lt;strong&gt;项目成果与验证 (Results &amp;amp; Verification)&lt;/strong&gt;&lt;/h1&gt;
&lt;p&gt;遵循上述方法论，问题最终被精确定位并解决。通过对设备树的系统性修正，&lt;code&gt;dma reset&lt;/code&gt;错误消失，网络接口成功初始化。&lt;/p&gt;</description></item></channel></rss>