加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:37:08 所属栏目:百科 来源:网络整理
导读:AM3517 使用 SD 启动盘 ? update x-loader booting from Nand flash 前段时间,使用 AM3517 的时候在操作 x-loader 的时候出了点小问题,导致 nandflash 中的 x-loader 数据被破坏了,导致 x-loader 和 Uboot 都启动不起来,之后,用花了一周多的时间做了一

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 #?fatload mmc1 0 0x80000000 x-load.bin.ift?『从sd?卡读x-loader?到内存』

?

详细解释: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

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子系统

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.

????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 #

再下一个命令是

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]

再下个命令是

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

Nand write详解

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读