一台TP -Link公司生产的TL -WR841N无线路由器,标识的硬件版本是V3,描述的故障现象是刷机失败导致无法启动,即变成所谓的“砖机”。
分析检修:接手后马上通电试机,发现除SYS指示灯以外,其他指示灯均常亮,明显是固件错误导致该路由器无法正常工作。解决此类故障一般只要重新刷入正确的固件即可,由于机器已无法正常启动,从Web界面刷机已不可能,查阅资料得知可利用PCB板上的TTL接口写入固件以使机器能正常工作。打开路由器,发现板上标识P1位置已加了四个插针,如图1所示,看来先前已尝试过TTL刷机,只是没有成功罢了。从网上查找资料得知该型号路由器TTL接口定义是(从JTAG焊盘J5算起):TX、RX、Gnd和Vcc,立马用杜邦线连接USB口转接TTL刷机小板,将该路由器与电脑连接,开启“SecureCRT”程序并选择“Serial协议”,设置好COM端口号,波特率选“115200”,点击连接后再打开路由器电源却没有任何反应。仔细查看路由器PCB板,发现没有安装0Ω的短路电阻R356,点上焊锡后再次联机发现SecureCRT程序有反应,如图2所示,显示的终端为AR7100实际标识为AR9130)处理器,32MB内存,闪存为8MB(实际为4MB)。为了停止检测程序不断自检以方便写入固件,必须在is内输入“TP”停止指令,不过笔者试过多次均无效,怀疑路由器RX接收电路有问题,这样的话路由器只能给电脑端发送信号而无法接收传送信号。断开杜邦线测RX针电压仅0.67V左右,而TX针为正常的3.3V左右。RX针还对地接有一个编号C376的滤波电容,将其取下后RX电压还是很低,看来是主芯片内部TTL接口电路有问题,这也就代表TTL刷机无能为力了。
修复此机的办法看来只有借助编程器了,幸好笔者手里有CH341A编程器。用858热风枪将Intel 320S33B(U2)16脚Flash闪存拆下再焊接至SOP16→DIP8转换板上,然后装回转换板放到CH341A编程器上插入电脑,如图3所示。运行CH341A编程器软件,点击“检测”按钮后软件无法识别闪存品牌型号及大小,不过可以发现Manufacture ID、Memory Type和MemoryCapacity均有相关数据显示,这说明电脑与该闪存间通信是正常的,参考编程器说明书得知,当检测目标芯片为“Unknown”时并不代表编程器不能烧写,此时可通过手动选择芯片进行烧写操作,若芯片列表中没有对应型号选“COMMON(通用)”即可(SST和ESMT除外)。于是在CH341A编程器软件类型栏目中选“ 25 SPIFLASH”,厂商选“COMMON”项,名称选“25X32”-项,即容量为4MByte/32MBit。点击“打开”按钮并定位到之前下载的TL-WR841N V3固件,然后再击点“自动”按钮让编程器自动完成“查空。编程、编程”操作,如图4所示,当弹出如图5所示的对话框时,代表数据已经正常无误写入到闪存中。将写好数据的闪存焊到PCB板上后打开电源发现故障依旧,难道无法识别型号的闪存按此法强行写入数据有误?不过仔细查看写入的固件大小发现有问题,因为笔者烧写的这个固件是从TP-Link公司官网下载的,大小为3.75MB,而闪存为4MB,从过去刷写中九接收机固件的经验来看两者大小应该一致。再次查找资料得知:从官网下载的3.75MB大小的升级固件是用来升级Web界面的,该固件不包括UBoot程序,因此路由器将无法自动引导,看来必须找到包括UBoot程序的固件写入闪存才可以修复机器。后来经过网上一番搜索,终于找到了网友使用编程器备份的TL-WR841N V3无线路由器固件,下载解压后果然为4MB大小的bin文件。再次拆下U2装至编程器上,写入新下载的4MB固件,写好后再装到PCB板上,通电试机发现除电源指示灯外,其他指示灯一闪即灭,稍后SYS灯常闪,看来路由器已经启动了,立刻用网线将电脑与该路由器连接,发现电脑端可以自动获得IP地址,在浏览器里输入“192.168.1.1”网关地址和输入用户名、密码,成功登录到管理界面,如图6所示,进行相关设置后网络也正常,至此,这台TL-WR841N V3无线路由器完全修复。
知识链接:Uboot全称是UniVersal Boot Loader,它是遵循GPL条款的开放源码项目,由德国DENX,小组开发用于多种嵌入式CPU的bootloader程序,UBoot不仅仅支持嵌入式Linux系统的引导,还支持NetBSD、VxWorks、QNX、RTEMS、ARTOS、LynxOS嵌入式操作系统。UBoot除了支持PowerPC系列的处理器外,还能支持MIPS、x86、ARM、NIOS,XScale等诸多常用系列的处理器。Uboot程序相当于PC电脑中的BIOS程序,PC个人电脑的启动都是先执行BIOS程序,然后由BIOS程序将控制权交给操作系统(比如Windows XP),若PC中的BIOS程序出错是无法正常启动的。因此,在路由器中若闪存中无Uboot程序的话也是无法正常启动的。其实不光是路由器,很多其他嵌入式系统也如此,即用编程器写入的固件要包括Uboot程序,通常这些固件与普通固件的区别是其大小与闪存容量大小是一致的,因为这类固件通常都是使用编程器直接从闪存中读出来的。