微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > ARM技术讨论 > 貌似nand flash 擦除失败,求解!

貌似nand flash 擦除失败,求解!

时间:10-02 整理:3721RD 点击:
裸机跑nand flash.可以在原本为FF的地方写入,读出。但再次往相同地方写入时就写不正确,只有原来为‘1’的bit改写成功。例如原本写入了0xef(1110 1111),可以改为0xab(1010 1011),要改为0xcd(1100 1101)就失败了,变成了0x89(1000 1001);求大神解答!

芯片是s5pv210,K9K8G08U0B
程序如下:  自己写的裸机程序,下面的是nand flash 部分。
#define u32 volatile unsigned long
//-->For nand flash register address
#define MP0_3con        *((u32*)0xe0200320)
#define MP0_1con        *((u32*)0xe02002e0)
#define NFCONF                *((u32*)0xb0e00000)
#define NFCONT                *((u32*)0xb0e00004)
#define NFCMD                *((u32*)0xb0e00008)
#define NFDATA                *((volatile unsigned char*)0xb0e00010)
#define NFADDR                *((u32*)0xb0e0000c)
#define NFSTAT                *((u32*)0xb0e00028)
//--<For nand flash register address
#define tacls        4
#define twrph0        3
#define        twrph1  2
#define NF_en_on NFCONT &= ~(1<<1)  //enable nand flash chip select
#define NF_en_off NFCONT |= (1<<1)  //disable nand flash chip select
//---->For uart put char&str
#define UTRSTAT0    *((volatile unsigned long*)0xE2900010)
#define UTXH0       *((volatile unsigned long*)0xE2900020)
void put_char(char c)
{
        while(!(UTRSTAT0 & (1 << 1))) ;        //绛夊緟涓插彛缂撳瓨绌洪棽
        if((UTRSTAT0 & (1<<1))==(1<<1))        //濡傛灉绌洪棽锛屽垯杩涘叆瀛楃鎵撳嵃
        {
                while(!(UTRSTAT0 & (1 << 1))) ;//绛夊緟绌洪棽
                UTXH0 = c;                        //鍚戠紦瀛樺彂閫佸瓧绗?                while(!(UTRSTAT0 & (1 << 1))) ;//绛夊緟绌洪棽
        }
}
void put_str(char *p)
{
        int i;
        for(i=0;*(p+i);i++)        //濡傛灉*(p+i)涓嶆槸'\0'锛屽垯鎵撳嵃瀛楃
        {
                put_char(p[i]);
        }
}
//----<For uart put char&str

void put_hex(u32 reg,char b)
{
        int i ;
        char c;
        for(i=b-1;i>=0;i--)
        {
                c=(reg>>(4*i))&0xf;
                if(c<10)
                {c +=0x30;        put_char(c);}
                else
                {c +=0x37;        put_char(c);}
        }       
        put_str("\t");
}
void NF_init()
{
        MP0_3con &= ~0xfffff;
        MP0_3con |= 0x22222;        //GPIO澶嶇敤锛岄

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top