分类: LINUX
2015-08-28 13:54:44
PC操作系统:ubuntu 11.10
使用的开发板:am335x_evm
开发板使用的操作系统:linux 3.2
有多种方式可以写入数据到NAND FLASH 中,这里使用的是 SD卡,把 SD 中的SPL( MLO), u-boot.img 文件写入到 NAND FLASH 中
NAND 布局如下:
+------------+-->0x00000000-> SPL start (SPL copy on 1st block)
| |
| |-->0x0001FFFF-> SPL end
| |-->0x00020000-> SPL.backup1 start (SPL copy on 2nd block)
| |
| |-->0x0003FFFF-> SPL.backup1 end
| |-->0x00040000-> SPL.backup2 start (SPL copy on 3rd block)
| |
| |-->0x0005FFFF-> SPL.backup2 end
| |-->0x00060000-> SPL.backup3 start (SPL copy on 4th block)
| |
| |-->0x0007FFFF-> SPL.backup3 end
| |-->0x00080000-> U-Boot start
| |
| |-->0x002BFFFF-> U-Boot end
| |-->0x00260000-> ENV start
| |
| |
| |-->0x0027FFFF-> ENV end
| |-->0x00280000-> Linux Kernel start
| |
| |
| |-->0x0077FFFF-> Linux Kernel end
| |-->0x00780000-> File system start
| |
| |
+------------+-->0x10000000-> NAND end (Free end)
1.
先使用 SD卡启动 am335x,但不要进入到系统中。(SD,Switch SW3, SW3[5:1] ==> 10111 , 其他 pins 都设置为 0 (也就是 OFF). )
如下:
把 SD 中 的 SPL(MLO),u-boot.img 文件写入到 NAND FLASH 中。
把 SPL (MLO) 写入到 NAND 中 :
U-Boot# mmc rescan
U-Boot# mw.b 0x82000000 0xFF 0x20000
U-Boot# fatload mmc 0 0x82000000 MLO
U-Boot# nandecc hw 2
U-Boot# nand erase 0x0 0x20000
U-Boot# nand write.i 0x82000000 0x0 0x20000
把 u-boot.img 写入到 NAND 中:
U-Boot# mmc rescan
U-Boot# mw.b 0x82000000 0xFF 0x40000
U-Boot# fatload mmc 0 0x82000000 u-boot.img
U-Boot# nandecc hw 2
U-Boot# nand erase 0x80000 0x40000
U-Boot# nand write.i 0x82000000 0x80000 0x40000
执行到这里,没有发生任何错误。
2.
关闭 am335x。
转换成有 NAND 模式启动 am335x。(NAND,Switch SW3, SW3[5:1] ==> 10010 , 其他 pins 都设置为 0 (也就是 OFF). )
启动 am335x。
3.
发生异常,提示如下:
U-Boot SPL 2011.09 (Jun 23 2012 - 20:16:14)
Texas Instruments Revision detection unimplemented
spl: ERROR: This bootmode is not implemented - hanging### ERROR ### Please RESET the board ###
4.
解决方法:
打开文件:ti-sdk-am335x-evm/board-support/u-boot-2011.09-psp04.06.00.07/arch/arm/cpu/armv7/omap-common/spl_nand.c
修改函数:void spl_nand_load_image(void) // LINE 33
如下:
void spl_nand_load_image(void)
{
struct image_header *header;
/*@@ //修改前
switch (omap_boot_mode()) {
case NAND_MODE_HW_ECC:
debug("spl: nand - using hw ecc\n");
gpmc_init();
nand_init();
break;
default:
puts("spl: ERROR: This bootmode is not implemented - hanging");
hang();
}
@@*/
//修改后
debug("spl: nand - using hw ecc\n"); //@@
gpmc_init(); //@@
nand_init(); //@@
/*use CONFIG_SYS_TEXT_BASE as temporary storage area */
header = (struct image_header *)(CONFIG_SYS_TEXT_BASE);
保存。
5.
重新编译 uboot。 执行命令:#make O=am335x CROSS_COMPILE=arm-arago-linux-gnueabi- ARCH=arm am335x_evm
把生成的 MLO,u-boot.img 文件复制到 SD 卡中 替换原来的这两个文件。
重新执行 1.和2.。
启动 am335x。
显示如下:
完成!