07
08 #if (CONFIG_COMMANDS & CFG_CMD_NAND) && !defined(CFG_NAND_LEGACY)
09 #include <s3c2410.h>
10 #include <nand.h>
11
12 DECLARE_GLOBAL_DATA_PTR;
13
14 #define S3C2410_NFSTAT_READY (1<<0)
15 #define S3C2410_NFCONF_nFCE (1<<11)
16
17 #define S3C2440_NFSTAT_READY (1<<0)
18 #define S3C2440_NFCONT_nFCE (1<<1)
19
20
21 /* S3C2410:NAND Flash的片选函数 */
22 static void s3c2410_nand_select_chip(struct mtd_info *mtd, int chip)
23 {
24 S3C2410_NAND * const s3c2410nand = S3C2410_GetBase_NAND();
25
26 if (chip == -1) {
27 s3c2410nand->NFCONF |= S3C2410_NFCONF_nFCE;/* 禁止片选信号 */
28 } else {
29 s3c2410nand->NFCONF &= ~S3C2410_NFCONF_nFCE;/* 使能片选信号 */
30 }
31 }
32
33 /* S3C2410:命令和控制函数
34 *
35 * 注意,这个函数仅仅根据各种命令来修改“写地址”IO_ADDR_W 的值(这称为tglx方法),
36 * 这种方法使得平台/开发板相关的代码很简单。
37 * 真正发出命令是在上一层NAND Flash的统一的驱动中实现,
38 * 它首先调用这个函数修改“写地址”,然后才分别发出控制、地址、数据序列。
39 */
40 static void s3c2410_nand_hwcontrol(struct mtd_info *mtd, int cmd)
41 {
42 S3C2410_NAND * const s3c2410nand = S3C2410_GetBase_NAND();
43 struct nand_chip *chip = mtd->priv;
44
45 switch (cmd) {
46 case NAND_CTL_SETNCE:
47 case NAND_CTL_CLRNCE:
48 printf("%s: called for NCE\n", __FUNCTION__);
49 break;
50
51 case NAND_CTL_SETCLE:
52 chip->IO_ADDR_W = (void *)&s3c2410nand->NFCMD;
53 break;
54
55 case NAND_CTL_SETALE:
56 chip->IO_ADDR_W = (void *)&s3c2410nand->NFADDR;
57 break;
58
59 /* NAND_CTL_CLRCLE: */
60 /* NAND_CTL_CLRALE: */
61 default:
62 chip->IO_ADDR_W = (void *)&s3c2410nand->NFDATA;
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-66092-27.html
让得意的人有一丝谦卑和体会生命的失意