找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 85058|回复: 316

[红米ax6000] 红米AX6000刷hanwckf大佬的不死uboot+刷回官方固件+TTL救砖+编程器救砖教程

 火... [复制链接]
本帖最后由 lgs2007m 于 2024-3-9 19:03 编辑



MediaTek Filogic 系列路由器串口救砖教程

感谢蝈蝈大佬开发的 mtk_uartboot 工具,暗云大佬提供的教程,这样就可以随便刷砖了
适用系列:MediaTek MT7622、MT7981、MT7986、MT7988 SoC

有了串口TTL救砖,天下无砖!



hanwckf大佬uboot地址:
https://github.com/hanwckf/bl-mt798x/releases/tag/20230902
下载后解压出来mt7986_redmi_ax6000-fip-fixed-parts-multi-layout.bin就是20230902最新红米AX6000的uboot
20230902大佬更新了最新红米AX6000支持多分区的uboot,具体使用可以看大佬博客https://cmi.hanwckf.top/p/mt798x-uboot-usage/

不死uboot具体情况可以看hanwckf大佬不死uboot的commit:add support for redmi-ax6000
刷hanwckf大佬的不死uboot后,uboot启动时通过设置默认mtdparts把官方分区ubi(30MiB)、ubi1(30MiB)和overlay(50MiB)合并为一个ubi(110MB)大分区,但是uboot并没有设置默认env环境变量,我猜还是读取存放在Nvram分区的env环境变量ipaddr=192.168.31.1,所以进入不死uboot webui的地址是192.168.31.1,目前不死uboot还不支持LED灯。

刷不死uboot后不支持小米官方救砖工具,需要刷回原厂FIP分区后,才能用小米救砖工具刷回官方固件。
hanwckf大佬并未发布红米AX6000刷uboot教程,该教程参考大佬360T7刷uboot教程,和论坛其他几个大佬的实践,感谢~

刷机有风险,刷uboot更加,这个教程只是个人实践的一点总结,测试正常,仅供参考,变砖勿扰!

【110MB大分区uboot版本固件】
目前237大佬和hanwckf大佬的闭源OP支持uboot(ubi分区110MB)大分区,OpenWrt官方X-Wrt源码则已经更新了ubootmod(ubi分区122.5MB),为了避免混乱他们舍弃了uboot(ubi分区110MB)的支持,Lean开源源码目前还支持110MB大分区固件,大家也可以尝试。

强烈推荐237大佬的闭源OP,uboot大分区和官方分区的固件都有:

https://www.right.com.cn/forum/thread-8261104-1-1.html

坛友编译的hanwckf大佬源码uboot大分区固件:

https://www.right.com.cn/forum/thread-6352752-1-1.html
https://www.right.com.cn/forum/thread-8266074-1-1.html

我的云编译地址:https://github.com/lgs2007m/Actions-OpenWrt




目录
【1】从官方固件或237大佬闭源OP刷hanwckf大佬的不死uboot
【2】从hanwckf大佬的不死uboot刷回官方
【3】TTL简单使用
【4】CH341A/CH341B编程器救砖




【1】从官方固件或237大佬闭源OP刷hanwckf大佬的不死uboot
因为官方固件没有锁mtd分区,237大佬2022-11-29以后更新的闭源OP已解锁FIP分区,所以从这两种固件下都可以刷uboot。
注:hanwckf大佬源码编译的固件也是解锁FIP分区的,可以直接刷。

如果你是官方原厂固件的话,需要先解锁SSH,解锁教程可以参考NormalPeople的,只需要解锁SSH,再关闭开发者模式即可,刷OP不需要固化SSH。
【保姆级教程】红米AX6000永久获取SSH权限(Redmi AX6000)

如果你是237大佬的官方分区的闭源OP固件,版本小于11-29,需要更新下,然后就可以直接刷uboot了。

官方固件解锁后SSH软件登录路由器查看原厂分区,可以看到原厂的ubi和ubi1两个固件分区是30MB,ubinfo -a查看实际可用29MB:
  1. root@XiaoQiang:~# cat /proc/mtd
  2. dev:    size   erasesize  name
  3. mtd0: 08000000 00020000 "spi0.1"
  4. mtd1: 00100000 00020000 "BL2"
  5. mtd2: 00040000 00020000 "Nvram"
  6. mtd3: 00040000 00020000 "Bdata"
  7. mtd4: 00200000 00020000 "Factory"
  8. mtd5: 00200000 00020000 "FIP"
  9. mtd6: 00040000 00020000 "crash"
  10. mtd7: 00040000 00020000 "crash_log"
  11. mtd8: 01e00000 00020000 "ubi"
  12. mtd9: 01e00000 00020000 "ubi1"
  13. mtd10: 03200000 00020000 "overlay"

  14. root@XiaoQiang:~# cat /proc/partitions
  15. major minor  #blocks  name
  16.   31        0     131072 mtdblock0
  17.   31        1       1024 mtdblock1
  18.   31        2        256 mtdblock2
  19.   31        3        256 mtdblock3
  20.   31        4       2048 mtdblock4
  21.   31        5       2048 mtdblock5
  22.   31        6        256 mtdblock6
  23.   31        7        256 mtdblock7
  24.   31        8      30720 mtdblock8
  25.   31        9      30720 mtdblock9
  26.   31       10      51200 mtdblock10
  27. 253        0      15748 ubiblock0_1
复制代码

更新237大佬2022-11-29官方分区的闭源OP后,查看分区,可以看到保留官方分区下刷OP,ubi是80MB,ubinfo -a查看实际可用77.5MB。
  1. root@ImmortalWrt:~# cat /proc/mtd
  2. dev:    size   erasesize  name
  3. mtd0: 08000000 00020000 "spi0.1"
  4. mtd1: 00100000 00020000 "BL2"
  5. mtd2: 00040000 00020000 "Nvram"
  6. mtd3: 00040000 00020000 "Bdata"
  7. mtd4: 00200000 00020000 "Factory"
  8. mtd5: 00200000 00020000 "FIP"
  9. mtd6: 00040000 00020000 "crash"
  10. mtd7: 00040000 00020000 "crash_log"
  11. mtd8: 01e00000 00020000 "ubi_kernel"
  12. mtd9: 05000000 00020000 "ubi"

  13. root@ImmortalWrt:~# cat /proc/partitions
  14. major minor  #blocks  name
  15.   31        0     131072 mtdblock0
  16.   31        1       1024 mtdblock1
  17.   31        2        256 mtdblock2
  18.   31        3        256 mtdblock3
  19.   31        4       2048 mtdblock4
  20.   31        5       2048 mtdblock5
  21.   31        6        256 mtdblock6
  22.   31        7        256 mtdblock7
  23.   31        8      30720 mtdblock8
  24.   31        9      81920 mtdblock9
  25. 253        0      13516 ubiblock0_0
  26. 252        0    245760 zram0
复制代码

官方固件或237大佬闭源OP备份分区和刷uboot命令是一样的,可以直接用。

建议刷机前做好原厂分区备份,建议备份BL2、Nvram、Bdata、Factory、FIP分区,以便不时之需。
Factory为无线EEPROM分区,很重要,建议备份本机的!其他人的备份是否能用我还不太懂。
Bdata存储着你的SN和MAC,建议备份。
Nvram存储着环境变量,建议备份,其他人的应该也可以启动,不过没试过。
BL2和FIP可以用其他人的,不过也建议备份。

有些分区的作用我还理解不透彻,我个人是全部分区都备份的。凡是先备份,小心驶得万年船~

官方系统和刷保留官方分区的闭源OP后的分区号相同,BL2、Factory、FIP内容不变,Nvram、Bdata设置后内容有变,不过不影响,备份其中一个系统下面的即可,后面都是刷回备份后用小米救砖工具恢复。
刷其他固件和一些过渡固件的,注意cat /proc/mtd查看分区对应的mtd序号是否一样。
运行dd命令备份分区到tmp文件夹:
  1. dd if=/dev/mtd1 of=/tmp/mtd1_BL2.bin
  2. dd if=/dev/mtd2 of=/tmp/mtd2_Nvram.bin
  3. dd if=/dev/mtd3 of=/tmp/mtd3_Bdata.bin
  4. dd if=/dev/mtd4 of=/tmp/mtd4_Factory.bin
  5. dd if=/dev/mtd5 of=/tmp/mtd5_FIP.bin
复制代码
然后WinSCP等SCP协议软件登录路由器,打开tmp文件夹,将备份下载到电脑保存好。

保存好备份分区后,可以用WinSCP上传uboot文件到tmp文件夹下,然后逐条输入下面命令,将uboot刷入FIP分区:
  1. md5sum /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin
  2. mtd write /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
  3. mtd verify /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP
复制代码
注意:在op系统内mtd write会自动擦除再写入,不需要先擦除了。但是TTL进uboot控制台时需要先擦除再写入!!!
注意:FIP分区时不能断电、重启,不然就直接变砖,只能上编程器了。
这四条命令是使用md5sum检查上传到tmp文件夹的uboot文件的md5值,擦除FIP分区,无误后用mtd write将uboot文件写入FIP分区,再用mtd verify对比检查uboot文件是否已写入FIP分区。
注意mtd命令最后的FIP是大写。

逐条输入命令回车后,输出是如下这样的,可以检查uboot文件的md5是否和我一样,以及mtd verify对比检查最后是否输出为Success(这里示例使用的是20221201版uboot):
  1. root@XiaoQiang:~# md5sum /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin #查看上传到tmp文件夹的uboot文件md5值,无误后刷入
  2. 7610a1722073748c3c3a860b75d94d5d  /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin
  3. root@XiaoQiang:~# mtd write /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP #使用mtd write命令将文件写入FIP分区
  4. Unlocking FIP ...

  5. Writing from /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin to FIP ...
  6. root@XiaoQiang:~# mtd verify /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin FIP #使用mtd verify命令对比uboot文件和FIP分区
  7. Verifying FIP against /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin ...
  8. 72a110768c7473200b863a3c5d4dd975 - FIP
  9. 72a110768c7473200b863a3c5d4dd975 - /tmp/mt7986_redmi_ax6000-fip-fixed-parts.bin #这个不是md5值,使用什么算法我不清楚
  10. Success #显示Success表示检查没问题,显示Failed表示失败,需要重新刷下再检查
  11. root@XiaoQiang:~#
复制代码

对比检查最后输出“Success"说明刷入已成功,此时拔掉路由器电源,然后将电脑的IP地址设置为固定的192.168.31.100/24,接着按住路由器的RESET按钮后通电开机,等待15秒后松开RESET(因为uboot尚未支持LED指示灯,所以指示灯不会亮),用Chrome浏览器进入192.168.31.1,就会见到uboot的webui(Web failsafe UI),在这个webui页面选择要刷入的110MB大分区固件。
注意:红米AX6000官方系统支持WAN、LAN切换,可以随意插网线自动识别,但是刷op后WAN口固定是1口(靠近电源插头的那个口),2-4口是LAN口,网线插LAN口才能获取到IP,登录路由器。

PS:经过观察,进不死uboot不需要住RESET按钮后通电,只需要在通电后5秒内,按住RESET按钮等待10秒,再松开即可,可单手操作。
数秒的小技巧:心中默念用三位数来数秒即可,如001、002、003、004、005……015。
进uboot的webui时的TTL输出:


经测试,hanwckf大佬的不死uboot支持直接刷入factory.bin或sysupgrade.bin。详情可以看
如果刷sysupgrade.bin启动不了,可以尝试刷factory.bin。
237大佬的闭源OP的uboot大分区固件其实是sysupgrade.bin,包含kernel和rootfs,uboot会读取把这两块分别写入相应地址。

使用Chrome浏览器上传uboot大分区固件,然后点击update,等待出现UPGRADE COMPLETE!更新成功正在重启界面,表示已经刷入成功。
如果第一次刷出现UPGRADE FAILED更新失败,可能是因为Failed to attach UBI失败,可以刷新192.168.31.1页面,重新上传再刷一次即可。
如果刷固件后等很久系统都没有起来,可以断电重新进uboot再刷一次。
webui刷固件完整过程:

有可能出现的更新失败界面:


提示刷入更新成功,正在重启即可把电脑IP设置自动获取,等2分钟(经过观察,刷完重启到启动完成要1分40秒),浏览器输入固件地址登录即可,237大佬闭源op是192.168.6.1。
因为现在uboot未支持LED指示灯,LED会保持之前的状态,对于尚未支持LED驱动的固件,刷了之后指示灯是关闭的,不用看指示灯来判断是否已完成启动。
目前开源源码编译的固件都已支持LED,hanwckf大佬的闭源源码也支持了,等237大佬的支持就都可以看灯来判断启动是否完成了。

uboot下刷好固件,重启后SSH登录闭源OP查看分区,可以看到ubi分区变成了110MB,ubinfo -a查看实际可用106.5MB:
  1. root@ImmortalWrt:~# cat /proc/mtd
  2. dev:    size   erasesize  name
  3. mtd0: 08000000 00020000 "spi0.1"
  4. mtd1: 00100000 00020000 "BL2"
  5. mtd2: 00040000 00020000 "Nvram"
  6. mtd3: 00040000 00020000 "Bdata"
  7. mtd4: 00200000 00020000 "Factory"
  8. mtd5: 00200000 00020000 "FIP"
  9. mtd6: 00040000 00020000 "crash"
  10. mtd7: 00040000 00020000 "crash_log"
  11. mtd8: 06e00000 00020000 "ubi"

  12. root@ImmortalWrt:~# cat /proc/partitions
  13. major minor  #blocks  name
  14.   31        0     131072 mtdblock0
  15.   31        1       1024 mtdblock1
  16.   31        2        256 mtdblock2
  17.   31        3        256 mtdblock3
  18.   31        4       2048 mtdblock4
  19.   31        5       2048 mtdblock5
  20.   31        6        256 mtdblock6
  21.   31        7        256 mtdblock7
  22.   31        8     112640 mtdblock8
  23. 253        0      31372 ubiblock0_1
  24. 252        0    245760 zram0
复制代码
刷闭源OP Full版 uboot大分区固件,软件安装剩余62MB~


关于不同的110MB大分区固件的强制刷机:
Web上系统->备份/升级中更新固件,提示不支持的映像文件,这个大概率是因为各个源码仓库对固件命名不同,可以忽略。
只要是uboot 110MB大分区固件,都可以强制刷。直接不勾选保留配置,勾选强制刷机即可。
如果没有强制刷机的选项,就将sysupgrade固件上传到tmp文件夹,ssh登录用命令强刷:
  1. sysupgrade -F -n /tmp/sysupgrade.bin
复制代码
-F | --force 即使固件校验失败也强制烧写
-n 重刷固件时不保留配置文件



【2】从hanwckf大佬的不死uboot刷回官方
hanwckf大佬的多分区uboot已经支持修改后的官方固件,不需要刷回官方的FIP了
参考这里https://www.right.com.cn/forum/thread-8312884-1-1.html
原理参考红米AX6刷回官方固件,就是把uboot还原回原厂uboot(因为没有刷分区表文件,所以没有刷回原厂分区表操作),再用官方修复工具恢复官方固件。
目前只知道237大佬和hanwckf大佬的闭源OP是已解锁FIP的,可以直接刷uboot,如果当前固件不能刷FIP分区,请先刷回闭源OP,再刷回原厂uboot。
建议使用自己机子的FIP备份,其他的我没试过。将自己的原厂FIP备份文件,如mtd5_FIP.bin,上传到tmp文件夹下,然后解锁FIP分区的固件下输入命令刷入:
  1. md5sum /tmp/mtd5_FIP.bin
  2. mtd write /tmp/mtd5_FIP.bin FIP
  3. mtd verify /tmp/mtd5_FIP.bin FIP
复制代码
注意:写入FIP分区时不能断电、重启,不然就直接变砖,只能上编程器了。
这里和刷不死uboot一样,使用md5sum检查上传到tmp文件夹的原厂uboot文件的md5值和你保存的是否一样,无误后用mtd write将原厂uboot文件写入FIP分区,再用mtd verify对比检查原厂uboot文件是否已写入FIP分区。
注意mtd命令最后的FIP是大写。

对比检查最后输出“Success"说明刷入已成功,可以断电路由器,然后打开小米路由官方修复工具进行修复了。

小米路由官方修复工具
MIWIFIRepairTool.x86.zip
红米AX6000 RB06官方固件
miwifi_rb06_firmware_847e9_1.0.48.bin

网线接路由器和电脑,路由器断电,电脑退出杀毒软件,还有Windows的自带Windows Defender防火墙杀毒,必要时关闭电脑防火墙,打开小米路由修复工具,选择官方的rb06固件,网卡选择当前连接路由器的网卡,点下一步,工具会自动配置网卡IP为192.168.31.100/24,配置好后会显示刷机步骤,然后按住路由器RESET插电开机,大概12秒后等到黄灯闪烁后可以松开RESET,等待小米路由修复工具连接路由器开始上传固件,上传完后会刷机,刷机成功后蓝灯闪烁。等待10秒后重新断电插电即可恢复到官方系统。点击退出小米路由修复工具,网卡会自动恢复自动获取的配置。

如果有的人刷回官方,发现即使路由器已正常上网,指示灯却一直蓝灯闪烁(正常官方固件下,路由器已联网指示灯是白灯常亮)。
可能是官方固件解锁SSH后没关开发者模式导致的,SSH登录输入指令清除crash分区(关开发者模式)并重启:
  1. mtd erase crash
  2. reboot
复制代码




【3】TTL简单使用
本来想搞TTL救砖的,但是转念一想,根本不存在成砖的可能性
如果保留官方分区刷机,使用原厂uboot的,直接小米救砖工具救砖就行了,如果刷hanwckf大佬的不死uboot,直接进uboot的webui刷固件就行,根本不存在成砖的可能性!
注:hanwckf的不死uboot实测可以刷factory.bin或sysupgrade.bin,如果刷sysupgrade.bin启动不了,可以尝试刷factory.bin。
除了像我这种手痒又没能力的,直接进TTL里面瞎搞,然后自己搞坏uboot成真砖了……

红米AX6000的CPU是MT7986A,查看datasheet,MT7986A的UART引脚是3.3V,建议使用TTL电平为3.3V的USB转TTL工具,1.8V的也可以。
这个3.3V也可以从闪存供电电压3.3V看出或者直接万用表测量TX、RX得到是3.3V的。
我使用的是FT232RL,可以跳线设置输出电平为3.3V或1.8V,或者使用改3.3V的CH341A土豪金编程器的TTL也行。
接上TTL线,按免拆TTL接好TX GND RX,VCC不要接。


打开putty或者Xshell之类的串口软件,默认波特率保持115200即可,端口号选择实际插入时的端口号,然后打开串口即可。

使用tftpd64软件通过TFTP协议上传文件到路由器,下载解压出软件,将你FIP分区的备份,如mtd5_FIP.bin放到软件根目录下即可。
设置网卡IP:192.168.31.100/24,关闭电脑防火墙!!运行tftpd64软件,选择192.168.31.100的网卡。

上电开机,点击串口软件输出窗口,按住键盘上或者下方向键,等待进入U-boot启动目录:
  1. *** U-Boot Boot Menu ***

  2.       1. Startup system (Default)
  3.       2. Upgrade firmware
  4.       3. Upgrade ATF BL2
  5.       4. Upgrade ATF FIP
  6.       5. Upgrade single image
  7.       6. Load image
  8.       0. U-Boot console

  9. Press UP/DOWN to move, ENTER to select, ESC/CTRL+C to quit
复制代码
如果你的uboot搞坏了,你是进不了uboot菜单或控制台的,只能编程器。这里演示下刷FIP分区,第1种方式可以直接在菜单里选择4. Upgrade ATF FIP,然后输入TFTP服务器和文件信息来刷FIP:
  1. *** Upgrading ATF FIP ***

  2. Available load methods:
  3.     0 - TFTP client (Default)
  4.     1 - Xmodem
  5.     2 - Ymodem
  6.     3 - Kermit
  7.     4 - S-Record

  8. Select (enter for default): 0

  9. Input U-Boot's IP address: 192.168.31.1 # 输入uboot的IP地址
  10. Input TFTP server's IP address: 192.168.31.100 # 输入TFTP服务器的IP地址
  11. Input IP netmask: 255.255.255.0 # 输入IP掩码
  12. Input file name: mtd5_FIP.bin # 输入要上传的文件名

  13. Using ethernet@15100000 device
  14. TFTP from server 192.168.31.100; our IP address is 192.168.31.1
  15. Filename 'mtd5_FIP.bin'.
  16. Load address: 0x46000000
  17. Loading: #################################################################
  18.      #################################################################
  19.      #############
  20.      400.4 KiB/s
  21. done
  22. Bytes transferred = 2097152 (200000 hex)
  23. Saving Environment to MTD... Erasing on MTD device 'nmbm0'... OK
  24. Writing to MTD device 'nmbm0'... OK
  25. OK

  26. *** Loaded 2097152 (0x200000) bytes at 0x46000000 ***

  27. Erasing from 0x0 to 0x1fffff, size 0x200000 ... OK
  28. Writing from 0x46000000 to 0x0, size 0x200000 ... OK
  29. Verifying from 0x0 to 0x1fffff, size 0x200000 ... OK

  30. *** ATF FIP upgrade completed! ***

  31. Erasing environment from 0x100000 to 0x11ffff, size 0x20000 ... OK
  32. MT7986> mtd read fip 0x50000000 # 读取fip分区到内存起始地址0x50000000
  33. Reading 2097152 byte(s) at offset 0x00000000
  34. MT7986> crc32 0x50000000 0x200000 # 计算内存起始地址0x50000000,大小0x200000的数据的crc32
  35. crc32 for 50000000 ... 501fffff ==> 18692078
复制代码
检查crc32没有问题,可以断电重启了。

注意:经过测试,通过菜单Upgrading ATF FIP时,也是按上传文件大小来擦除要写入的大小的,不会擦除整个fip分区,大佬说这样程序也不会跑飞,可以放心使用。

下面是进入U-Boot console输入mtd list查看分区:
  1. MT7986> mtd list
  2. List of MTD devices:
  3. * spi-nand0
  4.   - device: spi_nand@1
  5.   - parent: spi@1100a000
  6.   - driver: spi_nand
  7.   - path: /spi@1100a000/spi_nand@1
  8.   - type: NAND flash
  9.   - block size: 0x20000 bytes
  10.   - min I/O: 0x800 bytes
  11.   - OOB size: 64 bytes
  12.   - OOB available: 24 bytes
  13.   - 0x000000000000-0x000008000000 : "spi-nand0"
  14. * nmbm0
  15.   - type: Unknown
  16.   - block size: 0x20000 bytes
  17.   - min I/O: 0x800 bytes
  18.   - OOB size: 64 bytes
  19.   - OOB available: 24 bytes
  20.   - 0x000000000000-0x000007800000 : "nmbm0"
  21.       - 0x000000000000-0x000000100000 : "bl2"
  22.       - 0x000000100000-0x000000140000 : "Nvram"
  23.       - 0x000000140000-0x000000180000 : "Bdata"
  24.       - 0x000000180000-0x000000380000 : "factory"
  25.       - 0x000000380000-0x000000580000 : "fip"
  26.       - 0x000000580000-0x0000005c0000 : "crash"
  27.       - 0x0000005c0000-0x000000600000 : "crash_log"
  28.       - 0x000000600000-0x000002400000 : "ubi"
  29.       - 0x000002400000-0x000004200000 : "ubi1"
  30.       - 0x000004200000-0x000007400000 : "overlay"
复制代码
注意uboot控制台里显示的分区名称大小写!!!

还有一种是进入uboot控制台,使用mtd命令来刷FIP。在U-Boot Boot Menu时选择0. U-Boot console,马上回车几次中断uboot:
我这里是不死uboot的控制台,显示"MT7986> ",如果是原厂uboot,则显示"RB06> "。
  1. Hit any key to stop autoboot:  0
  2. MT7986>
  3. MT7986> tftpboot mtd5_FIP.bin # TFTP上传mtd5_FIP.bin到内存
  4. Using ethernet@15100000 device
  5. TFTP from server 192.168.31.100; our IP address is 192.168.31.1
  6. Filename 'mtd5_FIP.bin'.
  7. Load address: 0x46000000 # 文件被上传到了内存起始地址0x46000000
  8. Loading: #################################################################
  9.      #################################################################
  10.      #############
  11.      971.7 KiB/s
  12. done
  13. Bytes transferred = 2097152 (200000 hex)
  14. MT7986> mtd erase fip # 擦除fip分区
  15. Erasing 0x00000000 ... 0x001fffff (16 eraseblock(s))
  16. MT7986> mtd write fip 0x46000000 0x0 0x200000 # 从内存起始地址0x46000000开始读取数据并写入fip分区的起始地址0x0,大小0x200000
  17. Writing 2097152 byte(s) at offset 0x00000000
  18. MT7986> mtd read fip 0x50000000 # 读取fip分区数据到内存起始地址0x50000000
  19. Reading 2097152 byte(s) at offset 0x00000000
  20. MT7986> crc32 0x50000000 0x200000 # 计算内存起始地址0x50000000,大小0x200000的数据的crc32
  21. crc32 for 50000000 ... 501fffff ==> 18692078
复制代码
检查crc32没有问题,可以断电重启了。

当你uboot控制台使用mtd write前没有mtd erase,没有擦除就写入,会发生什么?!
因为uboot控制台里的命令比较简单,不会自动擦除,没有先擦写直接写入,可正常写入不报错,但是读取会报错误,此时需要马上擦除下,再写入一遍。如果你没擦除,写入后直接重启,就变砖!!
  1. MT7986> mtd read fip 0x50000000
  2. Reading 2097152 byte(s) at offset 0x00000000
  3. Failure while reading at offset 0x0
  4. Read on fip failed with error -74
复制代码
重启后你的TTL输出会卡在这里:
  1. NOTICE:  SPI_NAND parses attributes from parameter page.
  2. NOTICE:  SPI_NAND Detected ID 0x0
  3. NOTICE:  Page size 2048, Block size 131072, size 134217728
  4. NOTICE:  Initializing NMBM ...
  5. NOTICE:  Signature found at block 1023 [0x07fe0000]
  6. NOTICE:  First info table with writecount 0 found in block 960
  7. NOTICE:  Second info table with writecount 0 found in block 963
  8. NOTICE:  NMBM has been successfully attached in read-only mode
  9. INFO:    BL2: Loading image id 3
  10. WARNING: Firmware Image Package header check failed.
  11. WARNING: Failed to access image id=3 (-2)
  12. ERROR:   BL2: Failed to load image id 3 (-2)
复制代码
只有编程器能救了~



【4】CH341A/B编程器救砖
红米AX6000使用的闪存是ESMT F50L1G41LB,容量128MB,3.3V的SPI NAND。查看datasheet,数据阵列组织是这样的:


每个page包含存储数据的数据区Page size 2048 bytes :Data Storage Area,存储ECC(Error Checking and Correction)校验和标记是否存在坏块的备用区OOB(Out-Of-Band) size 64 bytes:Spare Area。
最后计算整个设备是128MB+4MB,即128MB的数据+4MB的OBB数据,128MB的叫做不含ECC_OOB的编程器固件,我们在openwrt里面备份的mtd0_spi01就是这个,128+4=132MB的叫做含ECC_OOB的编程器固件,这个需要编程器关闭闪存ECC才能读取到,openwrt官方论坛有网友也已共享了两种编程器固件
根据hanwckf大佬所述,MT798x固件默认使用On-die ECC,根据闪存datasheet,用户开启内部ECC,当数据写入page时,ECC数据会内部生成并存储在OOB。我的理解是当开启闪存的内部ECC时,在写入数据时由内部自动生成ECC并记录,不需要其他设备如CPU的参与,我们可以不用管这个ECC。不对还请大佬指正!
这样我们就不需要含ECC_OOB的编程器固件了,直接用我们备份的分区或者整个编程器固件都可以在编程器写入,不用管ECC数据!

经查询,支持这个型号闪存的3.3V编程器比较便宜的是CH341A土豪金(我买到的是CH341B,也可以的,CH341B可以不接外部晶振),需要自己改3.3V,支持的软件有SNANDerNeoProgrammer,不过NeoProgrammer不知道如何写入单独分区,我选择了SNANDer。
购买了CH341A编程器土豪金,发现网上说这个CH341A编程器土豪金的供电是5V,输出电平也是5V,为了安全接3.3V的设备,建议改为3.3V供电,我也跟着改了。电路如下,小心得翘起CH341A的28脚VCC,用一根导线接VCC脚再接到C3电容靠近1117-3.3那一侧(这里连接着9脚V3,其他版本的土豪金不一定是C3,注意自己测量),再接到1117-3.3中间输出端3.3V,使得VCC=V3=3.3V:



经测试,红米AX6000可以直接飞线到主板上的闪存,这样就方便很多了。建议使用飞线用的漆包线,这种软线不易在拉扯时扯坏焊盘!

当然,这样直接飞线不一定适用其他路由器,需要自己测试。
直接拆闪存下来则一定可以读取,我就是担心电路干扰,直接拆了,后面才发现飞线也可以……
避坑:
1.这个型号闪存底部有一个metal pad,算是比较大的焊盘,吹的时候多在中间打转吹,感觉中间焊锡差不多融化后再辐射吹两边的引脚。原厂高温焊锡加上冬天又没有加热垫,因此我风枪开430度吹了三次才吹下来,我都以为要吹坏了……记住冬天开高点温度,不超过450度吧,加焊油适当吹多10来秒,不要怕~
2.用吸锡带清理焊盘,尽量不要拖拽吸锡带,这样容易弄伤焊盘边上的绝阻焊漆。吸锡带是吸,不是拖。
3.本来想拆下闪存,搞个测试座上去,看了8x6 WSON8测试座某宝有个ASPI0002,不过引脚在座子下,看着需要加热台或者热风枪在背面吹才能焊接,没有这个技术暂时放弃了。另外一种“国产”8x6 WSON8测试座,这种不可以焊接在WSON8焊盘上。其他的方法就是自己用1.27mm排针和转接板DIY座子了。这个“国产”测试座转DIP8可以在编程器上正常读写,但是我拆下闪存,从主板闪存焊盘上引线出来接到这个测试座,路由器开机直接读取不到闪存,把测试座直接换成WSON8转DIP8转接板,闪存直接焊在转接板上,这次可以读取但是读取闪存ID出错,怀疑是引线出来相当于天线不适合高速读取,也有可能是我吸锡带弄伤了焊盘,焊接飞线连到破损的地方了。


拆下闪存、闪存没读取到时TTL输出:
  1. F0: 102B 0000
  2. FA: 1040 0000
  3. FA: 1040 0000 [0200]
  4. F9: 3905 0036
  5. F3: 1001 0000 [0200]
  6. F3: 1001 0000
  7. F6: 102C 0000
  8. F5: 1026 0000
  9. 00: 1005 0000
  10. FA: 1040 0000
  11. FA: 1040 0000 [0200]
  12. F9: 3905 0036
  13. F3: 1001 0000 [0200]
  14. F3: 1001 0000
  15. F6: 102C 0000
  16. 01: 102A 0001
  17. 02: 1005 0000
  18. BP: 2000 00C0 [0001]
  19. EC: 0000 0000 [1000]
  20. T0: 0000 00BE [010F]
  21. System halt!
复制代码
读取到闪存,但是读取ID出错时TTL输出:
  1. ERROR:   Parameter page read fail, fallback to read ID.
  2. ERROR:   Unrecognized SPI-NAND ID: 0xff 0xec 0x1 0xff
  3. NOTICE:  SPI_NAND Detected ID 0xec
  4. NOTICE:  Page size 0, Block size 0, size 0
  5. NOTICE:  Initializing NMBM ...
  6. ERROR:   Chip size 0 is not valid
  7. INFO:    BL2: Loading image id 3
  8. WARNING: Failed to read FIP (-5)
  9. WARNING: Failed to access image id=3 (-5)
  10. ERROR:   BL2: Failed to load image id 3 (-5)
复制代码

言归正传,路由器保持断电,飞线到CH341A编程器,仔细检查飞线安装位置正确、仔细检查飞线安装位置正确、仔细检查飞线安装位置正确,不然可能烧主板,然后可以插入编程器到USB接口。
下载Windows下可运行的SNANDer.exe和驱动zadig.exe,插上编程器,按照安装说明install安装驱动,拷贝你的FIP分区备份或不含ECC编程器固件,放在SNANDer.exe相同目录下,在CMD终端中打开该目录,输入命令进行操作。

开始先备份,养成好习惯:
  1. SNANDer -i
  2. SNANDer -r Backup.bin
  3. SNANDer -d -r Backup_ECC_OOB.bin
复制代码
第一句是查看闪存信息,第二句是备份不含ECC_OOB的编程器固件,第三句是备份含ECC_OOB的编程器固件。
擦除128MB闪存只需要5秒,写入看文件内容,一般编程器固件写入在15分钟左右,读取20分钟左右。
我已经备份过了,这里不演示了,备份与否备份什么自己决定!

刷FIP:
还是那句话,刷写前先擦除!!!
  1. SNANDer -e -a 0x380000 -l 0x200000
  2. SNANDer -v -w mtd5_FIP.bin -a 0x380000 -l 0x200000
复制代码
第一句是擦除起始地址0x380000,大小0x200000的数据区,即fip分区,第二句是将mtd5_FIP.bin写入起始地址0x380000,大小0x200000的数据区,并校验。

输出是这样的:
  1. E:\>SNANDer -i
  2. SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC <mcmcc@mail.ru>
  3. Found programmer device: WinChipHead (WCH) - CH341A
  4. Device revision is 3.0.4
  5. spi_nand_probe: mfr_id = 0xc8, dev_id = 0x1, dev_id_2 = 0x7f
  6. Get Status Register 1: 0x83
  7. Get Status Register 2: 0x10
  8. Using Flash ECC.
  9. Detected SPI NAND Flash: ESMT F50L1G41LB, Flash Size: 128MB, OOB Size: 64B

  10. E:\>SNANDer -e -a 0x380000 -l 0x200000
  11. SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC <mcmcc@mail.ru>
  12. Found programmer device: WinChipHead (WCH) - CH341A
  13. Device revision is 3.0.4
  14. spi_nand_probe: mfr_id = 0xc8, dev_id = 0x1, dev_id_2 = 0x7f
  15. Get Status Register 1: 0x83
  16. Get Status Register 2: 0x10
  17. Using Flash ECC.
  18. Detected SPI NAND Flash: ESMT F50L1G41LB, Flash Size: 128MB, OOB Size: 64B
  19. ERASE:
  20. Erase addr = 0x0000000000380000, len = 0x0000000000200000
  21. Erase 100% [2097152] of [2097152] bytes
  22. Elapsed time: 0 seconds
  23. Status: OK

  24. E:\>SNANDer -v -w mtd5_FIP.bin -a 0x380000 -l 0x200000
  25. SNANDer - Serial Nor/nAND/Eeprom programmeR v.1.7.7 by McMCC <mcmcc@mail.ru>
  26. Found programmer device: WinChipHead (WCH) - CH341A
  27. Device revision is 3.0.4
  28. spi_nand_probe: mfr_id = 0xc8, dev_id = 0x1, dev_id_2 = 0x7f
  29. Get Status Register 1: 0x83
  30. Get Status Register 2: 0x10
  31. Using Flash ECC.
  32. Detected SPI NAND Flash: ESMT F50L1G41LB, Flash Size: 128MB, OOB Size: 64B
  33. WRITE:
  34. Write addr = 0x0000000000380000, len = 0x0000000000200000
  35. Written 100% [2097152] of [2097152] bytes
  36. Elapsed time: 15 seconds
  37. Status: OK
  38. VERIFY:
  39. Read addr = 0x0000000000380000, len = 0x0000000000200000
  40. Read 100% [2097152] of [2097152] bytes
  41. Elapsed time: 21 seconds
  42. Status: OK
复制代码
刷完FIP后,救砖就完成了,断开编程器与路由器的转接板,接上TTL,路由器上电开机即可。如果第一次TTL卡在INFO: SPSR = 0x3c9,可以尝试断电再上电启动一次。

如果要刷不含ECC_OOB的128MB编程器固件可以:
  1. SNANDer -e
  2. SNANDer -w mtd0_spi01.bin
复制代码
如果要刷含ECC_OOB的132MB编程器固件可以:
  1. SNANDer -d -e
  2. SNANDer -d -w F50L1G41LB(ECC_DIS)@WSON8-AX6000-RB06.bin
复制代码
切记,uboot控制台、编程器里是擦除再写入!!!
op系统里可以直接用mtd write~





本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

点评

何必呢?少说几句吧,网络这么大,聚到一起也不容易!: 5 不喷一下你今晚是不是会失眠啊?药不能停啊,兄弟!: 5 好帖,今年最好的贴子!: 5 这B装的一流啊!: 5 真的是很凡尔赛!:   发表于 2023-11-5 23:02

评分

参与人数 30恩山币 +35 收起 理由
ddd*** + 1 感谢分享
a133*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
fire*** + 2 详细细致,各种坑都讲的明明白白!小白也能.
yyl*** + 1 一看就是觉得高端、大气、上档次!.
chitt*** + 1 按大佬如此详细教程刷入uboot成功,感谢!.
fu*** + 1 牛逼。详细。
wu*** + 1 你好,久仰卧龙大名,在下凤雏!.
bl*** + 1 不确定是否uboot搞坏了,up可以帮看下吗.
9390*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
黑色*** + 1 你好,久仰卧龙大名,在下凤雏!.
csx*** + 1 强大的恩山!(以下重复1万次)
mr*** + 1 你好,久仰卧龙大名,在下凤雏!
fz*** + 1 让我们一起面朝大海、花开花落……
gaoxi*** + 1 大佬讲的太详细了 强烈支持
xm1*** + 1 感谢你的分享,无论怎样,你都是最无私的人.
mcsq*** + 1 不要怂、就是干!
kul*** + 1 不要怂、就是干!
roc*** + 1 2333
kevi*** + 1 为什么不能给十分
ntf*** + 1 强大的恩山!(以下重复1万次)
zixia*** + 2 强大的恩山!(以下重复1万次)
bigge*** + 1 来来来,有什么伤心的事说出来让大家开心一.
supe*** + 1 好贴
ns*** + 1 2333
70*** + 1 一看就是觉得高端、大气、上档次!
delu*** + 1 How ever,this is JB useful!
ri*** + 2 感谢分享,刷了不死UBOOT但是按另外一个帖.
ats*** + 2 很好,支持!
chan*** + 1 不要怂、就是干!
xx*** + 2 兄弟,你肥皂又掉了…

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
写的很详细
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

辛苦了,此贴必精。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

本帖最后由 玄色疯 于 2022-11-30 14:21 编辑

赞一个,收藏了
顺便请教下,刷了UBOOT以后就会默认变成大分区的是吗?那此时是否可以在UBOOT界面下刷官方分区格式的固件(比如X-WRT)?

点评

刷uboot后就是大分区了,理论上可以刷openwrt官方、lean的固件,他们源码应该没有改分区。X-Wrt大分区也可以刷,X-Wrt标记stock是原厂分区的。  详情 回复 发表于 2022-11-30 19:01
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

违禁词语,请勿再发,晚上回来就操作刷uboot
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

为什么不出一个兼容原厂的uboot,这样不需要来回刷uboot,兼容uboot可以启动openwrt,也可以兼容启动原厂系统。完美。

点评

大佬说的在理一语道破玄机  详情 回复 发表于 2022-11-30 23:06
大佬的建议真好,希望hanwckf大佬能看到,如果有这样的uboot真是完美~  详情 回复 发表于 2022-11-30 14:22
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
ptpt52 发表于 2022-11-30 14:19
为什么不出一个兼容原厂的uboot,这样不需要来回刷uboot,兼容uboot可以启动openwrt,也可以兼容启动原厂系 ...

大佬的建议真好,希望hanwckf大佬能看到,如果有这样的uboot真是完美~

点评

就是两个启动项  发表于 2022-11-30 18:59
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

感谢分享,收藏
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

那我没有备份FIP分区,就刷了uboot,是不是回不去了

点评

这个我不清楚,没试过。 确实需要刷回官方,可以试试其他人的备份https://www.right.com.cn/forum/thread-8255963-1-1.html  详情 回复 发表于 2022-11-30 15:04
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

 楼主| | 显示全部楼层
okuni 发表于 2022-11-30 15:00
那我没有备份FIP分区,就刷了uboot,是不是回不去了

这个我不清楚,没试过。
确实需要刷回官方,可以试试其他人的备份https://www.right.com.cn/forum/thread-8255963-1-1.html
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

来自手机 | 显示全部楼层
嘿嘿  ~~   
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

牛逼了,感谢分享!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报


牛逼了,感谢分享!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

非常详细,感谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

非常详细,多谢楼主!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

欢迎大家光临恩山无线论坛上一条 /1 下一条

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-4-29 17:53

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表