S3C2440 U-Boot移植--Norflash驅動支持- S29AL016U-Boot版本:2008.10 開發板:Mini2440

U-Boot版本:1.1.6  開發板:Mini2440 

之前根據國嵌的實驗手冊移植了很久都沒有成功,關鍵是國嵌手冊上的Norflash型號是SST1601,而我的Mini2440開發板上配置的是Spansion公司的S29AL016J芯片,兩者型號不同,修改的地方差異很大。後來通過在網上查資料發現S29AL016J芯片與smdk2410默認使用的芯片(AMD的AM29LV400)除了大小不一樣外,其他如命令序列,操作方式都是一樣的(也難怪在做完國嵌實驗手冊的2.4以後就可以進行環境變量的保存)。所以根據AM29LV400來移植的話所做的修改不多。

       查詢datasheet後,得到如下信息;

該Norflash芯片,分成35個扇區,(Bottom Boot Device)前4個扇區的大小分別爲16KB,8KB,8KB,32KB,後31個扇區的大小都是64K,加起來總共2MByte。芯片id爲0x2249,廠商id爲0x01。

根據Mini2440的原理圖得知Norflah的 A0引腳接在s3c2440的LADDR1上,所以爲字模式。

       另外由於在 include/flash.h中沒有找到Spansion的廠商id和S29AL016J芯片id的定義,而找到了如下的AMD廠商id和芯片id 的定義。

#define AMD_MANUFACT       0x00010001

`

`


#define AMD_ID_LV160B 0x22492249

正好與S29AL016J的廠商id和芯片id相同,那我們就可以直接根據AM29LV160B來移植。我們定義NORFLASH型號爲:AM29LV160。

 

修改板級配置:include/configs/mini2440.h

註釋掉AM29LV400和AM29LV800的定義,加入AM29LV160的定義:

/*delete by xxx,for 2440***************************************************************/

#if 0

#define CONFIG_AMD_LV4001     /* uncomment this if you have a LV400 flash */

#define CONFIG_AMD_LV8001     /* uncomment this if you have a LV800 flash */

#endif

/*add by zsf,for mini2440*/
#define CONFIG_AMD_LV160       1  //NOR FLASH S29AL016J
#define PHYS_FLASH_SIZE         0x00200000 /* 芯片大小2MB */
#define CFG_MAX_FLASH_SECT   (35)       /* 扇區數爲35 */
#define CFG_ENV_ADDR (CFG_FLASH_BASE + 0x1F0000) /* addr of environment 0x00000000+0x1f0000 向後預留64KB,1個扇區空間*/
//#define CONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE + CONFIG_ENV_OFFSET) /* 環境變量存放地址 */


 

修改 board/mini2440/flash.c

 

一:flash_init (void) 函數中

#if defined(CONFIG_AMD_LV400)
                     (AMD_MANUFACT &FLASH_VENDMASK) |
                     (AMD_ID_LV400B &FLASH_TYPEMASK);
#elif defined(CONFIG_AMD_LV1800)
                     (AMD_MANUFACT &FLASH_VENDMASK) |
                     (AMD_ID_LV800B &FLASH_TYPEMASK);

之後 加入

/*modified by xxxxxi ,for2440***********************************************/
#elif defined(CONFIG_AMD_LV160)
                     (AMD_MANUFACT &FLASH_VENDMASK) |
                     (AMD_ID_LV160B &FLASH_TYPEMASK); 

 

二:flash_print_info (flash_info_t *info)函數中

 在switch (info->flash_id & FLASH_VENDMASK)中將

printf ("AMD: ");

變更爲

printf("SPANSION:")

case (AMD_ID_LV400B &FLASH_TYPEMASK):
              printf ("1xAmd29LV400BB (4Mbit)\n");
              break;
case (AMD_ID_LV800B & FLASH_TYPEMASK):
              printf ("1xAmd29LV800BB (8Mbit)\n");
              break;

之後加入
/*add by zsf,for mini2440*/
case (AMD_ID_LV160B & FLASH_TYPEMASK):
printf ("1x S29AL016J[16Mbit(2MByte) ,Bottom Boot Device] \n");
break;

 

如此便完成了移植工作,重新編譯即可。


通過jlink下載到開發板測試:

MINI2440 # flinfo

Bank # 1: SPANSION: 1x S29AL016J[16Mbit(2MByte) ,Bottom Boot Device]

Size: 2 MB in 35 Sectors

 Sector Start Addresses:

   00000000      00004000      00006000      00008000      00010000    

   00020000      00030000      00040000      00050000      00060000    

   00070000      00080000      00090000      000A0000      000B0000    

   000C0000      000D0000      000E0000      000F0000      00100000    

   00110000      00120000      00130000      00140000      00150000    

   00160000      00170000      00180000      00190000      001A0000    

   001B0000      001C0000     001D0000      001E0000      001F0000    

MINI2440_Dazhi #

觀察到總共35個扇區,第一個扇區大小爲0x4000=16KB,第二個,第三個扇區大小爲0x2000=8KB,第四個扇區大小爲0x80000=32KB,剩下31個扇區大小都爲0x10000=64KB,與芯片實際情況相同。

 

測試寫保護:

MINI2440 # protect on 4000 5ffff

Protected 8 sectors

MINI2440_Dazhi # flinfo

Bank # 1: SPANSION:1x S29AL016J (16Mbit)

  Size:2 MB in 35 Sectors

 Sector Start Addresses:

   00000000      00004000 (RO)00006000 (RO) 00008000 (RO) 00010000 (RO)

   00020000 (RO) 00030000 (RO) 00040000 (RO) 00050000 (RO) 00060000    

   00070000      00080000      00090000      000A0000      000B0000    

    000C0000     000D0000      000E0000      000F0000      00100000    

   00110000      00120000      00130000      00140000      00150000    

   00160000      00170000      00180000      00190000      001A0000    

   001B0000      001C0000     001D0000      001E0000      001F0000    

與理論相同,正確。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章