恩山无线论坛

标题: 每台openwrt路由器都是编程器(二),大麦DW33D 当做Nand 编程器 [打印本页]

作者: jiuweiljp    时间: 2020-5-20 10:41
标题: 每台openwrt路由器都是编程器(二),大麦DW33D 当做Nand 编程器
本帖最后由 jiuweiljp 于 2023-9-9 12:06 编辑

一、前言:
      之前发了一个帖子每台openwrt路由器都是编程器有网友提到大麦DW33D,发现这个配置不错,有NOR也有NAND Flash,内存也大256MB
闲鱼弄了一个非giga版的。
      先说说这次为什么选用dw33d,因为4300v1 实在不适合,4300改造后虽然有双flash但nor flash只是作为u-boot用,系统只能运行在nand 上,
而4300 只有128MB memory,在文件操作用很容易溢出缓存,nana dump与write过程中要注意缓存的使用情况,如果缓存快满要清理(原帖提到过),
在清理缓存前要将载有系统的nand flash 换上去,不然就会报错。
     dw33d呢就没有这个问题,系统运行在nor flash 上,nand 只作为rootfs_data 用,内存还大不少(256MB),还有16GB的TF卡,把程序放到TF卡上
运行静态编译的程序,热机换nand 没有报错情况。


二、硬件篇:
    上次改造nand 编程座很痛苦,还容易弄坏网件4300 V1的焊盘,这次我就想了一个办法用FPC座加排线。
1、所需材料如下:
(1)、编程座
     [attach]387346[/attach]

(2)、转接板
        这个转接板我改造过,与上图的编程座针脚有点对不上,需要将插针解焊下来(较麻烦要小心保留焊盘),
        在电路板反面焊上插针(厂家有心了,反面的焊盘能对上这个编程座),可参看完成后的照片。
        在TB上也可买到空白电路板自己焊,FPC座焊接麻烦点,但不用解焊插针了。

    [attach]387347[/attach]
(3)、24Pin排线
   注意排线有两种(同面的和反面的),我这次用的是同面的。
  [attach]387348[/attach]

(4)、FPC座
  这种座也有两种,翻盖式与抽屉式,注意事项见图中的文字。
[attach]387350[/attach]



[attach]387351[/attach]


2、改造过程如下
(1)贴高温胶布
[attach]387352[/attach]

(2)脱焊NAND芯片,清理焊盘,焊盘留的焊锡一定要饱满(我这个就不太好),那个FPC座上路由的基板后,
        针脚不能紧贴到焊盘上有很小的缝隙,如果焊盘留的锡不饱满还要加锡,特别容易连脚。
[attach]387368[/attach]


(3)不要拖焊
TB买的座质量太次了,温度高一点塑料就化了,拖焊容易弄坏FPC座及焊盘
[attach]387369[/attach]



(4)用点焊,且要固定FPC座
   见下图我的焊盘坏了3个焊盘,还好这3个不用。注意:PFC座一定要固定在基板上,很重要。


[attach]387370[/attach]


另FPC座另外一边用胶固定,注意下使用的胶不能导电

[attach]387372[/attach]

(5)硬件完成图,注意事项见图
[attach]387374[/attach]


(二)软件篇

1、先说说原厂的U-boot吧,原厂的U-boot功能很齐全,但有个功能它如果发现你自己改了固件,在启动的时候
会将MTD7(backup,没错这个backup存储的就是原厂固件的备份),将你的固件恢复回到原厂,有个奇怪的现象恢复原厂后你用opkg安装的软件还在。

2、原厂的固件功能也很齐全,基本够用了,简单改下软件源可以自己安装opkg软件,但backup分区是锁定的,且没有暂时没有办法解锁。
     但原厂的固件有个问题如果你的没有安装nand 或nand 坏了,那在启动过程中就会卡死。(我后来仔细排查了下原厂的固件只用mtd6 (在nand上)挂rootfs_data
     而第三方opwenrt 会将 nor的部分区域也挂成rootfs_data,也就是说第三方固件会有2个rootfs_data)
  1. =========dw33d 原厂 启动
  2. 0x000000000000-0x000000040000 : "u-boot"
  3. 0x000000040000-0x000000050000 : "u-boot-env"
  4. 0x000000050000-0x000000e80000 : "rootfs"
  5.                                 mtd: partition "rootfs" set to be root filesystem
  6. 0x000000e80000-0x000000ff0000 : "kernel"
  7. 0x000000ff0000-0x000001000000 : "art"
  8. 0x000000050000-0x000000fe0000 : "firmware"
  9.                                 ath79-nand ath79-nand: AR71xx/AR9xxx Qualcomm-Atheros NAND FLash Controller driver, Version 1.0

  10. (c) 2010 Atheros Communications, Ltd.
  11.                                 NAND device: Manufacturer ID: 0x2c, Chip ID: 0xf1 (Micron NAND 128MiB 3,3V 8-bit)
  12.                                 Bad block table found at page 65472, version 0x01
  13.                                 Bad block table found at page 65408, version 0x01
  14.                                 2 cmdlinepart partitions found on MTD device ath79-nand
  15.                                 Creating 2 MTD partitions on "ath79-nand":
  16. 0x000000000000-0x000006000000 : "rootfs_data"
  17. 0x000006000000-0x000008000000 : "backup"

  18. >cat /proc/mtd     (可以看到只有一个rootfs_data)
  19. dev:    size   erasesize  name
  20. mtd0: 00040000 00010000 "u-boot"
  21. mtd1: 00010000 00010000 "u-boot-env"
  22. mtd2: 00e30000 00010000 "rootfs"
  23. mtd3: 00170000 00010000 "kernel"
  24. mtd4: 00010000 00010000 "art"
  25. mtd5: 00f90000 00010000 "firmware"
  26. mtd6: 06000000 00020000 "rootfs_data"
  27. mtd7: 02000000 00020000 "backup"
复制代码
  1. ==========OpenWrt R8.1.11 启动 nor+nand flash
  2. [    0.916110] 0x000000000000-0x000000040000 : "u-boot"
  3. [    0.922662] 0x000000040000-0x000000050000 : "u-boot-env"
  4. [    0.929651] 0x000000050000-0x000000e80000 : "rootfs"
  5. [    0.935912] mtd: device 2 (rootfs) set to be root filesystem
  6. [    0.941738] 1 squashfs-split partitions found on MTD device rootfs
  7. [    0.948011] 0x000000950000-0x000000e80000 : "rootfs_data"
  8. [    0.955141] 0x000000e80000-0x000000ff0000 : "kernel"
  9. [    0.961792] 0x000000ff0000-0x000001000000 : "art"
  10. [    0.968139] 0x000000050000-0x000000ff0000 : "firmware"
  11. [    0.975786] nand: device found, Manufacturer ID: 0x01, Chip ID: 0xf1
  12. [    0.982271] nand: AMD/Spansion NAND 128MiB 3,3V 8-bit
  13. [    0.987395] nand: 128 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
  14. [    0.995108] Scanning device for bad blocks
  15. [    1.002349] Bad eraseblock 37 at 0x0000004a0000
  16. [    1.007026] random: fast init done
  17. [    1.054195] Bad eraseblock 586 at 0x000004940000
  18. [    1.093755] 2 cmdlinepart partitions found on MTD device ar934x-nfc
  19. [    1.100115] Creating 2 MTD partitions on "ar934x-nfc":
  20. [    1.105331] 0x000000000000-0x000006000000 : "rootfs_data"
  21. [    1.112537] 0x000006000000-0x000008000000 : "backup"

  22. >cat /proc/mtd       (可以看到有二个rootfs_data)
  23. dev:    size   erasesize  name
  24. mtd0: 00040000 00010000 "u-boot"
  25. mtd1: 00010000 00010000 "u-boot-env"
  26. mtd2: 00e30000 00010000 "rootfs"
  27. mtd3: 00530000 00010000 "rootfs_data"
  28. mtd4: 00170000 00010000 "kernel"
  29. mtd5: 00010000 00010000 "art"
  30. mtd6: 00fa0000 00010000 "firmware"
  31. mtd7: 06000000 00020000 "rootfs_data"
  32. mtd8: 02000000 00020000 "backup"
复制代码
不知道大家注意没有这两个固件nand控制器的驱动有点不同(ath79-nand,ar934x-nfc)不知道有什么区别,有谁知道望告知,谢!

3、因为原厂u-boot的问题还是刷breed吧,方法我就不说了,在原厂u-boot中用TTL可以刷,用解锁固件也也可以刷,方法见下文
     大麦dw33d NAND固件安装方法和一些技巧

4、使用的固件也有一定要求因为要解锁mtd7(backup)所以版本不能低,
     怎么用具体可看
不同官方或自制的openwrt版中刷uboot和art。

     LEDE 17.01.0 以后的版本才有Kmod-mtd-rw插件,使用这个插件可以一次性解锁所有mtd。
     在论坛找了半天找到一个合适的固件 ,其它文件名称中有nand字样的固件,虽然较多但我没有选用(这些固件可能在nand上运行系统)

(更新)大麦路由DW33D自编译Lean大openwrt R8.1.11固件


    上面这个openwrt固件有点问题wifi 的5g模块(ath10K)启动加载很费时间,启动过程很漫长(300多秒才能完),估计有兼容的问题
    我把这个固件中的5g模块去掉了(启动时间30秒)。
     

    解锁mtd分区,安装kmod-mtd-rw插件要对核心版本及MD5值,该固件的核心版本是 4.9.138,与官方发行版本对不上,
    但问题不大,能找到 kmod-mtd-rw_4.9.131的版本,强制安装就可以了
  1. opkg --nodeps install kmod-mtd-rw_4.9.131+git-20160214-1_mips_24kc.ipk
  2.       显示结果
  3.       Installing kmod-mtd-rw (4.9.131+git-20160214-1) to root...
  4. Configuring kmod-mtd-rw.
复制代码
  1. cp /lib/modules/4.9.131/* /lib/modules/4.9.138/.
复制代码
  1. insmod mtd-rw.ko i_want_a_brick=1
  2. 显示结果
  3.     [11947.837117] mtd-rw: mtd0: setting writeable flag
  4.     [11947.841854] mtd-rw: mtd1: setting writeable flag
  5.     [11947.846555] mtd-rw: mtd5: setting writeable flag
  6.     [11947.849888] mtd-rw: mtd8: setting writeable flag
复制代码
可以看到所有mtd已经解锁了。

5、软件我使用的是buildroot 2020.2的正式版,这个buildroot是一款强大的toolchain,
     我之前编译的4300 的u-boot就用的它(用的版本2009.11)。
     在buildroot 中也有很多工具比如下面我要提到的mtd-utils(版本2.1.1),我做了静态编译。
     拷贝到TF卡、u盘中就可以用,不需要任何库支持。

6、我发现在mtd-utils 中有nanddump nandwrite nandtest 不同的版本命令有所不同,
     使用时要特别注意。
     (1 )buildroot (版本2009.11)中的 nanddump (版本1.29)
  1. nanddump $Revision: 1.29 $

  2. Usage: nanddump [OPTIONS] MTD-device
  3. Dumps the contents of a nand mtd partition.

  4.            --help               display this help and exit
  5.            --version            output version information and exit
  6. -f file    --file=file          dump to file
  7. -i         --ignoreerrors       ignore errors
  8. -l length  --length=length      length
  9. -n         --noecc              read without error correction
  10. -o         --omitoob            omit oob data
  11. -b         --omitbad            omit bad blocks from the dump
  12. -p         --prettyprint        print nice (hexdump)
  13. -s addr    --startaddress=addr  start address
复制代码
     (2)DW33D原厂固件用安装源nanddump (版本 1.31)
  1. nanddump 1.31

  2. Usage: nanddump [OPTIONS] MTD-device
  3. Dumps the contents of a nand mtd partition.

  4.            --help               Display this help and exit
  5.            --version            Output version information and exit
  6.            --bb=METHOD          Choose bad block handling method (see below).
  7. -a         --forcebinary        Force printing of binary data to tty
  8. -c         --canonicalprint     Print canonical Hex+ASCII dump
  9. -f file    --file=file          Dump to file
  10. -l length  --length=length      Length
  11. -n         --noecc              Read without error correction
  12. -o         --omitoob            Omit OOB data (default in next release)
  13.            --oob                Dump OOB data (current default)
  14. -p         --prettyprint        Print nice (hexdump)
  15. -q         --quiet              Don't display progress and status messages
  16. -s addr    --startaddress=addr  Start address

  17. --bb=METHOD, where METHOD can be `padbad', `dumpbad', or `skipbad':
  18.     padbad:  dump flash data, substituting 0xFF for any bad blocks (default)
  19.     dumpbad: dump flash data, including any bad blocks
  20.     skipbad: dump good data, completely skipping any bad blocks

  21. Deprecated options:
  22. The following options are being replaced by --bb=METHOD flags or being
  23. removed entirely. Do not continue to use these options.
  24. -b         --omitbad            Omit bad blocks from the dump (DEPRECATED)
  25. -N         --noskipbad          Read without bad block skipping

  26. Notes on --omitbad and --bb=skipbad:
  27. * `omitbad' and `skipbad' are very similar; we are deprecating `--omitbad'
  28.   in favor of `--bb=skipbad'.
  29. * With either option, we stop dumping data when we encounter a bad block
  30.   and resume dumping at the next good block. However, with `omitbad', we
  31.   count the bad block as part of the total dump length, whereas with
  32.   `skipbad', the bad block is skipped, that is, not counted toward the
  33.   total dump length.

  34. Note on --oob, --omitoob:
  35.   To make nanddump act more like an inverse to nandwrite, we are changing
  36.   the default OOB behavior. In the next release, nanddump will not dump
  37.   OOB data by default. We will leave both the `--omitoob' and `--oob'
  38.   options, but to mirror nandwrite, the short option `-o' will then stand
  39.   for `--oob', not `--omitoob'. Please adjust your usage accordingly.
复制代码
(3)buildroot (版本2020.2)中的 nanddump (版本2.1.1)
  1. nanddump (mtd-utils) 2.1.1

  2. Usage: nanddump [OPTIONS] MTD-device
  3. Dumps the contents of a nand mtd partition.

  4. -h         --help               Display this help and exit
  5.            --version            Output version information and exit
  6.            --bb=METHOD          Choose bad block handling method (see below).
  7. -a         --forcebinary        Force printing of binary data to tty
  8. -c         --canonicalprint     Print canonical Hex+ASCII dump
  9. -f file    --file=file          Dump to file
  10. -l length  --length=length      Length
  11. -n         --noecc              Read without error correction
  12.            --omitoob            Omit OOB data (default)
  13. -o         --oob                Dump OOB data
  14. -p         --prettyprint        Print nice (hexdump)
  15. -q         --quiet              Don't display progress and status messages
  16. -s addr    --startaddress=addr  Start address
  17.            --skip-bad-blocks-to-start
  18.                                 Skip bad blocks when seeking to the start address

  19. --bb=METHOD, where METHOD can be `padbad', `dumpbad', or `skipbad':
  20.     padbad:  dump flash data, substituting 0xFF for any bad blocks
  21.     dumpbad: dump flash data, including any bad blocks
  22.     skipbad: dump good data, completely skipping any bad blocks (default)
复制代码

7、 如果怀疑在启动的时候系统写nand,拷贝源nand芯片最好不要在启动前安装到弹跳座上(避免破坏原始nand的内容),

      在固件启动完成后将源nand芯片热操作(带电操作)换上去。
      这个只是怀疑,我后来简单测试了下这个固件启动时不对nand进行写操作,也就是说可以在冷机情况下换nand芯片,安全很多。

      方法:用nanddump 读源nand芯片内容  
  1. >./nanddump --bb=dumpbad -n -o -l 0x2000000 -f mtd7_32mb_noecc_oob_dumpbad /dev/mtd7
  2. Block size 131072, page size 2048, OOB size 64
  3. Dumping data starting at 0x00000000 and ending at 0x02000000...
复制代码
      解释:使用非校验方式拷贝数据,坏块不跳过,拷贝oob数据,长度32MB(dw33d这个分区很大有96MB一般来说不用拷贝完全,个人随意吧)
      这种方法可以避免使用5998的nand控制器的校验功能,在上一篇帖子中我采用这种方式,用网件wndr 4300 v1上可以救活使用arm cpu的机器。
      注意事项:
      请dump多次然后用md5sum比较下存盘md5值看是否相同,如果不同这个原片的品质就不太好,我测试用的一个芯片虽然没有坏区,但dump多次
      有几次md5值就不同(当时有点担心是qca9558 nand驱动或 nand控制器的问题),后来换了一个品质好的芯片多次dump后比较值,就没问题了。
      如果多次dump效果不理想,但我发现只要不是太烂的nand芯片肯定有几次md5值是相同的,采用哪个相同md5值的文件作为源文件吧。
      :这个工具看来可以简单测试下芯片的质量,呵呵。

8、 然后擦除目标nand,有很多方法擦除,我也没有太仔细的比较。
  1. >mtd erase /dev/mtd7
  2. 系统命令(推荐)擦除时如果有坏块就跳过
  3. (执行完后所有的数据为FF)
复制代码
  1. >./flash_erase /dev/mtd7 0x0 768
  2.    768  是96MB*1024/128KB=768

  3. 推荐使用该方法,也可以用 -N (不跳过坏块)过程中可以知道坏块的位置,例如:

  4. ./flash_erase -N /dev/mtd7 0x0 768
  5. Erasing 128 Kibyte [url=home.php?mod=space&uid=162986]@[/url] 4a0000 --  4 % complete libmtd: error!: MEMERASE64 ioctl failed for eraseblock 37 (mtd7)
  6.         error 5 (Input/output error)
  7. flash_erase: error!: /dev/mtd7: MTD Erase failure
  8.              error 5 (Input/output error)
  9. Erasing 128 Kibyte @ 4940000 -- 76 % complete libmtd: error!: MEMERASE64 ioctl failed for eraseblock 586 (mtd7)
  10.         error 5 (Input/output error)
  11. flash_erase: error!: /dev/mtd7: MTD Erase failure
  12.              error 5 (Input/output error)
  13. Erasing 128 Kibyte @ 5fe0000 -- 100 % complete
  14. (执行完后所有的数据为FF)
复制代码
  1. >./flash_erase -j /dev/mtd7  0x0 768
  2. 用jffs2格式化
  3. (执行完后数据区为FF,但每偏移0x20000处第一oob有数据变化)
复制代码
  1. >./mtd_debug erase /dev/mtd7 0x0 0x6000000                                   
  2. (执行完后所有的数据为FF,不推荐,好像有坏块就擦除不过去)
复制代码

   8、nandwrite(写nand flash)
  1. >./nandwrite -n -o -m /dev/mtd7 mtd7_32mb_noecc_oob_dumpbad
复制代码
         解释:使用非校验方式拷贝,并且文件带oob,如果有坏块就make它,
                   这种方法可以避免使用9558 nand控制器的ecc校验。也就是硬拷贝。
      
         写完后在备份一次,然后比较两个文件是否相同
  1. >./nanddump --bb=dumpbad -n -o -l 0x2000000 -f mtd7_32mb_noecc_oob_dumpbad_cmp /dev/mtd7
  2. >cmp mtd7_32mb_noecc_oob_dumpbad mtd7_32mb_noecc_oob_dumpbad_cmp
  3. 或者用md5sum 比较也行
  4. >md5sum mtd7*
复制代码
   
9、最后介绍下nandtest这个命令,这个命令是测试nand用的。

     这个命令有写数据能功能,所以在原nand 上一定不要使用这个命令,加-k参数也不行,会破坏oob。
  1. >./nandtest  /dev/mtd7
复制代码
     我发现执行完成后 所有的数据为都有变化,包括oob
  1. >./nandtest -k  /dev/mtd7  
复制代码
     解释:-k 是保持测试完后nand的数据不发生改变
     但我发现测试完后主体数据没有变化,但oob有变化,可能测试后重新校验了。
  1. >./nandtest -s -m /dev/mtd7
复制代码
这个是测试失败后标记坏块,非常有用的命令,新买的nand可以用它测试下。

小技巧:可以用这个命令在目标芯片上产生数据,然后多次dump比较md5值,如果相同,可以理解为这个芯片的品质不错,可以作为目标芯片用。

我参考了下面的文章,较详细,可看。
MTD应用学习札记
mtd-utils命令简介
技术文档
http://www.linux-mtd.infradead.org/doc/general.html
下载地址,回复可见


文件说明:
1、kmod-mtd-rw                          让openwrt mtd所有分区能写的插件(4.9.131)

2、OpenWrtR8.1.11_firmware.rar  这是去除ath10K还安装了kmod-mtd-rw插件的固件,使用时只用载入模块就行了,我也安装了 nand-utils(版本2.0.2)
                                                   另外:系统密码password,非常有可能换nand芯片后,安装的kmod-mtd-rw模会丢失,自己再安装下吧,
                                                   并且kmod-ath10k这个模块会回来,opkg remove kmod-ath10k 删掉它就行了。

3、buildroot2020_2.tar.gz             是buildroot 静态编译的mtd-utils (版本2.1.1)

                                                   这个工具包内的工具很多(UBI工具也有,各位自己看吧),有空再介绍,这个工具只能在mips大端的cpu上用,MTK CPU的是MIPS 小端的,不能用。

另外坛友jspeng 编译的固件不错推荐下,文章地址如下

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




========================
后记:breed的作者提到过Atheros 9344 与qca 9558 nand的校验算法相同,我用自己编译的4300 V1的u-boot文件,用DW33D
使用nandwrite -a (Use auto OOB layout)写进芯片,结果没有问题,4300 V1顺利启动到u-boot。
也测试过写的时候只使用 -n 参数故意不写oob 数据,4300 v1无法启动,这说明了9344启动U-boot也要读取ecc校验支持。
-----------------------------
这次采用的方法与上一帖相同,就是在硬件改造的地方,有点货(对大家的动手能力有点要求,但至少不用一根根焊漆包线了,漆包线焊接非常非常痛苦),
在TB上用了3个商家才弄齐了货。
软件部分就是自己静态编译了mtd-utils
-----------------------------
15楼有点内容,有空可看



作者: jiuweiljp    时间: 2020-5-20 10:43
本帖最后由 jiuweiljp 于 2020-6-15 19:55 编辑

关于局限性问题4楼有人问到,

回答:

有局限性,如果不是相同校验算法的cpu,需要原始nand芯片(oob 数据要64字节那种)拷贝的nand容量在这个固件上不能超过128MB(固件的限制),
暂时没有时间编译一个openwrt,能自动识别nand大小然后挂到mtd上。
网件4300 V1的固件可以自动识别容量并分区,但是使用4300 V1太麻烦了,内存只有128MB实在不方便。

其它软件介绍

   1、mtdinfo
       使用这个可以看到详细的MTD情况,包括nor或nand ,MTD是否写保护,等等
  1. > ./mtdinfo -a
  2. Count of MTD devices:           9
  3. Present MTD devices:            mtd0, mtd1, mtd2, mtd3, mtd4, mtd5, mtd6, mtd7, mtd8
  4. Sysfs interface supported:      yes

  5. mtd0
  6. Name:                           u-boot
  7. Type:                           nor
  8. Eraseblock size:                65536 bytes, 64.0 KiB
  9. Amount of eraseblocks:          4 (262144 bytes, 256.0 KiB)
  10. Minimum input/output unit size: 1 byte
  11. Sub-page size:                  1 byte
  12. Character device major/minor:   90:0
  13. Bad blocks are allowed:         false
  14. Device is writable:             true
  15. ...

  16. mtd8
  17. Name:                           backup
  18. Type:                           nand
  19. Eraseblock size:                131072 bytes, 128.0 KiB
  20. Amount of eraseblocks:          256 (33554432 bytes, 32.0 MiB)
  21. Minimum input/output unit size: 2048 bytes
  22. Sub-page size:                  2048 bytes
  23. OOB size:                       64 bytes
  24. Character device major/minor:   90:16
  25. Bad blocks are allowed:         true
  26. Device is writable:             true
复制代码
使用下面命令可以看到坏块分布情况(第97号就是坏的在0xc20000处)
  1. > ./mtdinfo -M /dev/mtd8
  2. mtd8
  3. Name:                           backup
  4. Type:                           nand
  5. Eraseblock size:                131072 bytes, 128.0 KiB
  6. Amount of eraseblocks:          256 (33554432 bytes, 32.0 MiB)
  7. Minimum input/output unit size: 2048 bytes
  8. Sub-page size:                  2048 bytes
  9. OOB size:                       64 bytes
  10. Character device major/minor:   90:16
  11. Bad blocks are allowed:         true
  12. Device is writable:             true
  13. Eraseblock map:
  14.    0: 00000000           1: 00020000           2: 00040000           3: 00060000        
  15.    4: 00080000           5: 000a0000           6: 000c0000           7: 000e0000        
  16. ...
  17.   92: 00b80000          93: 00ba0000              94: 00bc0000          95: 00be0000        
  18.   96: 00c00000          97: 00c20000    BAD     98: 00c40000          99: 00c60000        
  19. 100: 00c80000         101: 00ca0000             102: 00cc0000         103: 00ce0000        
  20. ...
  21. 252: 01f80000         253: 01fa0000         254: 01fc0000         255: 01fe0000        
复制代码
2、lsmtd
     这个还可以显示UBI的情况
  1. Available columns (for --output, --sort):
  2.      DEVICE  name of the device node
  3.     MAJ:MIN  major:minor device number
  4.        NAME  device name string
  5.        TYPE  device type
  6.        SIZE  size of the device
  7.     EB-SIZE  erase block size
  8.    EB-COUNT  number of erase blocks
  9.      MIN-IO  minimum I/O size
  10.    SUB-SIZE  subpage size
  11.    OOB-SIZE  out of band data size
  12.          RO  read-only device
  13.   CORRUPTED  wheather an UBI volume is corrupted
  14.     REGIONS  number of additional erase regions
  15.          BB  wheather the MTD device may have bad eraseblocks
  16.      MAX-EC  current highest erase counter value on UBI devices
  17.        FREE  available bytes on an UBI device or volume
  18.    FREE-LEB  available LEBs on an UBI device or volume
  19.   BAD-COUNT  number of bad physical eraseblocks
  20.    BAD-RSVD  number of reserved eraseblocks for bad block handling
复制代码

  1. >./lsmtd -O
复制代码
[attach]387824[/attach]

3、有些系统没有tftp工具传文件较麻烦,busybox 的tftp工具很好还可以带目录传,tftp-hpa-5.2就不行只能工作在当前目录,
     安装源中的atftp有问题,传小文件没事,传大文件基本md5值就出错。在代码库中找了下,测试发现真不错。
     源代码地址
     我简单修改了下,静态编译
     简单的小脚本上传文件用,路径和文件可以用通配符(*,?)一次上传多个文件,文件
client-mips-gcc5放在 /mnt 任意目录下。
  1. #!/bin/sh
  2. tftpfile=`find /mnt -type f -name "client-mips-gcc5"`
  3. cp -s $tftpfile /usr/sbin/tftp_client
  4. read -p "input filepath:" filepath
  5. read -p "input serverip:" serverip
  6. for name in `find $filepath -type f -name "*"`
  7.         do
  8.                 echo ..................................
  9.                 echo upload to "$serverip" file "$name"
  10.                 echo ..................................

  11.                 tftp_client -wo $name $serverip 69
  12.         done
复制代码

[attach]388383[/attach]


作者: 纯今老师    时间: 2020-5-20 10:46
期待后续,不知道软件最终用哪个?
作者: Maximilian    时间: 2020-5-20 10:46
局限性很大
作者: fred_yan    时间: 2020-5-20 10:58
占楼学习中
作者: spring1    时间: 2020-5-20 11:23
厉害了,我的哥
作者: cixiclq    时间: 2020-5-20 11:24
其实论以后使用的方便性,还是直接焊接到电路板上简洁,就是焊接是个痛苦活
作者: jiuweiljp    时间: 2020-5-20 11:31
cixiclq 发表于 2020-5-20 11:24
其实论以后使用的方便性,还是直接焊接到电路板上简洁,就是焊接是个痛苦活

因为要换nand所以要用弹跳座,要是只是使用dw33d就没有必要折腾了
作者: 航校门口二楼修    时间: 2020-5-20 12:14
看看什么好东西

作者: cixiclq    时间: 2020-5-20 12:17
jiuweiljp 发表于 2020-5-20 11:31
因为要换nand所以要用弹跳座,要是只是使用dw33d就没有必要折腾了

我是说弹跳座直接焊接在电路板上简洁方便,就是焊接困难点
作者: jiuweiljp    时间: 2020-5-20 12:45
cixiclq 发表于 2020-5-20 12:17
我是说弹跳座直接焊接在电路板上简洁方便,就是焊接困难点

哥哥啊,我找了很长时间,都没有这种座,有一种贴片座10多元钱,TMD这种座没有焊工10级的水平和特殊的焊头你就别想焊上去。还容易弄坏焊盘。
我的网件 4300V1 差点焊废了,上一个帖子我提到过


作者: cixiclq    时间: 2020-5-20 14:54
jiuweiljp 发表于 2020-5-20 12:45
哥哥啊,我找了很长时间,都没有这种座,有一种贴片座10多元钱,TMD这种座没有焊工10级的水平和特殊的焊 ...

是啊,我也找过很久,不是太贵就是难焊,最后放弃了
作者: ilyyg2    时间: 2020-5-20 17:15
你这个是高手啊
作者: hzq1314dwy    时间: 2020-5-20 19:37
大佬啊。。。
作者: jiuweiljp    时间: 2020-5-22 16:37
本帖最后由 jiuweiljp 于 2020-5-27 22:20 编辑

后期补充
上一篇帖子中breed的作者提到过他用breed做了一个RAW的nand 读写器,好羡慕啊
今天看网文buildroot busybox

提到过‘MTD_FILE_MODE_RAW’这也是raw模式,查了下mtd-utils源代码
nanddump.c 如果没有理解错使用noecc 也是MTD_FILE_MODE_RAW模式
  1.         if (noecc)  {
  2.                 if (ioctl(fd, MTDFILEMODE, MTD_FILE_MODE_RAW) != 0) {
  3.                                 perror("MTDFILEMODE");
  4.                                 goto closeall;
  5.                 }
  6.         } else {
  7.                 /* check if we can read ecc stats */
  8.                 if (!ioctl(fd, ECCGETSTATS, &stat1)) {
  9.                         eccstats = true;
  10.                         if (!quiet) {
  11.                                 fprintf(stderr, "ECC failed: %d\n", stat1.failed);
  12.                                 fprintf(stderr, "ECC corrected: %d\n", stat1.corrected);
  13.                                 fprintf(stderr, "Number of bad blocks: %d\n", stat1.badblocks);
  14.                                 fprintf(stderr, "Number of bbt blocks: %d\n", stat1.bbtblocks);
  15.                         }
  16.                 } else
  17.                         perror("No ECC status information available");
  18.         }
复制代码
nandwrite.c 这个也是

  1.         /* Select OOB write mode */
  2.         if (noecc)
  3.                 write_mode = MTD_OPS_RAW;
  4.         else if (autoplace)
  5.                 write_mode = MTD_OPS_AUTO_OOB;
  6.         else
  7.                 write_mode = MTD_OPS_PLACE_OOB;

  8.         if (noecc)  {
  9.                 ret = ioctl(fd, MTDFILEMODE, MTD_FILE_MODE_RAW);
  10.                 if (ret) {
  11.                         switch (errno) {
  12.                         case ENOTTY:
  13.                                 errmsg_die("ioctl MTDFILEMODE is missing");
  14.                         default:
  15.                                 sys_errmsg_die("MTDFILEMODE");
  16.                         }
  17.                 }
  18.         }
复制代码
nandbiterrs.c 有两次提到了这个,正在研究这个工具用法,不知道什么作用

  1. static int rewrite_page(void)
  2. {
  3.         if (ioctl(fd, MTDFILEMODE, MTD_FILE_MODE_RAW) != 0)
  4.                 goto fail_mode;

  5.         if (write_page() != 0)
  6.                 return -1;

  7.         if (ioctl(fd, MTDFILEMODE, MTD_FILE_MODE_NORMAL) != 0)
  8.                 goto fail_mode;

  9.         return 0;
复制代码
  1. static int write_page(void)
  2. {
  3.         int raw = flags & PAGE_ERASED;
  4.         int err;

  5.         if (raw && ioctl(fd, MTDFILEMODE, MTD_FILE_MODE_RAW) != 0)
  6.                 goto fail_mode;

  7.         err = mtd_write(mtd_desc, &mtd, fd, peb, page*pagesize,
  8.                                         wbuffer, pagesize, NULL, 0, 0);
复制代码



-------------------下面是一些文件的帮助,没什么意义

  1. ./nandbiterrs --h
  2. Usage: nandbiterrs [OPTIONS] <device>

  3. Common options:
  4.   -h, --help          Display this help output
  5.   -k, --keep          Restore existing contents after test
  6.   -b, --peb <num>     Use this physical erase block
  7.   -p, --page <num>    Use this page within the erase block
  8.   -s, --seed <num>    Specify seed for PRNG
  9.   -e, --erased        Test erased pages instead of written pages

  10. Options controling test mode:
  11.   -i, --incremental   Manually insert bit errors until ECC fails
  12.   -o, --overwrite     Rewrite page until bits flip and ECC fails

  13. Test mode specific options:
  14.   -w, --writes <num>  Number of writes (default 10000)
  15. ---------------------------
  16. ./nandpagetest --h
  17. Usage: nandpagetest [OPTIONS] <device>

  18. Options:
  19.   -h, --help         Display this help output
  20.   -b, --peb <num>    Index of the first erase block to use
  21.   -c, --count <num>  Number of erase blocks to use (at least 2, default all)
  22.   -s, --skip <num>   Number of erase blocks to skip
  23.   -S, --seed <num>   Seed for pseudor random number generator
  24.   -k, --keep         Restore existing contents after test
  25. -------------------------
复制代码
http://blog.chinaunix.net/uid-20546441-id-351133.html




作者: jiuweiljp    时间: 2020-5-22 16:46
Maximilian 发表于 2020-5-20 10:46
局限性很大

有局限性,如果不是相同校验算法的cpu,需要原始nand芯片(oob 数据要64字节那种)拷贝的nand容量在这个固件上不能超过128MB(固件的限制),
暂时没有时间编译一个固件,自动识别nand大小然后挂到mtd上。
网件4300 V1的固件可以自动并分区,但是使用4300 V1太麻烦了,内存只有128MB实在不方便。



作者: 未来未知    时间: 2020-5-22 20:45
大牛!期待hackpascal大神把DW33D的breed更新一下,最好支持nand全盘操作,那样就完美了
作者: jiuweiljp    时间: 2020-5-22 22:38
本帖最后由 jiuweiljp 于 2020-5-22 22:39 编辑
未来未知 发表于 2020-5-22 20:45
大牛!期待hackpascal大神把DW33D的breed更新一下,最好支持nand全盘操作,那样就完美了

不是breed的问题是openwrt固件的分区问题,openwrt 在启动的时候能发现256MB的nand,但分区的时候只分了96MB(rootfs_data)+32MB(backup)
  1. [    0.963644] nand: device found, Manufacturer ID: 0x98, Chip ID: 0xda
  2. [    0.970092] nand: Toshiba NAND 256MiB 3,3V 8-bit
  3. [    0.974808] nand: 256 MiB, SLC, erase size: 128 KiB, page size: 2048, OOB size: 64
  4. [    0.982525] Scanning device for bad blocks
  5. [    0.990053] random: fast init done
  6. [    1.163445] 2 cmdlinepart partitions found on MTD device ar934x-nfc
  7. [    1.169798] Creating 2 MTD partitions on "ar934x-nfc":
  8. [    1.175029] 0x000000000000-0x000006000000 : "rootfs_data"
  9. [    1.182340] 0x000006000000-0x000008000000 : "backup"
  10. [    1.189641] libphy: Fixed MDIO Bus: probed
复制代码


作者: redviolet    时间: 2020-5-23 11:21
老哥玩的牛叉
作者: kmdqk    时间: 2020-5-24 22:25
动手能力台强了
作者: 中华奇龙    时间: 2020-5-31 11:37
我可以说, 楼主牛逼, 吗?
作者: fyi2000    时间: 2020-6-4 04:24
自制NAND 编程器 硬件已就位 请教LEDE或者OP下 挂载 刷写命令
作者: 喜欢电台    时间: 2020-6-9 18:25
学习了  这样改很实用
作者: wrzone    时间: 2020-6-15 16:35
顶顶硬件已经就绪,开始折腾软件
作者: wrzone    时间: 2020-6-15 20:31
本帖最后由 wrzone 于 2020-6-15 20:50 编辑

感谢楼主的分享,软件步骤5过后就不知道怎么弄了,有没有简单一点适合小白的教程,请问要如何安装仔细看了每个步骤应该是还要安装buildroot,请问要如何安装
[attach]395060[/attach][attach]395061[/attach]

作者: jiuweiljp    时间: 2020-6-16 08:08
本帖最后由 jiuweiljp 于 2020-6-16 08:12 编辑

焊工超级赞,你怎么把这东西焊上去的,不会用502粘上去的吧(有个朋友说他将这种座用502粘上,还TM的好用,我无语了)



先解释下吧

1、 insmod mtd-rw.ko i_want_a_brick=1
这个干嘛用呢,在R8.1.11中mtd8(backup)是锁住的,能读不能写。用了它以后能完全写入128MB。
2、看了你用了@jspeng 的编译的固件,这个固件mtd7(nand-1024m)因该不是锁住的大概率不需要这个插件(mtd-rw)
3、你现在最需要做的就是将一个空白的nand芯片在开机前装到编程座上;
     注意:这个nand芯片是你那种特殊芯片page (4096+256)的;
     特别提醒:不能是要拷贝的原芯片是空白的芯片
4、使用我已经编译好的buildroot中的nanddump,如果jspeng编译的固件中有nanddump用固件中自带的也行
  1. ./nanddump -c -o -l 0x2000 /dev/mtd7
复制代码
如果显示结果oob不是256个字节,万事皆休。

      



作者: wrzone    时间: 2020-6-16 10:21
本帖最后由 wrzone 于 2020-6-16 10:44 编辑

感谢回复,焊接这个座子确实考验手艺一点,座子的针脚实际比焊盘窄一点,这样就给烙铁焊接留了机会。我焊接习惯在被焊接原件未焊接前针脚跑一遍锡,但是这个座子千万不能这样做不然脚就焊接在一起废了,焊连在一起非常不好清理分开(一两个脚还可以,一多的话高温就容易烫坏塑料部分)。焊接这个座子有几个关键点:烙铁头要用细尖头、焊接时候细尖头在卫生纸上擦掉所有焊锡、焊盘要保证有一点点锡不能是吸锡线拖平那样,要看起来焊盘略微凸起样。座子放在与焊盘居中位置(这样要焊的两排外侧都会有一点焊盘空出来方便烙铁头接触焊接),用手按压好分别焊接座子对角的几针先固定位置,最后就仔细一针一针焊完(烙铁头千万擦干净不留锡)。如果出现了焊接瑕疵(比如两针连锡了)是没有办法在焊接状态下清理开的,这个和焊接NAND是两种体验。如果真出现了只有用风枪吹下来清理好又重新焊。 我一共发了两个座子,弄坏了一个总结了经验,第二个已经反复拆装在不同板上。
作者: wrzone    时间: 2020-6-16 10:27
jiuweiljp 发表于 2020-6-16 08:08
焊工超级赞,你怎么把这东西焊上去的,不会用502粘上去的吧(有个朋友说他将这种座用502粘上,还TM的好用, ...

昨天晚上刷了您提供的固件,开始是正常的我通电了一夜,今天无法启动了。进BREED重刷也不行,现在只能运行jspeng的固件。在jspeng系统下不保留配置升级您的固件也无法启动,现象为反复重启
作者: wrzone    时间: 2020-6-16 10:33
本帖最后由 wrzone 于 2020-6-16 10:54 编辑

放上我要拷贝的nand 这个命令cat /proc/mtd是无法识别到未有mtd7这项。请问是不是就没有复制可能了,现在只能识别DW33D拆下的这片,想先用这个做试验熟悉命令,buildroot2020_2.tar.gz 这个要如何在jspeng 固件下运行请教下具体步骤。
  1. root@OpenWrt:~# cat /proc/mtd
  2. dev:    size   erasesize  name
  3. mtd0: 00040000 00010000 "u-boot"
  4. mtd1: 00010000 00010000 "u-boot-env"
  5. mtd2: 00e30000 00010000 "rootfs"
  6. mtd3: 007e0000 00010000 "rootfs_data"
  7. mtd4: 00170000 00010000 "kernel"
  8. mtd5: 00010000 00010000 "art"
  9. mtd6: 00fa0000 00010000 "firmware"
  10. mtd7: 08000000 00020000 "nand-1024m"
  11. root@OpenWrt:~# ./nanddump -c -o -l 0x2000 /dev/mtd
  12. -ash: ./nanddump: not found
  13. root@OpenWrt:~#
复制代码



作者: jiuweiljp    时间: 2020-6-16 11:11
1、我提供的R8.1.11固件即使没有安装nand芯片也可以正常启动(这个我测试过)。
2、jspeng的固件大概率也是这种情况(不安装nand芯片也能启动)。
   

   以上的情况你自己可以试试看。

我不知道你手上有没有空白的nand(4096+256)这种芯片和ttl线,如果有你可以试试看,在安装好nand芯片后
在TTL控制台中断启动进程,使用命令看看结果
  1. flash list
复制代码
如果显示有芯片安装上了,继续启动
  1. autoboot
复制代码

看看在固件中启动的信息。


作者: 桥下说书的    时间: 2020-6-24 14:00
你这个是高手啊
作者: mysxl    时间: 2020-6-25 18:54
谢谢楼主分享!
作者: xiao9jun    时间: 2020-7-2 23:52
竞斗云楼主做过吗?感觉上应该可以?

作者: zhoushiyi213    时间: 2020-7-11 02:11
感谢楼主分享!
最近发现wndr4300v2刷新支持的openwrt后nand挂载ubi报错,用楼主的编译mtd-utils研究一下试试 感谢分享!
作者: libios    时间: 2020-7-12 14:11
这种FLASH以前搞维修一天要拆换几十个

作者: xiao9jun    时间: 2020-7-15 16:59
jiuweiljp 发表于 2020-6-16 11:11
1、我提供的R8.1.11固件即使没有安装nand芯片也可以正常启动(这个我测试过)。
2、jspeng的固件大概率也 ...

竞斗云是ipq4019啊,内存512,nand128,好像spi是16M吧 查一下能找到
作者: jiuweiljp    时间: 2020-7-15 17:35
本帖最后由 jiuweiljp 于 2020-7-15 17:41 编辑
xiao9jun 发表于 2020-7-15 16:59
竞斗云是ipq4019啊,内存512,nand128,好像spi是16M吧 查一下能找到

刚好现在浏览论坛,看见你的回复了。
的确如你所说,竞斗云的配置也不错,spi nor flash 16MB,内存256MB,nand flash 128MB。
刚刚有人发帖说他的竞斗云坏了,有些信息能从该帖贴出的启动信息中能看见。
个人觉得这个竞斗云不怎么太适合用于这个目的:
因为竞斗云spi nor flash只存了bootload 和art,而root_fs放在了nand中,我在4300 v1上操作换nand芯片的时候,发现系统有时候还会读下nand芯片
后来总结出来一个结果,在操作nand芯片前你最好将要用的命令先运行一遍(应该是将程序读入到内存中),下次调用的时候openwrt自接在内存中运行程序,不需要再读nand中的内容了。
dw33d的openwrt(17.07以下版本)的固件放在的nor flash中,nand芯片基本上只是一个摆设(rootfs_data),相对于4300v1 和竞斗云毕竟方便很多了。
竞斗云毕竟内存有512MB我估计操作256MB(含)以下的nand芯片没有什么问题。


作者: xiao9jun    时间: 2020-7-15 17:42
jiuweiljp 发表于 2020-7-15 17:35
刚好现在浏览论坛,看见你的回复了。
的确如你所说,竞斗云的配置也不错,spi nor flash 16MB,内存256M ...

早期似乎有人成功了,不过竞斗云感觉确实一般

作者: jiuweiljp    时间: 2020-7-15 17:58
xiao9jun 发表于 2020-7-15 17:42
早期似乎有人成功了,不过竞斗云感觉确实一般

竞斗云的CPU肯定是够用了,以后是ARM的天下,你看看老牌的atheros(现在是qca)都从mips转到ARM了,
以后的存储芯片我估计嵌入式的设备可能要转到spi nand的芯片,(容量大,布线也简单)



作者: flithawk    时间: 2020-7-29 11:29
感谢楼主的分享
作者: no2key    时间: 2020-8-17 14:54
谢谢分享,这个对我很有用
作者: amyrectab    时间: 2020-8-18 20:25
神啊,终于让我找到了!

作者: 捡了一个盘    时间: 2020-8-20 10:47
优秀优秀!!!!!!!!!!!!!!!!!11111
作者: 没尾巴的牛    时间: 2020-8-24 19:14
牛批111111111111
作者: shahuo    时间: 2020-9-8 21:13
看看,谢谢老大
作者: violetburn    时间: 2020-9-9 09:53
谢谢楼主分享
作者: yj2352001    时间: 2020-9-9 12:26
动手能力台强了
作者: QQ188867888    时间: 2020-9-28 15:09
谢谢分享,研究研究

作者: cynizy    时间: 2020-10-6 23:23
jiuweiljp 发表于 2020-5-20 12:45
哥哥啊,我找了很长时间,都没有这种座,有一种贴片座10多元钱,TMD这种座没有焊工10级的水平和特殊的焊 ...

今天晚上刚刚折腾了一个,貌似应该没什么问题,明天试一试!
[attach]417096[/attach]
[attach]417097[/attach]

作者: xiaole51    时间: 2020-10-14 10:50
恩山真是藏龙卧虎,经常能遇见惊为天人的帖子.
最近修理成砖的ea6700才关注nand编程器.
楼主方法确实简单有效,动手能力过关的话一百块内搞定一个编程器了.

还有个开源的NANDopen编程器, 不知道对比下来有何区别.



作者: xiaole51    时间: 2020-10-14 12:35
cynizy 发表于 2020-10-6 23:23
今天晚上刚刚折腾了一个,貌似应该没什么问题,明天试一试!

看着脚位脱焊应该没问题.
上面塑料部位需要贴个胶带保护.
作者: cynizy    时间: 2020-10-14 13:38
xiaole51 发表于 2020-10-14 12:35
看着脚位脱焊应该没问题.
上面塑料部位需要贴个胶带保护.

已测试通过,固件可以启动,看来是焊好了
作者: jiuweiljp    时间: 2020-10-15 14:32
xiaole51 发表于 2020-10-14 10:50
恩山真是藏龙卧虎,经常能遇见惊为天人的帖子.
最近修理成砖的ea6700才关注nand编程器.
楼主方法确实简单 ...

1、NANDOPEN 依赖上位机软件对芯片库的支持,我看了下nandopen 自带的软件支持的芯片很少,但是这个软件可以自定义芯片库,
    并且nandopen 用STM32 使用前还要刷stm32的固件,个人觉得nandopen对动手能力有一定要求。


2、本帖的方法对芯片库的支持是依赖固件的,如果固件不支持你的芯片那就只有自己改原代码然后自己编译固件,还好能openwrt的原代码是开放的。
     个人觉得如果有点动手能力可以尝试下。当然不限于使用mips cpu的路由器,arm cpu的路由器也可以这样改造。
   

3、使用Ftdi 2232H mcu刷写nand见贴 https://www.right.com.cn/forum/thread-4040283-1-1.html  

    这种方法对芯片的支持也是依赖上位机软件(python),在github上也有原代码。这个上位机软件还可以加参数支持一些芯片库中没有列出的芯片。

    个人感觉这种方法对动手能力要求较低,入手较快点。



作者: gocloud高恪    时间: 2021-5-8 15:16
楼主是人才
作者: zhukongming    时间: 2021-8-13 15:58
顶一下,等ax6回来后试一试
作者: qiouxiao    时间: 2021-8-15 06:49
谢谢分享!!!!

作者: 348864255    时间: 2021-9-7 07:36
吾辈学习之楷模
作者: 浪迹天涯168    时间: 2021-9-26 00:38
大神们好,改成编程器后,能通过SPI闪存进,PB-UOOT把breed文件写入nand吧,芯片有没有指定要那个要那个牌子的才可以?
我拿了一个小米4A千兆版,刷了PB-boot,什么命令都可以, 就是最后一步写入 nand 没有反应,闪存是飞索的,不知道问题出在那里
我也想拥有一个路由器改装的nand编程器,能写breed的就好,哈哈。
作者: maimaiti    时间: 2021-10-17 06:23
非giga怎么区分?

作者: 山心豆    时间: 2021-10-26 09:13
厉害咯,膜拜一下!
作者: lenina    时间: 2022-3-14 15:00
厉害,真能折腾
作者: crazywar3    时间: 2022-4-1 11:26
这个确实很牛!!
作者: chen_2151    时间: 2022-4-19 07:21
厉害了 这个非常棒
作者: antren    时间: 2023-4-17 16:23
这玩法有点意思了。
作者: victor2002    时间: 2023-7-30 12:11
试了下用大麦读写mtk的nand,发现因为大小端问题,导致原机闪存在大麦上读出是反序的,估计正序的编程器固件写进去也不能使用,这有解决方法吗?

作者: jiuweiljp    时间: 2023-8-19 12:35
victor2002 发表于 2023-7-30 12:11
试了下用大麦读写mtk的nand,发现因为大小端问题,导致原机闪存在大麦上读出是反序的,估计正序的编程器固 ...

读写命令用的什么参数
作者: victor2002    时间: 2023-8-19 20:21
jiuweiljp 发表于 2023-8-19 12:35
读写命令用的什么参数

读取命令:
nanddump --bb=dumpbad -n -o -s 0x0 -l 0x80000 -f uboot-backup.img /dev/mtd7

写入命令:
flash_erase -N /dev/mtd7 0x0 4
nandwrite -n -o -m /dev/mtd7 /tmp/uboot-7621.img
作者: jiuweiljp    时间: 2023-8-30 14:05
本帖最后由 jiuweiljp 于 2023-8-30 14:10 编辑
victor2002 发表于 2023-8-19 20:21
读取命令:
nanddump --bb=dumpbad -n -o -s 0x0 -l 0x80000 -f uboot-backup.img /dev/mtd7

时间长了有点忘记了,  ,我印象中拷贝的时候复制oob并忽略ecc校验,写flash的时候把oob数据也写进去,并忽略ecc。
我干过跨平台写入【arm(小端)的设备】

作者: victor2002    时间: 2023-8-31 01:13
jiuweiljp 发表于 2023-8-30 14:05
时间长了有点忘记了,  ,我印象中拷贝的时候复制oob并忽略ecc校验,写flash的时候把oob数据也写进去,并 ...

读写部分oob部分数据是没问题的,读出跟写入的也一致。只是mtk7621的nand放到大麦里面读的话,读出的数据会出现反序,估计也要把反序的数据刷进空nand,才能放到mtk里启动。我猜是mips和mipsel造成的,不知是否有命令能实现大小端反序。
作者: jiuweiljp    时间: 2023-9-7 16:04
victor2002 发表于 2023-8-31 01:13
读写部分oob部分数据是没问题的,读出跟写入的也一致。只是mtk7621的nand放到大麦里面读的话,读出的数据 ...

你读出的数据翻序了,写数据的时候可能再翻会去。你可以试一下。另外使用软件hexwork shop可以大小端翻转。
作者: victor2002    时间: 2023-9-8 22:06
jiuweiljp 发表于 2023-9-7 16:04
你读出的数据翻序了,写数据的时候可能再翻会去。你可以试一下。另外使用软件hexwork shop可以大小端翻转 ...

谢谢,我猜也是要写入反序的数据才能在mtk7621上正常读取,不过没有实测。
作者: jiuweiljp    时间: 2023-9-9 12:01
victor2002 发表于 2023-9-8 22:06
谢谢,我猜也是要写入反序的数据才能在mtk7621上正常读取,不过没有实测。 ...

https://www.right.com.cn/forum/f ... &tid=2116187&page=1

你可以仔细看看这个帖子的第二楼及后面的问答

作者: victor2002    时间: 2023-9-10 01:16
jiuweiljp 发表于 2023-9-9 12:01
https://www.right.com.cn/forum/f ... &tid=2116187&page=1

你可以仔细看看这个帖子的第二楼及后面的问 ...

看了后确实解惑了,原来不是大小端的问题,是这款主控的问题,读写都做了一次反序,也就是说用其他编程器备份的raw数据,必须反序后才能用大麦写入。
用大麦备份的raw数据可用直接用大麦写进去,但需要反序后才能用其他编程器写入。
作者: victor2002    时间: 2023-9-20 23:11
jiuweiljp 发表于 2023-9-9 12:01
https://www.right.com.cn/forum/f ... &tid=2116187&page=1

你可以仔细看看这个帖子的第二楼及后面的问 ...

大佬,还有一个,就是对华邦的nand貌似兼容性不好,通过flash_erase可以正常擦除,但通过nandwrite写进去的数据不对,写其他品牌的nand目前没发现问题,不兼容的都是华邦的。
作者: jiuweiljp    时间: 2023-9-21 12:35
victor2002 发表于 2023-9-20 23:11
大佬,还有一个,就是对华邦的nand貌似兼容性不好,通过flash_erase可以正常擦除,但通过nandwrite写进去 ...

这个东西非常依赖固件中的nand flash 驱动,你仔细看看启动的时候控制台信息,看识别正不正确。
如果有能力还可以自己修改这块(nand 芯片支持)的代码,不是很难,但需要查下芯片手册,或者移植也行。
另外Winbond 算大厂了,老驱动应该也能用,是不是你芯片买的有问题
作者: victor2002    时间: 2023-9-22 23:40
jiuweiljp 发表于 2023-9-21 12:35
这个东西非常依赖固件中的nand flash 驱动,你仔细看看启动的时候控制台信息,看识别正不正确。
如果有能 ...

芯片是可以正常识别的,也能正常读取,只是写入的时候有问题,试了两个正常的华邦芯片都这样。
作者: zhu_yanghua    时间: 2023-10-25 16:59
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶




欢迎光临 恩山无线论坛 (https://www.right.com.cn/forum/) Powered by Discuz! X3.5