移植环境:
主芯片:SAMSUNG s3c2440A
开发板:GT2440
uboot版本:u-boot1.1.6
NOR Flash型号:EN29LV160AB。
硬件连接原理图如下图所示:
EN29LV160支持半字、单字节访问方式。如上图Pin47BYTE#为high时,采用Word Mode。Flash芯片的地址线A0-A19与s3c2440地址线的ADDR1-ADDR20连接。因为Flash是half word访问模式,s3c2440是按照单字节方式访问。故地址线错位连接。这点在s3c2440的datasheet中有描述。例如当s3c2440读取地址0处的数据时,发送的地址为0000 0000 0000 0000 0000b,地址线错位连接后,Flash芯片接收的地址为0。当s3c2440读取地址1处的数据时,发送的地址为0000 0000 0000 0000 0001,地址线错位连接后,Flash芯片接收的地址依然为0。这样为的是解决存储单元不匹配的问题。
EN29LV160AB的扇区分配,datasheet描述如下:
Flexible sector architecture(复杂的扇区结构)
One 16-KByte、two 8-KByte、one 32-KByte and third-one 64-KByte sectors(byte mode)
One 8-KWord、two 4-KWord、One 16-KWord and third-one 32-KWord sectors(Word mode)
软件修改
在/include/configs/2440.h中,
//注释原程序采用的两块nor Flash的配置
#if 0
#define CONFIG_AMD_LV400 1 /* uncomment this if you have a LV400 flash */
#define CONFIG_AMD_LV800 1 /* uncomment this if you have a LV800 flash */
#endif
#define CONFIG_SYS_MAX_FLASH_BANKS 1 /* max number of memory banks */