AM3517之SD卡启动盘恢复NAND flash的数据:x-loader(一)

AM3517使用SD启动盘 update x-loader booting from Nand flash

前段时间,使用AM3517的时候在操作x-loader的时候出了点小问题,导致nandflash中的x-loader数据被破坏了,导致x-loaderUboot都启动不起来,之后,用花了一周多的时间做了一个4GSD卡启动盘,(本人系学习嵌入式新手,惭愧,有的原理还不怎么清楚,汗。。。)。

做好了SD卡启动盘之后,我不想总是用SD卡启动盘,想恢复nandflash里面的数据,用nandflash启动linux系统,那么SD卡启动AM3517之后,如何恢复X-loader,U-boot,uImage

       还忘记了一点,硬件连接.

硬件连接:BOOT启动模式是BOOT00BOOT51,这里是选择启动方式的,这种启动方式是选择优先从SD卡启动linux系统,办卡的串口和开发主机的COM1相连,板卡的网口和开发主机的相连,把SD卡插入板卡中,之后确认一下BOOT启动方式是01,就可以上电启动AM3517板卡了。

    启动AM3517板卡之后,因为要恢复板载的nandflash中的x-loaderu-boot,uImage的数据,因此我们不进入到系统中,只要进入UBOOT中就可以了,板卡启动的时候,中断进入系统的进程,就停留在uboot中,这时就可以利用uboot命令操作来恢复x-loaderu-boot,uImage的数据了。

下面我把恢复的全步骤先列出来,再一一分解,

1:首先恢复x-loader 的数据(或者叫更新存贮在nandflash 里的nandflash 起动的x-loader

AM3517_EVM # mmc init 『初始化sd 卡』

mmc1 is available

AM3517_EVM # mw.b 0x80000000 0xFF 0x100000 『初始化使用的内存,全部置1

AM3517_EVM # nand erase 0 40000 『擦除nandflash 中存放x-loader 区域』

NAND erase: device 0 offset 0x0, size 0x40000『以下两行提示擦除进度, 和擦除是否成功』

Erasing at 0x20000 -- 100% complete 『如果没有这两行信息,请看后面的9 注意事项』

AM3517_EVM # fatload mmc1 0 0x80000000 x-load.bin.ift 『从sd 卡读x-loader 到内存』

reading x-load.bin.ift

16480 bytes read

AM3517_EVM # nandecc hw 『设定ecc 校验为硬件校验』

HW ECC selected

AM3517_EVM # nand write.i 0x80000000 0 40000 『存x-loader nandflash 指定位置』

NAND write: device 0 offset 0x0, size 0x40000

262144 bytes written: OK

AM3517_EVM #

简洁的来看就是

SD update x-loader booting from Nand flash

AM3517_EVM # mmc init 『初始化sd 卡』

AM3517_EVM # mw.b 0x80000000 0xFF 0x100000 『初始化使用的内存,全部置1

AM3517_EVM # nand erase 0 40000 『擦除nandflash 中存放x-loader 区域』

AM3517_EVM # fatload mmc1 0 0x80000000 x-load.bin.ift 『从sd 卡读x-loader 到内存』

AM3517_EVM # nandecc hw 『设定ecc 校验为硬件校验』

AM3517_EVM # nand write.i 0x80000000 0 40000 『存x-loader nandflash 指定位置』

 

详细解释:mmc init,是初始化SD卡的命令,对于初始化SD卡这个命令我也是第一次用到,不懂就要查啊,怎么查啊,help啊,呵呵,在uboot中输入mmc help

AM3517_EVM # mmc help

mmc - MMC sub-system   MMC的子系统)

 

Usage:(使用)

mmc init [dev] - init MMC sub system  (初始化MMC子系统)

mmc device [dev] - show or set current device (显示或设置当前的设备)

 

下面的命令是:mw.b 0x80000000 0xFF 0x100000

AM3517_EVM # mw help

mw - memory write (fill) (写内存/填充内存)

Usage:使用

mw [.b, .w, .l] address value [count]

mw.b表示以字节的方式写, 0x80000000是要写入的内存的起始地址,0x100000是要写入的长度,0xFF是往内存中写入的数据,即往从0x80000000为起始地址的长度为0x100000的内存中全部写入0xFF,所以是初始化内存,全部置1

下一步是# nand erase 0 40000

AM3517_EVM # nand erase 0 40000 『擦除nandflash 中存放x-loader 区域』

NAND erase: device 0 offset 0x0, size 0x40000『以下两行提示擦除进度, 和擦除是否成功』

Erasing at 0x20000 -- 100% complete 『如果没有这两行信息,请看后面的9 注意事项』

0是偏移地址,0x40000是擦除的长度,擦除0x40000个字节长度。这里没有特殊说明就是擦除从0开始的偏移0字节的长度为0x40000nandflash

nand erase [clean] [off size] - erase 'size' bytes from

    offset 'off' (entire device if not specified)

如果没有特殊说明就是从起始地址处,偏移off个字节为起始地址长度为size个字节擦除nand

解释如是:

AM3517_EVM # nand help

nand - NAND sub-system NAND子系统

Usage:使用

nand info - show available NAND devices (显示可用的NAND设备的信息)

nand device [dev] - show or set current device

nand read - addr off|partition size

nand write - addr off|partition size

    read/write 'size' bytes starting at offset 'off'

    to/from memory address 'addr', skipping bad blocks.

nand erase [clean] [off size] - erase 'size' bytes from

    offset 'off' (entire device if not specified)  NAND擦除

nand bad - show bad blocks   显示坏块

nand dump[.oob] off - dump page

nand scrub - really clean NAND erasing bad blocks (UNSAFE) 真正的擦除NAND此命令慎重使用

nand markbad off [...] - mark bad block(s) at offset (UNSAFE)

nand biterr off - make a bit error at offset (UNSAFE)

 

下面看nand info

AM3517_EVM # nand info

Device 0: NAND 128MiB 3,3V 8-bit, sector size 128 KiB

有设备号0NAND 容量128M,电压3.3V8位,扇区大小128K

AM3517_EVM # nand bad 显示坏块

Device 0 bad blocks:

  00000000

  00020000

AM3517_EVM #

再下一个命令是

AM3517_EVM # fatload mmc1 0 0x80000000 x-load.bin.ift 『从sd 卡读x-loader 到内存』

reading x-load.bin.ift

16480 bytes read

mmc1接口处,设备号0,地址0x80000000,读取的文件名是x-load.bin.ift

综合从SD卡的MMC1设备号0中,读取x-load.bin.ift文件到内存的0x80000000地址处。

数据移动方向为:

SD      --------à>>>>>>     内存

0(x-load.bin.ift) --à>>>>>>[0x80000000----?]

AM3517_EVM # fatload help

usage: fatload [bytes]

再下个命令是

AM3517_EVM # nandecc hw 『设定ecc 校验为硬件校验』

HW ECC selected

详解:ECC“Error Correcting Code”的简写,中文名称是错误检查和纠正ECC是一种能够实现错误检查和纠正的技术,ECC内存就是应用了这种技术的内存

再下个命令是

AM3517_EVM # nand write.i 0x80000000 0 40000 『存x-loader nandflash 指定位置』

NAND write: device 0 offset 0x0, size 0x40000

262144 bytes written: OK

Nand write详解

nand write - addr off|partition size

    read/write 'size' bytes starting at offset 'off'

    to/from memory address 'addr', skipping bad blocks.

x-loader写到nandflash的指定位置。

将内存起始地址0x80000000的长度为0x40000的这些内存数据复制到nandflash的从地址0开始的区域中。

数据移动方向为:内存                                    ----à>>>>>   NAND flash

                            [0x800000000---0x80040000]----à>>>>> [0-0x40000]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值