烽火HG680-MC TTL串口救砖全分区备份实战指南
最近有朋友寄过来一台烽火HG680-MC故障很典型通电后电源灯亮但HDMI黑屏遥控器没有任何反应U盘强刷也试过短接进刷机模式也试过统统无效。这种状态在运营商机顶盒里非常常见——系统分区数据已经损坏但底层引导还活着。只要引导没死用TTL串口进到底层命令行就能把盒子从“黑屏”里拉回来。这篇指南就是针对烽火HG680-MC的TLL救砖过程重点是“全分区”这个思路。所谓全分区不是只刷一个system完事而是把eMMC上的分区表、引导程序、环境变量、recovery、system、vendor这些关键分区整体对待能备份就备份能恢复就恢复。适合手上正好有HG680-MC、或者类似主控方案运营商盒子的人参考。TTL刷机本身不复杂但细节非常多接错线、踩错命令、断电时机不对都可能把砖刷得更死。这篇文章会把每一步都拆开讲清楚。1. 先搞清楚HG680-MC的“砖”是哪一种1.1 软件砖和硬件砖的判断拿到盒子不要急着拆先做两个最简单的判断通电后电源灯亮不亮如果完全没反应优先怀疑电源板、DC-DC电路、电容这类硬件问题这种TTL解决不了。另一种是电源灯亮但HDMI始终黑屏、遥控器失灵、网口指示灯不正常闪动这种绝大多数是软件层面的问题。软件砖也有不同层次。烽火HG680-MC的核心存储是eMMC里面一般分引导区、环境变量区、recovery、boot、system、vendor、cache、userdata这些分区。不同层坏了表现完全不一样环境变量丢了可能反复重启但底层还能进。boot/recovery分区损坏卡在logo、黑屏但引导程序还会打印日志。system/vendor损坏开机动画后黑屏、循环重启USB强刷有时能刷回来。分区表损坏整机直接变“死砖”DLP/短接模式都未必能进。eMMC物理坏块无论怎么刷都会在特定位置卡住只能换存储。TTL救砖的核心价值在于它可以让你在屏幕完全黑掉的情况下依然看到芯片底层的输出日志进入U-Boot命令模式。如果bootloader自己没坏大部分软件砖都能在这一层解决。1.2 为什么强调“全分区”而不是“强刷一次”很多教程让用户去买一个原厂刷机包插U盘强刷或者用刷机工具烧写system。这种方案的前提是recovery或bootloader还能正常引导刷机流程。我遇到过不少盒子是在OTA升级中断后boot和recovery一起损坏U盘强刷根本不识别。这时候只刷system是没用的必须把fastboot、bootloader、recovery这些底层分区一起恢复。全分区救砖的另一个好处是事后能备份。第一次把盒子救活之后马上对整颗eMMC做一份完整的dd镜像以后就算再变成砖也能够直接恢复不需要再去找固件、碰运气。这就是标题里“全分区”三个字的意义不是只治眼前而是保存整套系统快照。1.3 工具清单和准备工作工具用途说明USB转TTL模块连接电脑和主板推荐CH340G/CP2102/PL2303必须有3.3V电平不能直接用RS232杜邦线/母对母模块与主板针脚连接建议不同颜色区分GND/TX/RX万用表找针脚定义、确认电平没有也能做但强烈建议准备螺丝刀/撬棒拆机壳烽火盒子卡扣紧金属撬棒容易留痕迹串口终端软件收发日志和命令PuTTY、MobaXterm、SecureCRT都行U盘或TFTP服务器传输镜像文件U盘必须FAT32TFTP需要网线和路由器对应固件恢复分区用优先本机备份或原厂包不要随便用陌生人的固件硬件方面还要确认USB转TTL模块的跳线或供电电压。CH340G模块上一般有3.3V/5V的电平选择机顶盒UART几乎都是1.8V或3.3V电平强烈建议用3.3V。有些模块接5V供电虽然也能跑但长时间使用容易烧主板上的串口保护电阻。2. 拆机、找TTL针脚比刷机更花时间的操作2.1 拆除外壳的细节烽火HG680-MC外壳一般有螺丝加卡扣结构。先把底部脚垫掀开通常能看到两到三颗十字螺丝拆掉后用撬片从侧面缝隙慢慢撬开。卡扣位置大多在四角不要蛮力掰容易把外框卡扣直接掰断。如果遇到顽固卡扣可以先用吹风机低档加热外壳塑料变软一点后会好拆很多。拆开后先断开电源等待几分钟让主板上电容放电再进行后续操作。主板上的TTL调试接口位置不固定常见的是4针或5针的排针也有直接用英文丝印标注“UART”“DEBUG”“CON”的。HG680-MC不同批次主板略有差异有的丝印清晰写着GND、TX、RX有的只标了一个“VCC”和三个空位这时候就要靠万用表去确认。2.2 四针排针的接线规则如果主板上找到的是四针排针标准定义一般是VCC、GND、TX、RX。接线原则USB转TTL模块的TX接主板RX。USB转TTL模块的RX接主板TX。USB转TTL模块的GND接主板GND。主板VCC不接那是给模块参考用的接错容易烧。很多人第一次接没输出99%原因是TX和RX搞反了。TTL串口接线是交叉的不是直接一对一。如果屏幕完全没有输出第一件事就是交换TX/RX而不是怀疑模块坏了。2.3 用万用表快速定位未标注针脚碰到丝印不清的板子可以通电后用万用表直流电压档测电压。黑表笔接主板金属屏蔽罩或USB外壳红表笔分别量排针记录电压0V的针脚大概率是GND。3.3V或1.8V的可能是VCC也可能是TX/RX的上拉电平。刚开机时电压在跳动的多半是TX或RX。更稳妥的办法是找出GND后先把模块的GND接好TX和RX两根线先随便接打开串口终端后给盒子上电如果没输出就对调两根线。这种方法不依赖万用表也能解决大多数情况但前提是TX/RX不至于接错到VCC上。所以至少先用万用表排除出所有持续高电平、疑似VCC的引脚。3. 让盒子“开口说话”串口连接与U-Boot中断3.1 驱动、端口号和串口参数先把USB转TTL模块插到电脑安装对应驱动。CH340G在Windows下一般会自动识别如果设备管理器里看到“USB-SERIAL CH340”后面带黄色感叹号需要手动装驱动。识别成功后记下COM端口号比如COM3、COM5之类。打开PuTTY或者MobaXterm新建串口会话填写COM口号。波特率对烽火HG680-MC来说最常见的是115200数据位8位停止位1位无校验无流控。这几个参数简称“115200 8N1”。配置好后打开会话此时界面是空白的不用急着按键先给盒子通电。通电后终端里应该开始滚动大量日志。如果只是黑屏但是有启动日志输出说明TTL连接已经成功了接下来要解决问题会容易很多。如果完全没有任何输出按3.2节排查。3.2 U-Boot中断的时机和关键手法串口日志开始滚动后你需要在中止启动进入U-Boot命令行。最常见的中断方式是通电瞬间立刻按住键盘上的Ctrl C。或者通电后不停敲击回车键。部分烽火盒子是开机后1~2秒内按任意键。U-Boot提示符长什么样子取决于主控平台可能是Hi3798MDMC#、S905X#、U-Boot#也可能是hisilicon #。看到这个提示符就说明你已经进入底层命令行TTL救砖最困难的部分已经过去了。如果没有中断成功系统会直接加载Linux内核并卡住或者黑屏这时候重新断电、重复操作即可。有个小技巧打开串口后先不要在通电前乱按等出现第一行日志再按CtrlC成功率更高。如果bootdelay被改成0根本等不到你按键就需要在上电前按住CtrlC不松手再给盒子上电。3.3 常见无输出、乱码问题的完整排查链路遇到开机无输出按下面顺序一步步查检查GND是否真连到主板地。模块的GND没接好TX/RX再对也不会有输出。交换TX和RX。这一条看似简单但新手最容易卡在这。确认模块上的电压跳线是否在3.3V方向是否在5V方向导致电平不匹配。确认COM口号选择正确。如果电脑装了多个USB转串口驱动终端打开的可能不是实际使用的那一个。确认波特率。HG680-MC虽然常见115200但也有少数固件改成57600可以试一下。用示波器或万用表量主板TX脚是否真的输出波形。如果TX脚电平一直是0V或恒定1.8V/3.3V没跳变说明CPU可能没有正常启动。乱码则比较简单。看到满屏乱码排除接线问题后基本就是波特率不对先试115200再试57600、38400、9600。个别海思平台可能用1500000这种非标波特率需要终端软件支持。3.4 进入U-Boot后先做环境变量备份进入提示符后第一步别急着刷分区先执行printenv这个命令会把当前环境的启动参数、bootdelay、bootcmd等打印出来。先把这些输出保存到文本文件里后面恢复错了还能靠它找回来。也可以执行saveenv确保环境变量能正常保存。如果环境变量区本身损坏U-Boot会给出类似Warning: Failed to set environment之类的提示这时候就要把环境变量区也纳入恢复计划。4. 分区表确认和全分区备份的关键命令4.1 先看eMMC和分区表进入U-Boot后先让U-Boot识别一下eMMCmmc list mmc dev 0 mmc partmmc list显示当前有几个存储设备mmc dev 0选中编号为0的eMMCmmc part打印分区表。如果能打印出类似Partition 1: boot、Partition 2: system这样的信息后面操作会很有底。如果mmc part不可用可以用mmc info查看存储大小再通过读取头部数据来分析分区表。这些命令在不同U-Boot版本里略有差异。有的盒子支持mtdparts有的用blk dev系列命令关键是理解底层逻辑mmc read/write操作的是物理块地址不是文件路径。4.2 在U-Boot里备份关键分区到U盘全分区镜像可以很大U-Boot阶段一次性读整个eMMC并不现实因为可用的内存通常只有几百MB而完整eMMC可能是4GB或8GB。所以U-Boot阶段适合备份单个分区而不是整颗eMMC。先把U盘插入盒子USB口然后在U-Boot里查看是否能识别U盘usb start fatls usb 0如果能看到U盘根目录下的文件说明FAT文件系统正常。接下来可以读取单个分区并写出到U盘。假设通过mmc part查到boot分区的起始块是0x2000大小是0x10000块块的大小是512字节。备份命令大致是mmc dev 0 mmc read 0x1000000 0x2000 0x10000 fatwrite usb 0 0x1000000 boot_part.img 0x800000这段命令首先把eMMC上起始块0x2000、长度0x10000块的数据读到内存地址0x1000000然后把内存数据写成U盘上的boot_part.img。后面的0x800000是文件长度字节数0x10000块 × 512字节 0x800000字节刚好对应。实际操作时要根据自己分区表里的起始地址和大小换算不要照抄。U-Boot阶段备份整颗eMMC的做法比较麻烦因为要循环读写而且fatwrite有可能超过FAT文件单文件大小限制。一般我建议先备份下面几个关键区域分区表头部前几MB。bootloader引导区。环境变量区。recovery分区。boot分区。这些分区加起来通常不超过64MBU-Boot阶段完全能处理。system、vendor这种大分区等系统恢复正常后再进Linux用dd备份速度更快也更完整。4.3 恢复分区的核心逻辑恢复命令和备份是反着来的。比如要把U盘里的recovery.img写回指定分区先用fatload把文件加载到内存fatload usb 0 0x1000000 recovery.img再用mmc write写回目标分区mmc dev 0 mmc write 0x1000000 0x8000 0x10000这里0x8000是分区起始块号0x10000是块数。如果在写的过程中提示write error很可能是分区起始地址或块数写错也有可能是eMMC有坏块。写错地址的后果远比写错内容严重因为它可能覆盖到分区表或其他引导数据。强烈建议在写任何分区之前先用mmc read读一下目标区域的原始数据确认里面是不是你要覆盖的内容。4.4 进入Linux后做整颗eMMC备份救砖完成后系统应该能正常启动。这时候别急着收工立刻做一次完整备份。在终端中执行export PATH/system/bin:$PATH然后查看具体块设备名ls /dev/block/mmcblk0* # 不同系统可能不同常规dd备份dd if/dev/block/mmcblk0 of/external_storage/full_emmc.img bs4M注意eMMC容量如果是4GB备份文件也是约4GB所以要插一个足够大的U盘或移动硬盘。如果不想备份整个userdata也可以只备份各个系统分区dd if/dev/block/mmcblk0p1 of/external_storage/boot.img dd if/dev/block/mmcblk0p2 of/external_storage/recovery.img设备节点名不保证一样先用ls -l /dev/block/platform/*/by-name/找一下分区名。有了这次完整备份以后这个盒子再出问题完全可以直接写回不再依赖网上的固件包。5. 实际救砖时最容易翻车的几个场景5.1 中断时机错过启动日志一直滚到黑屏这是每个TTL新手都会遇到的问题。盒子通电后日志滚动得很快你还没来得及按CtrlC系统就进入Linux了然后黑屏。解决方法是找到U-Boot里这个变量setenv bootdelay 5 saveenv把bootdelay设为5秒甚至10秒这样每次重启都有足够时间去按中断。已经进不了U-Boot也没关系断开电源按住CtrlC不松手再给盒子上电多数平台会优先进入命令行。如果这个方法无效可能是U-Boot编译时屏蔽了中断键可以在日志里搜一下“Hit any key”之类的提示看它提示哪个键。5.2 环境变量区坏了进系统卡logo有一个朋友刷机时用mmc write写错块号把环境变量区部分覆盖了。结果就是盒子能开机但是一直卡在运营商logo重启按键也没用。进入U-Boot后env命令无法打印变量U-Boot每次启动都用默认值所以找不到正确的bootcmd。这种情况下如果之前保存过printenv输出可以手动恢复环境变量setenv bootcmd run boot_normal setenv bootargs consolettyS0,115200 ... saveenv可靠的思路是把环境变量区从同型号正常盒子里备份出来再用U-Boot写回去。环境变量区通常很小只有几MB。值得提醒的是不要随意清除整个环境变量区有些盒子环境变量区里还保存着mac地址、flash分区参数丢了要花很长时间才找得回来。5.3 电源电压不稳写分区写到一半失败TTL刷机过程中盒子是通电的U盘也是通电的如果电源适配器老化电压纹波比较大mmc write到一半可能出现write error或timeout。这种问题表面上是存储坏了其实是供电不足。解决办法有两个一是换一个电流更大的原装电源适配器比如12V 1A换成12V 1.5A二是在写比较大的分区时尽量避免同时让U盘和无线模块大负载工作。还有一点写分区期间千万不要拔电。U-Boot本身不校验写回数据的完整性中途断电会导致分区只写了一半可能让原本还能救的盒子彻底变砖。如果所在环境经常停电建议给盒子接一个UPS或者至少在没人打扰的时段操作。5.4 备份和恢复的块大小换算错误U-Boot里mmc read/write的地址参数有的是块号有的是字节地址不同平台定义不同。我在海思平台上遇到过用字节地址就能写但换到晶晨平台就变成块号的情况。统一的换算公式是eMMC的一个块通常为512字节。分区起始地址0x1000块其实就是0x1000 × 512 0x200000字节。如果用字节地址接口就要写0x200000而用块接口则写0x1000。最稳妥的方法是写之前先用mmc read读一段出来用md命令查看内容确认地址是符合预期的。比如要写boot分区先读boot分区原有内容看到里面有U-Boot字符串或分区签名再执行写操作。6. 什么情况下TTL也无能为力6.1 引导ROM损坏或DDR初始化失败如果TTL接好、波特率正确、TX/RX没接反但上电后终端里一个字都没有而且万用表测量TX脚有波形输出那么问题很可能出在CPU上电时序、DDR初始化、或者BootROM本身。这种情况通常不是分区损坏而是硬件启动链路有问题比如CPU供电不足、DDR虚焊、晶体不起振。遇到这种现象别再反复刷固件了先检查主板上几颗关键的DC-DC电源芯片输出电压是否正常。烽火HG680-MC在正常启动时内存供电一般会有1.2V左右、核心供电1.1V左右如果某个电压完全为0TTL自然没输出。这时候需要修的是电源电路不是刷机。6.2 Bootloader完全损坏时TTL救不了要靠短接或编程器TTL救砖的前提是U-Boot还能跑。如果整个bootloader都被覆盖成空白CPU上电后找不到引导代码串口可能完全没有输出。这种情况在运营商盒子上不如老路由器常见因为eMMC里的bootloader有保护分区普通写操作很难覆盖但如果你在U-Boot里执行了错误的全盘擦除或者用了不对的线刷工具依然可能发生。此时可以尝试的路线是如果是晶晨主控拆机找到eMMC附近的短接点短接后插入USB电脑识别到烧录模式用USB Burning Tool重新刷入整个镜像。如果是海思主控可能需要HiTool的“烧写eMMC”方式或者用编程器直接读写eMMC芯片。6.3 画一条救砖优先级路线我自己经手过的HG680-MC救砖优先级是这样的先确认TTL有输出进入U-Boot。备份环境变量和引导区。尝试用U盘/TFTP恢复recovery和boot分区。启动到系统后用dd做全分区备份。后续再砖直接倒灌完整镜像不再走复杂流程。如果TTL连一行日志都没有我不会继续盲目操作而是先量电压、查电源、摸主控温度。很多人把“刷机”当成万灵药其实有相当一部分盒子变砖的根本原因是供电电容老化这种问题TTL是解决不了的必须换硬件。救砖这件事最怕的不是砖头本身而是信息在慌乱中全部丢失。我现在的习惯是第一次拿到盒子时先在U-Boot里执行一遍printenv、mmc part把输出存成日志文件再考虑下一步。哪怕暂时不刷这套日志也是以后排查问题的葵花宝典。如果你手上也有一台黑屏的HG680-MC先不要急着丢拆机接上TTL看一眼日志很多时候只是环境变量或某一个小分区出了问题几分钟就能救回来。