第一步:下载源代码
从下面的网址中下载最新的代码:
ftp://www.at91.com/pub/at91bootstrap/
第二步:
开发板的硬件:
CPU AT91SAM9260
SDRAM MT48LC16M 1片(32MB 16bit)
NANDFLASH K9F1208U0c(64MB)
BOOTSTRAP
针对我板子对BootStrap进行了如下修改。
一、因为我用的sdram是32M的,用了13根地址线,所以AT91C_SDRAMC_NR_13就不用改了,如果为12条,则要改为AT91C_SDRAMC_NR_12。但是我们的SDARM的数据线是16位,所以要把AT91C_SDRAMC_DBW_32_BITS,改为AT91C_SDRAMC_DBW_16_BITS(at91sam9260ek.c)
sdram_init(
AT91C_SDRAMC_NC_9 |
AT91C_SDRAMC_NR_13 |
AT91C_SDRAMC_CAS_2 |
AT91C_SDRAMC_NB_4_BANKS |
AT91C_SDRAMC_DBW_16_BITS |
AT91C_SDRAMC_TWR_2 |
AT91C_SDRAMC_TRC_7 |
AT91C_SDRAMC_TRP_2 |
AT91C_SDRAMC_TRCD_2 |
AT91C_SDRAMC_TRAS_5 |
AT91C_SDRAMC_TXSR_8,
(MASTER_CLOCK *7)/1000000);
二、将nand_ids.h中的nandflash参数改成{0xec75, 0x800, 0x4000, 0x200, 0x10, 0x0, “Samsung K9F5608U0M32MB\0”}
{0xec76,0x1000, 0x4000, 0x200, 0x10, 0x0, “Samsung K9F1208U0B 64Mb\0”},
{0xecdc, 0x1000, 0x20000, 0x800, 0x40, 0x0, “Samsung K9F4G08U0M512Mb\0”},
ID 0xecdc
块的数量 set nf(nandNbBlocks) 0x1000
块的大小 set nf(nandBlockSize) 0x20000
簇的大小 setnf(nandSectorSize) 0x800
闲置空间 set nf(nandSpareSize) 0x40
总线宽度 set nf(nandBusWidth) 0
三、将JUMP_ADDR(board/at91sam9260ek/nandflash/at91sam9260ek.h)的值由23F00000改成21F80000。在高版本中,如3.2中,是在根目录下的Config.in中修改的。(U-BOOT跳转地址)
编译: makeat91sam9260ek_defconfig
make
默认为:dateflash 模式
这时可以用make menuconfig进入配置菜单,来定制,如下图
在这里说话一点,不要选择debug功能,这样只会加大目录文件的大小,我们可以自己写一下printf函数,但一直有一个疑问,就是不能在对nand的操作中用printf,如果调用,就会出现
nand_scan(): Cannot allocate oob_buf;
也可以通过下面的命令来配置:
$ make MEMORY=nandflash at91sam9260ek_defconfig
$make
生成bin文件:binaries/at91sam9260ek-nandflashboot-3.2.bin