拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

海思HI3516EV300移植到国科GK7205V300实战:硬件改板到ISP调试全记录

海思HI3516EV300移植到国科GK7205V300实战:硬件改板到ISP调试全记录 做嵌入式安防这块的工程师这两年应该都有同一个感受海思HI3516EV300这颗芯片在项目里“焊死”太久了供货周期、价格、方案支持这些因素一旦波动整条产品线都被动。我去年在一个IPC项目里就碰到了类似的情况后面评估了一圈决定把基于HI3516EV300的成熟方案往国科GK7205V300上平移。先说结论两颗芯片在定位上高度重叠但“能替换”和“能快速替换”是两个完全不同的概念。如果你只是看了封装兼容、引脚差不多就觉得能把板子直接换料后面会吃大亏。这篇文章我不讲空洞的选型分析直接把我在实际项目中从硬件改板到SDK移植、再到ISP出图的全过程拆开讲重点说清楚哪些工作是可以复用的哪些地方必须推倒重来以及我在移植过程中踩过的具体坑。1. 芯片定位与移植可行性分析为什么这两颗芯片能替换1.1 两颗芯片到底什么关系先把基本背景说清楚。海思HI3516EV300是海思早年面向入门级IPC市场推出的一款H.265编码SoC性能、功耗、成本三者平衡得比较好曾经在民用摄像头、电池摄像机、部分行业设备里占有率非常高。国科GK7205V300是国科微面向同级别网络摄像机市场推出的主控芯片从CPU算力、编码规格、对外接口、典型应用场景来看它几乎就是冲着HI3516EV300这个档位去的。我整理了一张参数对比表这是当时我们评估时用的版本大家可以参考对比项目HI3516EV300GK7205V300以常见SDK配置为例CPU核心ARM Cortex-A7ARM Cortex-A7典型主频1.2GHz左右1.2GHz级别视频编码H.265/H.264最高可支持500万像素H.265/H.264最高支持500万级别ISP集成自研ISP支持3A集成ISP支持3A、WDR等内存接口DDR3/DDR4DDR3/DDR4具体取决于实际型号以太网10M/100M10M/100M封装/引脚LQFP封装管脚兼容性强与主流方案管脚定义有一定兼容性但非完全一致典型功耗较低同工艺级别功耗接近注意一个关键点类似的规格不代表完全Pin-to-Pin兼容。网上有一些说法讲“可以直接替换”这个表述不严谨。我实测下来的情况是硬件上确实存在参考设计层面的兼容性但电路板基本都要做局部调整核心改动集中在电源滤波、某些引脚的上下拉、时钟电路这几个位置。1.2 替换前要先想清楚的四个问题我在启动这个项目之前先列了一个评估清单这里也分享给你们。如果这四个问题都能想清楚再往下走会顺利很多。第一技术账。现有方案里用到了哪些外设接口、编码规格、ISP功能这些在GK7205V300的SDK里是否都有完整支持比如你原来的产品用了人形检测这类基于NPU或智能加速单元的功能那就要特别注意GK7205V300的SDK版本和算力配置是否满足这往往是移植工作量的分水岭。第二工程账。团队里有没有人接触过国科的平台如果完全没有建议先花一周时间让核心工程师过一遍SDK文档和跑一个Demo再评估整体周期。不要低估第一次接触新平台的学习成本光一个交叉编译工具链都能困住人好几天。第三供应链账。替换芯片的核心动因通常是供应链安全或成本优化但一定要把整个BOM一起看。DDR颗粒的供货、Flash的选型、晶振、电源芯片是否都能和新主控兼容否则芯片价格降下来了其他物料又卡脖子整体成本反而更高。第四维护账。这个方案不是一次性项目后面还要持续迭代。你得确认GK7205V300的SDK是否有持续更新、原厂和代理商的技术支持是否到位否则出了问题连个问的人都没有会很痛苦。这四个问题里面有任何一个答案是“不确定”我都建议先在开发板上做最小验证再决定是否全面切换。2. 硬件设计迁移要点别让PCB成为拦路虎2.1 引脚兼容性与最小改动原则很多工程师拿到芯片的第一件事就是翻数据手册看引脚图。我的建议是别只看引脚名称要把每个引脚的功能复用关系、上下拉要求、电平属性都列出来和海思那边逐一对照。我当时整理了一个自查表把芯片外围分成几大块来比对电源供电引脚每个电源域的引脚数量、位置是否一致退耦电容怎么摆DDR接口数据线、地址线、控制线的排布差异视频输入接口MIPI、LVDS、BT.1120/BT.656等接口对应关系以太网PHY接口RMII/MII模式对应的引脚通用外设UART、I2C、SPI、GPIO、PWM、USB等。在实际的IPC方案里最常用的外设就是传感器接口、以太网、串口、I2C、GPIO。这些接口如果引脚位置对得上硬件改动量就非常小。如果对不上也不用慌走线调整一般在原理图阶段就能解决真正麻烦的是DDR部分的信号完整性。GK7205V300在设计上确实参考了很多成熟方案的做法所以大部分情况下原理图改起来不会伤筋动骨。但不要直接拿海思的参考设计套用因为电源时序、DDR参数、时钟树是有差别的。我当时犯过一个错就是直接沿用了海思方案的DDR布线结果跑系统的时候随机死机查了很久才发现DDR控制器配置和走线长度匹配有问题。2.2 电源树与上电时序最容易翻车的地方上电时序是硬件移植里最容易被忽视的环节。海思和国科虽然都是典型的多路电源方案但各路电源的上下电顺序要求不完全一样。以常见方案为例一般都有1.1V左右的内核电压、1.2V~1.5V的DDR电压、3.3V和1.8V的IO电压还可能有模拟电压。海思方案里常见的要求是内核电压先于IO电压上电而国科平台的时序要求可能有细微差异。如果时序不对最典型的现象是芯片偶尔能启动、偶尔不能启动用示波器抓又抓不到明显问题。我的做法是拿到GK7205V300的《硬件设计指南》后第一步先看电源树章节把推荐的上下电顺序画成一条时序图再和当前板子的电源芯片控制逻辑对照。通常用电源管理芯片的使能脚顺序就能调整不一定要改PCB只需要改序列电阻的位置。如果板子上已经是“先内核后IO”的通用顺序大概率问题不大但一定要逐项确认不能拍脑袋。2.3 DDR与存储配置调整DDR的适配是整个硬件迁移里技术含量最高的部分。海思方案和国科方案的DDR控制器虽然都支持DDR3/DDR4但初始化代码、时序参数、读写等级都不通用。即使你硬件上原封不动地沿用原来的DDR颗粒也必须在U-Boot阶段重新配置DDR参数。有两个经验供参考。第一如果你对自己的DDR布线没把握初期尽量选择SDK里默认支持、且在官方参考设计中出现过的DDR颗粒型号不要尝鲜用最新最便宜的颗粒否则调DDR稳定性能调到你怀疑人生。第二DDR的频率不要上来就拉到标称最高值先按芯片SDK默认配置跑量产阶段再慢慢优化。我们第一批样板就保守跑在默认频率等系统稳定性测试通过后才考虑提升。Flash这边相对简单一些SPI Nor Flash和SPI Nand Flash在GK7205V300上都有支持。不过要注意不同厂商的Flash在U-Boot里的ID表和分区划分需要对应上如果用的型号不在默认列表里需要在U-Boot里加参数。2.4 时钟、以太网与外围接口的细节调整时钟电路方面海思和国科平台的晶振频率要求可能不同通常都是24MHz或25MHz无源晶振这个要对着数据手册看。如果晶振频率不对整个系统可能跑起来但串口打印乱码或者网络起不来。以太网PHY芯片一般是通用的RTL8201F、IP101GRI这类在IPC方案里很常见。但PHY的复位脚、时钟输入模式、LED指示灯的接法都要根据GK7205V300的GPIO复用表重新核对因为不同主控的默认复用功能不一样。我遇到过一个情况PHY的复位引脚连到了一个海思那边默认输出高电平、但国科这边默认是低有效复位的GPIO上导致网口偶尔能link上偶尔link不上排查了一整天才锁定是这个复位逻辑的差异。另外SD卡、USB、音频Codec这类接口基本都是标准接口改动不大但对应的驱动配置和DTS里要一起调整。3. SDK开发环境搭建拿到资料后第一件事3.1 从海思SDK到国科SDK目录结构差异有多大拿到GK7205V300的SDK之后光是解压和看目录结构就能花上半天时间。国科SDK的整体组织方式和海思SDK相似都是典型的“平台SDK应用Demo”结构但各个目录的命名和脚本用法并不一样。以我手上拿到的一个标准SDK版本为例解压后会看到大致这些目录osdrv包含U-Boot、内核、rootfs的编译脚本和源码这是整个SDK的核心mpp媒体处理平台库包含ISP、VENC、VPSS、VI等模块的库文件和头文件smp有的版本会叫这个是系统管理平台相关的组件sample官方提供的应用示例代码基本覆盖了从采集到编码再到网络传输的一条链路tools烧录工具、调试工具、镜像打包工具等docSDK文档包括《SDK安装说明》《硬件设计指南》《API参考》等。第一印象是结构类似实际用起来还是有差别的。海思SDK里mpp的平台库通常分为ko和lib两部分国科这边也是类似的套路但加载模块的名字、内部接口的命名规则都不同。如果你习惯了海思的acodec、venc、vpss这些模块名切到国科平台时需要重新适应一套命名体系。我的建议是先把doc目录下的《SDK快速入门》完整过一遍跟着文档把编译环境和Demo跑起来不要直接去翻内核源码。很多时候移植卡住不是因为源码复杂而是因为没搞懂编译脚本和镜像打包的流程。3.2 交叉编译工具链与基础环境配置交叉编译工具链这块国科SDK一般会在toolchain目录下直接提供或者在文档里给出下载方式。我拿到的是一个基于arm-linux-gnueabihf的工具链直接解压后配置到/opt目录下面。环境变量配置可以这样写但路径要根据自己的实际安装位置调整export PATH/opt/gk7205v300-toolchain/bin:$PATH export CROSS_COMPILEarm-linux-gnueabihf- export ARCHarm建议把这句话写进~/.bashrc方便后面编译内核和应用程序。这里有一个细节国科的交叉编译工具链版本和海思的老版本工具链不一定相同如果你原来项目里的应用程序是用老工具链编出来的直接用新工具链重新编译有可能遇到一些C库差异的问题比如glibc版本导致的警告或错误。遇到这种情况按报错信息逐个解决即可基本都是头文件路径或者宏定义的小问题。应用层的编译相对简单关键是内核和U-Boot的编译流程要跟着SDK的脚本走不要自己重新发明一套。3.3 镜像组成与烧录方式先摸清分区再动手IPC方案的镜像通常包含U-Boot、内核、根文件系统、应用程序几个部分。国科SDK的烧录方式和海思类似一般是通过串口或网口把镜像烧到Flash里。海思常见的烧录方式是使用hitool国科这边使用的是自己的烧录工具界面和操作逻辑类似但需要安装对应的USB驱动第一次使用时要多留意设备管理器是否识别到。我的建议是在新板子上第一次烧录之前先把SDK编译产物的目录结构搞清楚哪个文件是U-Boot、哪个是内核、哪个是rootfs分区地址是多少。不要手里拿个镜像就盲目开烧否则分区表不对烧完板子直接变砖。小技巧拿到新板子先备份原厂固件尤其是U-Boot和分区表。有些板子原厂固件里带有量产测试程序可以用来验证DDR、网络、视频采集等基本功能对早期硬件调试非常有用。我当时就是靠原厂的测试程序把DDR稳定性问题和网络PHY问题快速定位出来的。4. U-Boot与内核移植实操从启动到系统跑起来4.1 启动流程对比与编译配置GK7205V300的启动流程和海思方案基本一致芯片内部BootROM读取Boot设备上的U-BootU-Boot初始化DDR和基本外设然后引导内核启动。区别在于BootROM读取U-Boot的方式、DDR初始化代码、以及时钟初始化的细节。编译U-Boot时官方SDK通常会提供默认配置比如gk7205v300_defconfig这类文件。先编译默认配置确认串口能打印、DDR能跑通再考虑修改代码适配自己的板子。U-Boot编译命令大致是这样make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- gk7205v300_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j8如果串口完全无输出硬件问题的概率比较大优先检查电源、时钟、Boot引脚如果有输出但卡在DDR初始化基本就是DDR参数配置的问题。4.2 设备树(DTS)适配必须改的几个节点内核移植的核心工作是DTS适配。GK7205V300的内核DTS我总结了几个地方是必须重点检查的内存节点内存大小、DDR类型要和硬件对应否则内核启动后会panic时钟节点时钟频率不对串口乱码、网卡速率异常、USB枚举失败都会来串口节点调试串口的地址和时钟要匹配不然启动日志出不来以太网节点PHY地址、RMII模式、复位GPIO、时钟源都要检查视频输入节点MIPI/LVDS接口的lane数、sensor连接的I2C总线、复位和供电GPIO。DTS的语法和配置方式与主流平台大同小异如果之前改过海思、瑞芯微这类平台的设备树上手国科没有太大难度。但要注意不同芯片的时钟控制器和IO控制器寄存器不完全一样不能直接把海思的DMA相关节点、时钟节点原样复制过来一定要以厂商提供的参考DTS为基础去改。我在移植过程中遇到的一个小坑是GPIO的pinctrl命名风格差异。在海思里可能是gpio0_2这类命名规则在国科平台里命名方式可能不同。如果DTS里配置的gpio编号与实际硬件不对应最直接的排查方法是上电后用万用表量对应引脚的电平再配合查看/sys/kernel/debug/gpio来核对比盲目翻代码效率高得多。4.3 关键驱动的迁移网卡、看门狗、RTC与外围设备驱动迁移的工作量主要集中在几个非标准驱动上。以太网驱动方面内核里通常已经带了MAC控制器驱动你只需要在DTS里设置好PHY的模式、地址、复位引脚即可。这里最容易出问题的是PHY的时钟源配置。如果MAC出来的时钟给PHY还是PHY自己带晶振会在DTS里体现为phy-mode和设备树里的时钟引用搞反了就会导致网口无法link或link后频繁掉线。看门狗驱动方面IPC产品基本都要挂看门狗防止系统死机后无人处理。GK7205V300自带的看门狗控制器驱动在SDK内核里一般都有只需要在DTS中确认设备节点已使能。我建议应用层用系统自带的/dev/watchdog接口来喂狗而不是自己在用户态跑一个喂狗进程因为前者在内核崩溃时也能触发复位更可靠。RTC方面如果产品上没有外接RTC芯片一般用芯片内部RTC但内部RTC通常需要电池供电而且时间精度一般。如果产品需要时间校准功能建议驱动上做NTP对时不然用户看到的时间一天比一天慢会直接投诉。外围设备里比较常见的是WiFi模块。目前IPC方案里常用的WiFi模块比如瑞昱、联发科等一般都能在Linux内核里找到对应的驱动源码或者厂商会提供适配好的驱动包。关键点在于WiFi的电源、复位、使能引脚在主控侧的GPIO编号要配置正确然后固件文件要放到rootfs里指定的路径否则会出现驱动加载成功但firmware加载失败的情况。5. 传感器驱动与ISP调试出图是项目的关键里程碑5.1 sensor驱动植入步骤IPC项目的图像链路是sensor采集 → MIPI/LVDS传输 → ISP处理 → VPSS处理 → VENC编码 → 网络发送。其中sensor驱动是第一个拦路虎只有sensor正常出图后面的ISP和编码调试才能继续。移植sensor驱动最关键的就是I2C地址、sensor型号、复位和供电GPIO、MIPI lane配置、sensor输出分辨率这几个参数。国科SDK的mpp/sample里一般会有几个常见sensor的示例比如SC3336、GC2053、IMX307这些型号。如果你的sensor恰好和示例相同那就省事很多只需要改I2C地址和GPIO配置就能跑起来。如果sensor型号不在示例里那你需要做的工作量会大不少通常需要跟sensor厂商拿初始化寄存器序列然后把这段寄存器配置封装成驱动里的初始化数组。这里有一个特别容易翻车的点不同主控的MIPI接口配置比如时钟速率、lane数量必须由主控侧驱动和sensor两侧同时匹配sensor输出1080P30和输出5MP30所需的MIPI时钟完全不同配置错了经常出现“能读到sensor ID但是出不了图”的诡异现象。调试这类问题时建议先确认链路物理通不通。用I2C工具直接读取sensor的ID确认通信正常再用示波器量I2C时钟和MIPI clock lane是否有波形。I2C能通说明方向基本对波形有说明sensor在工作问题就大概率出在MIPI配置或ISP输入格式没对上。5.2 ISP Tuning流程如何把海思的调试经验带过来传感器驱动跑通之后你会发现图像是可以出来了但颜色、亮度、噪点控制都一塌糊涂。这就是接下来要面对的ISP Tuning。ISP调试在行业里也叫“调图”是整个项目里最吃经验、也最耗时间的环节。GK7205V300和海思一样提供了3A自动曝光、自动白平衡、自动对焦算法库在SDK里默认会跑3A但算法要工作得好必须给AE和AWB配置合适的权重参数和目标值。我个人的经验是如果原有的海思项目里已经调好了sensor的tuning参数不要期望能直接搬到国科因为两家ISP内部的算法模型、参数存储格式完全不同。但你的“调图思路”是可以复用的先用灰阶卡和色卡拍摄一组标准图评估当前画面的亮度动态范围和偏色程度然后去tuning工具里调整曝光目标值和白平衡增益范围。调图工具的使用上国科的tuning工具是PC端软件通过串口或网口和开发板连接能够实时修改ISP参数并查看效果。常用操作大致是打开工具连接设备读取当前tuning参数修改某个值后实时预览。这个过程比海思那边早期的调图方式要友好不少至少不用每次改参数都重新烧录。5.3 图像质量常见问题与处理思路我整理了三个最常见的图像问题新手遇到可以先按这个思路排查画面偏色。先确认白平衡是否正常收敛尤其是室内混合光源场景如果AWB完全没有起作用检查sensor的色温信息寄存器是否正确配置再看ISP采样点是否正常。另外别忘了确认sensor输出的color bar是否正常排除sensor本身的问题。画面闪烁。主要原因是曝光时间与光源频率不匹配。在工频50Hz地区AE算法通常需要设置防闪曝光步进这个参数在tuning工具里对应“anti-flicker”相关的设置需要打开并配置为50Hz。如果这个没设对画面会以100Hz的频率闪烁肉眼看着不明显录像回放时会非常明显。噪点严重。夜视场景下噪点多这是所有sensor的天性没有完美方案。可以从三个方面入手适当降低AE目标亮度值、提升ISP的2D降噪/3D降噪强度、在编码侧提高码率。其中3D降噪调过头会带来运动拖影所以需要在清晰度和噪点之间找一个平衡点。6. 我踩过的坑问题排查与解决实录6.1 启动阶段问题串口无输出、DDR初始化失败现象一上电后串口完全无输出。排查顺序是电压是否正常、时钟是否起振、复位是否释放、Boot引脚是否配置对。用万用表量和示波器抓一遍就能定位大多数情况是板子没进入BootROM状态或者Flash里没有烧录U-Boot。现象二串口有输出但卡在DDR初始化。这种情况大概率是DDR参数和实际颗粒不匹配。先回到SDK默认配置确认板子上用的DDR颗粒型号和默认参数是否同一型号如果不同要么换颗粒要么改配置。如果用的就是推荐型号还初始化失败优先检查DDR供电和参考电压这个电压偏差一点点就会引起初始化不可靠。现象三U-Boot能起来但内核启动过程中突然死机。这种问题优先怀疑DDR稳定性或时钟问题可以在U-Boot里用mtest命令跑一遍DDR读写测试如果测试报错说明问题就在DDR如果测试通过再考虑时钟配置或驱动问题。6.2 网络与码流问题网口不通、画面卡顿、花屏网口不通的排查经验前面提到了优先确认PHY复位脚和时钟源。另外RMII模式下50MHz参考时钟的提供方MAC还是PHY必须和DTS配置一致这个不匹配会导致PHY能link但数据收发偶尔错误现象非常隐蔽。画面卡顿的花屏问题一般先分编码前还是编码后。在sensor原始画面正常的前提下如果编码画面卡顿重点看码率控制参数和编码帧率是否匹配如果只是个别帧花屏重点看编码器和sensor之间是否发生了丢帧、VPSS通道配置是否超负荷。我遇到过VPSS通道分辨率设得过高导致编码器输入排队溢出出现周期性花屏把通道分辨率降到规格支持的范围后就正常了。6.3 稳定性与功耗问题高温死机、待机功耗偏高高温死机问题在IPC产品里很常见。排查思路是区分是芯片过热还是复位电路不稳定。用热成像仪看芯片表面温度如果温度远超手册里的结温限值优先优化散热结构或降频。如果是间歇性死机而不是持续高温怀疑是DDR在高温下的时序劣化需要检查DDR的驱动强度和终端电阻配置必要时降低DDR频率以换取温度余量。待机功耗偏高的问题重点检查各路电源在待机时是否正常关断以及GPIO是否存在悬空导致的漏电。IPC产品通常需要低功耗待机模式GK7205V300提供了多种低功耗模式但需要应用层配合在进入待机前把不需要的外设电源关掉尤其是Sensor、网络PHY、音频Codec这些耗电大户。最开始我实现待机功能时功耗比预期高了将近100mA排查后发现是有两个GPIO没配置成下拉导致电平浮空、漏电补上下拉后功耗立刻降下来了。6.4 工程师避坑速查表为了方便后续接手这个项目的同事我把整理的问题排查表放在这里建议截图保存问题表现优先排查项常见根因串口无输出电源、时钟、复位、Boot引脚芯片未进BootROM或U-Boot未烧录卡在DDR初始化DDR颗粒型号、电源、参考电压DDR参数不匹配或供电异常串口乱码U-Boot时钟配置、晶振频率时钟频率不对或晶振选错网口link不上PHY复位脚、时钟源、PHY地址RMII时钟配置错误网口link但断流DTS时钟引用、PHY配置模式时钟源或收发模式不匹配图像偏色AWB参数、sensor色温寄存器3A初始化异常或sensor配置错图像闪屏曝光步进、光源频率防闪功能未开启编码花屏VPSS通道配置、码率控制分辨率超出支持范围待机功耗高GPIO漏电、外设电源未关断电源控制逻辑不完善7. 移植完成后的一点个人体会整个项目从评估到稳定量产周期比预估要长一些但并不是因为技术上有多难而是过程中有太多“看起来差不多、实际不一样”的细节需要逐个核实。最深的体会是移植工作里最值钱的不是写代码而是建立一套“新平台的问题排查直觉”知道哪些地方容易出问题、出了问题从哪里查起。如果一定要给大家一个建议我希望是换平台这件事一定要在一开始就下定决心不要“边换边摇摆”。如果团队里有人总想着“海思那边这么简单怎么到这边就这么麻烦”很容易在遇到挫折时走回老路反而浪费更多时间。干脆利落地把平台切过来该调的地方调该改的地方改反而会更快跑通。最后再分享一个小技巧整个移植过程中我在板子上保留了一个串口日志输出并且用自动脚本把每次启动的完整日志都保存下来。这个习惯帮我解决了很多“偶发问题”因为问题复现不了时翻历史日志往往能找到之前忽略的线索。做嵌入式这行很多时候拼的不是聪明而是细致。
返回列表