AM3517之SD卡启动盘恢复NAND flash的数据:x-loader(一)
AM3517使用SD启动盘?update x-loader booting from Nand flash 前段时间,使用AM3517的时候在操作x-loader的时候出了点小问题,导致nandflash中的x-loader数据被破坏了,导致x-loader和Uboot都启动不起来,之后,用花了一周多的时间做了一个4G的SD卡启动盘,(本人系学习嵌入式新手,惭愧,有的原理还不怎么清楚,汗。。。)。 做好了SD卡启动盘之后,我不想总是用SD卡启动盘,想恢复nandflash里面的数据,用nandflash启动linux系统,那么SD卡启动AM3517之后,如何恢复X-loader,U-boot,uImage。 ???????还忘记了一点,硬件连接. 硬件连接:BOOT启动模式是BOOT0是0,BOOT5是1,这里是选择启动方式的,这种启动方式是选择优先从SD卡启动linux系统,办卡的串口和开发主机的COM1相连,板卡的网口和开发主机的相连,把SD卡插入板卡中,之后确认一下BOOT启动方式是01,就可以上电启动AM3517板卡了。 ????启动AM3517板卡之后,因为要恢复板载的nandflash中的x-loader和u-boot,uImage的数据,因此我们不进入到系统中,只要进入UBOOT中就可以了,板卡启动的时候,中断进入系统的进程,就停留在uboot中,这时就可以利用uboot命令操作来恢复x-loader和u-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字节的长度为0x40000的nandflash。 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 有设备号0,NAND?容量128M,电压3.3V,8位,扇区大小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] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |