打印
[ZLG-ARM]

LPC2214外接nandflash的读写问题

[复制链接]
2935|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hhmicro|  楼主 | 2007-2-25 19:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是LPC2214,外部FLASH是K9F2808U0C,使用的是 LPC2100的模板,程序写进去后,感觉,擦除,读写子程序都没有运行.怀疑是不是需要对某些相关寄存器或者模板的什么地方需要修改一下.
ncs0配置为8位总线
哪位高手能给我个指导!谢谢!
LPC2214外接nandflash的读写问题

相关帖子

沙发
hhmicro|  楼主 | 2007-2-26 13:40 | 只看该作者

补充源程序

现在用k9f1208接lpc2214
ale,cle 接到了i/o口上
时序正确
读id的程序和总线配置,我是用片内ram调试的

int main (void)
{// add user source code
    
    
    volatile uint16 *data;
    volatile unsigned  int *adder1;
    
    data=(uint16 *)0x80000000;
    adder1 =(uint32 *)0x81000000;
    
    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   
       IO0DIR = CA_LE;    
    
    
    IO0SET = (IO0SET|0x1000);
    IO0CLR = (IO0CLR|0x0800);
       
    *data =0x90;
        
        
    IO0SET = (IO0SET|0x0800);
    IO0CLR = (IO0CLR|0x1000);
    
    *data = 0x0;
    
    
    IO0CLR = (IO0CLR|0x1800);
    
    *adder1 = *data<<8;
    *adder1 |= *data;


总线的配置
;/* Define the Bus Speed */
BCFG0       EQU     0xFFE00000      ;// Control Word of BANK0 / CS0
BCFG1       EQU     0xFFE00004      ;// Control Word of BANK1 / CS1
BCFG2       EQU     0xFFE00008      ;// Control Word of BANK2 / CS2
BCFG3       EQU     0xFFE0000C      ;// Control Word of BANK3 / CS3

BCFG_08DEF    EQU        0x00000400      ;//  8Bit Bus
BCFG_16DEF    EQU        0x10000400      ;// 16Bit Bus
BCFG_32DEF    EQU        0x20000400      ;// 32Bit Bus


;//                             |    IDCY    |    WST1    |    WST2    
;//                             | Idle width | Read width | Write width
;//                             | 0x00 ~ 0x0f| 0x00 ~ 0x1f| 0x00~0x1f
BCFG_FLASH    EQU        (BCFG_08DEF | (0x0f<<00) | (0x0f<<05) | (0x0f<<11))   ;// For 90ns Flash
BCFG_PSRAM  EQU        (BCFG_16DEF | (0x0f<<00) | (0x0f<<05) | (0x0f<<11))   ;// For 70ns PSRAM
BCFG_CS2    EQU        (BCFG_16DEF | (0x0f<<00) | (0x1f<<05) | (0x1f<<11))   ;// Blank 
BCFG_CS3    EQU        (BCFG_16DEF | (0x01<<00) | (0x03<<05) | (0x03<<11))   ;// For Peripheral Equipment

使用特权

评论回复
板凳
zlgARM| | 2007-2-26 13:54 | 只看该作者

RE

给您两个链接参考:
https://bbs.21ic.com/club/bbs/list.asp?boardid=39&page=1&t=2434206&tp=%u5728%u7EBF%u8BF7%u6559zlgARM%u7B49%u8BF8%u4F4D%u5927%u867E%uFF0C2294%u8BBF%u95EE%u5916%u90E8%u5730%u5740%u7684%u95EE%u9898



https://bbs.21ic.com/club/bbs/list.asp?boardid=39&page=1&t=2431091&tp=%u7528H-JTAG%u70E7%u5199LPC2292%u7247%u5916SST39VF1601%u7684%u95EE%u9898%uFF0C%u5E2E%u5FD9%uFF0C555

使用特权

评论回复
地板
hhmicro|  楼主 | 2007-2-26 17:00 | 只看该作者

再补源程序,请zlgARM帮忙!

按照您给的链接看了,第一个帮助比较大
片外Flash为k9f1208,8位io的,64M;
RE  WE  ALE  CLE 分别接到CPU的OE  WE  P0.11(GPIO)   P0.12(GPIO)上;
CE通过CPLD接过来,CPLD的另一端也接的是CPU的NCS0;

/**********************************************************/
总线的配置
;/* Define the Bus Speed */
BCFG0       EQU     0xFFE00000      ;// Control Word of BANK0 / CS0
BCFG1       EQU     0xFFE00004      ;// Control Word of BANK1 / CS1
BCFG2       EQU     0xFFE00008      ;// Control Word of BANK2 / CS2
BCFG3       EQU     0xFFE0000C      ;// Control Word of BANK3 / CS3

BCFG_08DEF    EQU        0x00000400      ;//  8Bit Bus
BCFG_16DEF    EQU        0x10000400      ;// 16Bit Bus
BCFG_32DEF    EQU        0x20000400      ;// 32Bit Bus


;//                             |    IDCY    |    WST1    |    WST2    
;//                             | Idle width | Read width | Write width
;//                             | 0x00 ~ 0x0f| 0x00 ~ 0x1f| 0x00~0x1f
BCFG_FLASH    EQU        (BCFG_08DEF | (0x1f<<00) | (0x1f<<05) | (0x0f<<11))   ;// For 90ns Flash
BCFG_PSRAM  EQU        (BCFG_16DEF | (0x0f<<00) | (0x0f<<05) | (0x0f<<11))   ;// For 70ns PSRAM
BCFG_CS2    EQU        (BCFG_16DEF | (0x0f<<00) | (0x1f<<05) | (0x1f<<11))   ;// Blank 
BCFG_CS3    EQU        (BCFG_16DEF | (0x01<<00) | (0x03<<05) | (0x03<<11))   ;// For Peripheral Equipment

这里的RBLE为1;
ncs0接的是最慢的总线,为0x1f;
/**********************************************************/
PINSEL2的设置没有改过;用的是lpc2100模板

;初始化外部总线控制器,根据目标板决定配置

        LDR     R0, =PINSEL2
    IF :DEF: EN_CRP
        LDR     R1, =0x0f814910
    ELSE
        LDR     R1, =0x0f814914
    ENDIF
        STR     R1, [R0]
        
        LDR     R0, =BCFG0
        LDR     R1, =BCFG_FLASH
        STR     R1, [R0]

        LDR     R0, =BCFG1
        LDR     R1, =BCFG_PSRAM
        STR     R1, [R0]

        LDR     R0, =BCFG2
        LDR     R1, =BCFG_CS2
        STR     R1, [R0]

        LDR     R0, =BCFG3
        LDR     R1, =BCFG_CS3
        STR     R1, [R0]
        
        BL      InitStack               ;初始化堆栈 Initialize the stack
        BL      TargetResetInit         ;目标板基本初始化 Initialize the target board
                                        ;跳转到c语言入口 Jump to the entry point of C program
        B       __main


/***************************************************/
源程序,只写到了读芯片id,擦出和写入
#include "config.h"
//#define LED_ADDR        0x82000000;
#define        CA_LE                0x00001800    


void  DelayNS(uint32  dly)
{   uint32  i;

    for(; dly>0; dly--) 
    {
        for(i=0; i<5000; i++);
    }
}



int main (void)
{// add user source code
    
    
    
    volatile uint8 *data;
    //unsigned short int id;
    volatile unsigned  int *adder1;
    
    
    
    //unsigned int  id1,id2;
    
    data=(uint8 *)0x80000000;
    adder1 =(uint32 *)0x81000000;
    //adder2 =(uint32 *)0x81000008;
    //PINSEL2=((PINSEL2&0xf07fffff)|(0x38<<20));
    
    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   
    IO0DIR = CA_LE;    
    
    
    IO0SET = (IO0SET|0x1000);
    IO0CLR = (IO0CLR|0x0800);
    
    //for(;;)    
    *data =0x90;
        
        
    IO0SET = (IO0SET|0x0800);
    IO0CLR = (IO0CLR|0x1000);
    
    for(;;)
    *data = 0x0;
    
    
    IO0CLR = (IO0CLR|0x1800);
    
    
    //for(;;)
    
    *adder1 = *data<<8;
    *adder1 |= *data;
    
    for(;;);
    
    // _   *adder2 = *data;
    
    

/*****************************************************************************************************************/        
    
    
    int i;
    
    unsigned int block = 0x02;
    unsigned int blockpage = (block<<5);
    
    volatile uint8 *data;
    data=(uint8 *)0x80000000;
    
    
    
    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   
    IO0DIR = CA_LE;    
    
    
    
    IO0SET = (IO0SET|0x1000);
    IO0CLR = (IO0CLR|0x0800);
    
    //for(;;)
    *data = 0x60; //设置擦写模式 
    
    
    IO0SET = (IO0SET|0x0800);
    IO0CLR = (IO0CLR|0x1000);
    
    *data = (blockpage&0xff); // A9_A16,(Page Address) , 是基于块擦
    *data = ((blockpage>>8)&0xff); // A17_A24,(Page Address) 
    *data = ((blockpage>>16)&0xff); // A25, (Page Address) 
    
    IO0SET = (IO0SET|0x1000);
    IO0CLR = (IO0CLR|0x0800);
    
    *data = 0xd0; 
    
    for(i=0;i<10;i++);
    
    
    
/*****************************************************************************************************************/    




    int i;
    unsigned int block =0x00;
    unsigned int page =0x00;
    unsigned char a[528];
    unsigned int blockpage = (block<<5)+page;
    
    
    volatile uint16 *data;
    data=(uint16 *)0x80000000;
    
    PINSEL0 = 0x00000000;       // 设置管脚连接GPIO   
    IO0DIR = CA_LE;
    
    
    for(i=0;i<528;i++)
        a=0x55;
    
    
    IO0SET = (IO0SET|0x1000);
    IO0CLR = (IO0CLR|0x0800);
    
    *data = 0x0;                    // 从A区开始写 
    *data = 0x80;                // 写第一条命令 
    
    IO0SET = (IO0SET|0x0800);
    IO0CLR = (IO0CLR|0x1000);
    *data = 0;                    // A0_A7 位(Column Address) 
    *data = blockpage&0xff;        // A9_A16,(Page Address) 
    *data = (blockpage>>8)&0xff;    // A17_A24,(Page Address) 
    *data = (blockpage>>16)&0xff;// A25 (Page Address) 
    
            
    
    for(i=0;i<528;i++)
    {
        *data = a;
    }
    
    
    
    IO0SET = (IO0SET|0x1000);
    IO0CLR = (IO0CLR|0x0800);
    *data = 0x10;             // 结束写命令 

}


这个程序我是分为三部分(读id,擦出,写入)调试的,所以看上去有些重复定义;

还有我想向zlgARM请教,我向0X0000处擦出或写入,会不会影响芯片的ID,他不是就在0X0000处吗

使用特权

评论回复
5
grantxie| | 2007-3-18 14:36 | 只看该作者

NXP LPC2200+NAND参考设计

http://www.standardics.nxp.com/support/documents/microcontrollers/pdf/an10600.pdf
http://www.standardics.nxp.com/support/documents/microcontrollers/zip/code.lpc2200.nand.zip

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

5

帖子

0

粉丝