BANK6外接两片容量为32MB、位宽为16的SDRAM芯片K4S561632,组成容量为64MB、位宽为32的内存
通过NAND Flash控制器外接容量为64MB,位宽为8的NAND Flash芯片K9S1208
对于NOR Flash和NAND
Flash,如图15.4所示划分它们的使用区域。由于NAND
Flash的“位反转”现象比较常见,为保证数据的正确,在读写数据时需要使用ECC较验。另外,NAND
Flash在使用过程中、运输过程中还有可能出现坏块。所以本书选择在NOR Flash中保存U-Boot,在NAND
Flash中保存内核和文件系统,并在使用U-Boot烧写内核、文件系统时,进行坏块检查、ECC较验。这样,即使NAND
Flash出现坏块导致内核或文件系统不能使用,也可以通过NOR Flash中的U-Boot来重新烧写。 [[Image:]]
图15.4 开发板固态存储器分区划分
smdk2410开发板已经支持NOR
Flash芯片AM29LV800,U-Boot本身也已经支持jffs2文件系统映像的烧写。下面一步一步移植U-Boot(所有的修改都在补丁文件
u-boot-1.1.6_100ask24x0.patch里,读者可以直接打补丁),增加如下新功能:
同时支持本书使用的S3C2410和S3C2440开发板
支持串口xmodem协议
支持网卡芯片CS8900
支持NAND Flash读写
支持烧写yaffs文件系统映像
1. 同时支持S3C2410和S3C2440
我们将在开发板smdk2410的基础上进行移植。
(1)新建一个开发板的相应目录和文件。
为了不破坏原来的代码,在board目录下将smdk2410复制为100ask24x0目录,并将board/100ask24x0/smdk2410.c改名为100ask24x0.c。
根据前面描述的配置过程可知,还要在include/configs目录下建立一个配置文件100ask24x0.h,可以将include/configs/smdk2410.h直接复制为100ask24x0.h。
还要修改两个Makefile,首先在顶层Makefile中增加如下两行:
100ask24x0_config:unconfig
@$(MKCONFIG) $(@:_config=) arm arm920t 100ask24x0 NULL s3c24x0
然后在board/100ask24x0/Makefile中,如下修改(因为前面将smdk2410.c文件改名为100ask24x0.c了):
COBJS:= smdk2410.o flash.o
改为:
COBJS:= 100ask24x0.o flash.o
(2)修改SDRAM的配置。
SDRAM的初始化在U-Boot的第一阶段完成,就是在board/100ask24x0/lowlevel_init.S文件中设置存储控制器。
检查一下BANK6的设置:位宽为32——宏B6_BWSCON刚好为DW32(表示32位),无需改变;另外还要根据HCLK设置SDRAM的刷新参数,主要是REFCNT寄存器。
本书所用开发板的HCLK都设为100MHz,需要根据SDRAM芯片的具体参数重新计算REFCNT寄存器的值(请参考第6章)。代码修改如下:
126 #define REFCNT 1113/* period=15.6us, HCLK=60Mhz, (2048+1-15.6*60) */
改为
126 #define REFCNT 0x4f4/* period=7.8125us, HCLK=100Mhz, (2048+1-7.8125*100) */
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66092-16.html
正因为如此
到处流窜
三国演义都没看过吧