找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 74611|回复: 307

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

 火... [复制链接]
发表于 2022-11-30 13:44 | 显示全部楼层 |阅读模式
本帖最后由 lgs2007m 于 2024-1-4 22:30 编辑

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输出:
Project 2 00_00_00-00_00_30.gif

经测试,hanwckf大佬的不死uboot支持直接刷入factory.bin或sysupgrade.bin。详情可以看 hanwckf大Uboot的webui刷机时TTL输出.rar (1.22 KB, 下载次数: 823)
如果刷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刷固件完整过程:
uboot刷机.gif
有可能出现的更新失败界面:
5.jpg

提示刷入更新成功,正在重启即可把电脑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~
软件包.jpg

关于不同的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不要接。
免拆TTL.jpg

打开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,数据阵列组织是这样的:
阵列组织.png

每个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:
CH341A SPI-NAND接线 - 副本.jpg


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

拆下闪存、闪存没读取到时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

评分

参与人数 29恩山币 +34 收起 理由
a13346810 + 1 感谢你的分享,无论怎样,你都是最无私的人.
firewalls + 2 详细细致,各种坑都讲的明明白白!小白也能.
yylf620 + 1 一看就是觉得高端、大气、上档次!.
chittawell + 1 按大佬如此详细教程刷入uboot成功,感谢!.
fun8 + 1 牛逼。详细。
wuli + 1 你好,久仰卧龙大名,在下凤雏!.
bllk + 1 不确定是否uboot搞坏了,up可以帮看下吗.
939005670 + 1 感谢你的分享,无论怎样,你都是最无私的人.
黑色守望 + 1 你好,久仰卧龙大名,在下凤雏!.
csxy999 + 1 强大的恩山!(以下重复1万次)
mrxia + 1 你好,久仰卧龙大名,在下凤雏!
fzcc + 1 让我们一起面朝大海、花开花落……
gaoxing1027 + 1 大佬讲的太详细了 强烈支持
xm1111 + 1 感谢你的分享,无论怎样,你都是最无私的人.
mcsquare + 1 不要怂、就是干!
kuleko + 1 不要怂、就是干!
rockft1 + 1 2333
kevin_fan + 1 为什么不能给十分
ntfs64 + 1 强大的恩山!(以下重复1万次)
zixiang5288 + 2 强大的恩山!(以下重复1万次)
biggerdogs + 1 来来来,有什么伤心的事说出来让大家开心一.
superzjg + 1 好贴
nsdd + 1 2333
70ff + 1 一看就是觉得高端、大气、上档次!
delux2022 + 1 How ever,this is JB useful!
rimao + 2 感谢分享,刷了不死UBOOT但是按另外一个帖.
atshot + 2 很好,支持!
chana519 + 1 不要怂、就是干!
ewqewq + 2 兄弟,你肥皂又掉了…

查看全部评分

我的恩山、我的无线 The best wifi forum is right here.
发表于 2022-11-30 13:49 | 显示全部楼层
写的很详细
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-11-30 13:54 | 显示全部楼层
辛苦了,此贴必精。
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-11-30 13:56 | 显示全部楼层
本帖最后由 玄色疯 于 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.
回复

使用道具 举报

发表于 2022-11-30 14:07 | 显示全部楼层
违禁词语,请勿再发,晚上回来就操作刷uboot
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

点评

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

使用道具 举报

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

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

点评

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

使用道具 举报

发表于 2022-11-30 14:42 | 显示全部楼层
感谢分享,收藏
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-11-30 15:00 | 显示全部楼层
那我没有备份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.
回复

使用道具 举报

 楼主| 发表于 2022-11-30 15:04 | 显示全部楼层
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.
回复

使用道具 举报

发表于 2022-11-30 15:13 来自手机 | 显示全部楼层
嘿嘿  ~~   
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-11-30 16:02 | 显示全部楼层
牛逼了,感谢分享!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-11-30 16:37 | 显示全部楼层

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

使用道具 举报

发表于 2022-11-30 16:46 | 显示全部楼层
非常详细,感谢分享
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

发表于 2022-11-30 16:50 | 显示全部楼层
非常详细,多谢楼主!
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

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

本版积分规则

关闭

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

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

GMT+8, 2024-2-26 09:09

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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

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