u-boot移植2:支持 nandflash 的读写
发布时间:2020-12-15 20:04:51 所属栏目:百科 来源:网络整理
导读:u-boot 版本:2016.03 用的交叉编译工具:arm-none-linux-gnueabi- 操作的文件: drivers/mtd/nand/s3c2440_nand.c 1. 修改 s3c2440 的 nandflash 的控制器 : @@?-11,17?+11,17?@@ ?#include?asm/arch/s3c24x0_cpu.h ?#include?asm/io.h -#define?S3C2440_N
u-boot 版本:2016.03
用的交叉编译工具:arm-none-linux-gnueabi-
操作的文件:
drivers/mtd/nand/s3c2440_nand.c
1. 修改 s3c2440 的 nandflash 的控制器:
@@?-11,17?+11,17?@@
?#include?<asm/arch/s3c24x0_cpu.h>
?#include?<asm/io.h>
-#define?S3C2440_NFCONF_EN??????????(1<<15)
-#define?S3C2440_NFCONF_512BYTE?????(1<<14)
-#define?S3C2440_NFCONF_4STEP???????(1<<13)
-#define?S3C2440_NFCONF_INITECC?????(1<<12)
-#define?S3C2440_NFCONF_nFCE????????(1<<11)
-#define?S3C2440_NFCONF_TACLS(x)????((x)<<8)
-#define?S3C2440_NFCONF_TWRPH0(x)???((x)<<4)
-#define?S3C2440_NFCONF_TWRPH1(x)???((x)<<0)
-
-#define?S3C2440_ADDR_NALE?4
-#define?S3C2440_ADDR_NCLE?8
+#define?S3C2440_NFCONT_SECCL??????????(1<<6)
+#define?S3C2440_NFCONT_MECCL??????????(1<<5)
+#define?S3C2440_NFCONT_INITECC????????(1<<4)
+#define?S3C2440_NFCONT_nCE????????????(1<<1)
+#define?S3C2440_NFCONT_MODE???????????(1<<0)
+#define?S3C2440_NFCONF_TACLS(x)???????((x)<<12)
+#define?S3C2440_NFCONF_TWRPH0(x)??????((x)<<8)
+#define?S3C2440_NFCONF_TWRPH1(x)??????((x)<<4)
+
+#define?S3C2440_ADDR_NALE?0x08
+#define?S3C2440_ADDR_NCLE?0x0c
?#ifdef?CONFIG_NAND_SPL
2. 修改?s3c24x0_hwcontrol():
说明:
@@?-53,13?+53,16?@@?static?void?s3c24x0_hwcontrol(struct?mtd_info?*mtd,?int?cmd,?unsigned?int?ctrl)
????????????????if?(!(ctrl?&?NAND_ALE))
????????????????????????IO_ADDR_W?|=?S3C2440_ADDR_NALE;
-???????????????chip->IO_ADDR_W?=?(void?*)IO_ADDR_W;
+????????if?(cmd?==?NAND_CMD_NONE)
+????????????IO_ADDR_W?=?(ulong)&nand->nfdata;
+????????
+????????chip->IO_ADDR_W?=?(void?*)IO_ADDR_W;
????????????????if?(ctrl?&?NAND_NCE)
-???????????????????????writel(readl(&nand->nfconf)?&?~S3C2440_NFCONF_nFCE,
+???????????????????????writel(readl(&nand->nfconf)?&?~S3C2440_NFCONT_nCE,
???????????????????????????????&nand->nfconf);
????????????????else
-???????????????????????writel(readl(&nand->nfconf)?|?S3C2440_NFCONF_nFCE,
+???????????????????????writel(readl(&nand->nfconf)?|?S3C2440_NFCONT_nCE,
???????????????????????????????&nand->nfconf);
????????}
3.?和?board_nand_init() 函数:
说明:
@@?-125,17?+128,21?@@?int?board_nand_init(struct?nand_chip?*nand)
????????twrph0?=?CONFIG_S3C24XX_TWRPH0;
????????twrph1?=??CONFIG_S3C24XX_TWRPH1;
?#else
-???????tacls?=?4;
-???????twrph0?=?8;
-???????twrph1?=?8;
+???????tacls?=?2;
+???????twrph0?=?3;
+???????twrph1?=?1;
?#endif
-???????cfg?=?S3C2440_NFCONF_EN;
-???????cfg?|=?S3C2440_NFCONF_TACLS(tacls?-?1);
+???????cfg?=?S3C2440_NFCONF_TACLS(tacls?-?1);
????????cfg?|=?S3C2440_NFCONF_TWRPH0(twrph0?-?1);
????????cfg?|=?S3C2440_NFCONF_TWRPH1(twrph1?-?1);
????????writel(cfg,?&nand_reg->nfconf);
+????cfg?=?S3C2440_NFCONT_SECCL;
+????cfg?|=?S3C2440_NFCONT_MECCL;
+????cfg?|=?S3C2440_NFCONT_MODE;
+???????writel(cfg,?&nand_reg->nfcont);
+
????????/*?initialize?nand_chip?data?structure?*/
????????nand->IO_ADDR_R?=?(void?*)&nand_reg->nfdata;
????????nand->IO_ADDR_W?=?(void?*)&nand_reg->nfdata;
4. 验证:
思路:
U-Boot 2016.03-00001-g79e6686-dirty (May 05 2016 - 14:40:05 +0800)
CPUID: 32440001
FCLK: ? ? ?400 MHz
HCLK: ? ? ?100 MHz
PCLK: ? ? ? 50 MHz
DRAM: ?64 MiB
WARNING: Caches not enabled
Flash: 2 MiB
NAND: ?256 MiB
*** Warning - bad CRC,using default environment
In: ? ?serial
Out: ? serial
Err: ? serial
Net: ? CS8900-0
Error: CS8900-0 address not set.
LIP2440?#?nand?info
Device?0:?nand0,?sector?size?128?KiB
??Page?size???????2048?b
??OOB?size??????????64?b
??Erase?size????131072?b
??subpagesize??????512?b
??options?????0x????1008
??bbt?options?0x????8000
LIP2440 #?
nand device 0
LIP2440 #?
nand erase 100000 300000
NAND erase: device 0 offset 0x100000,size 0x300000
Erasing at 0x3e0000 -- 100% complete.
OK
LIP2440 #?
nand write 0 100000 300000
NAND write: device 0 offset 0x100000,size 0x300000
?3145728 bytes written: OK
LIP2440 #?
nand read 30004000 100000 300000
NAND read: device 0 offset 0x100000,size 0x300000
?3145728 bytes read: OK
LIP2440 #?
md.b 0
00000000: be 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ? ?................
00000010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ? ?................
00000020: 60 00 00 00 c0 00 00 00 20 01 00 00 80 01 00 00 ? ?`....... .......
00000030: e0 01 00 00 40 02 00 00 a0 02 00 00 ef be ad de ? ?....@...........
LIP2440 #?
md.b 30004000
30004000: be 00 00 ea 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ? ?................
30004010: 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 14 f0 9f e5 ? ?................
30004020: 60 00 00 00 c0 00 00 00 20 01 00 00 80 01 00 00 ? ?`....... .......
30004030: e0 01 00 00 40 02 00 00 a0 02 00 00 ef be ad de ? ?....@...........
LIP2440 #?
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |