历史上的今天
返回首页

历史上的今天

今天是:2025年04月26日(星期六)

2019年04月26日 | S3C2440开发板裸机程序系列07—NAND FLASH存储器

2019-04-26 来源:eefocus

1.     概述


我的TQ2440开发板上安装有2M的NOR FLASH和512M的NAND FLASH。


NOR FLASH 的特点是芯片内执行(XIP, eXecute In Place),应用程序可以直接在 NOR FLASH 里运行,不必再把代码读到系统RAM中(可以节约SRAM的成本)。NOR的传输效率很高,在1~4MB的小容量时具有很高的成本效益,但是很低的写入和擦除速度大大影响了它的性能。


NAND FLASH的特点是有很高的存储密度,并且写入和擦除速度也很快,但是无法直接寻址运行程序,接口上需要专门的控制器。另外NAND FLASH 非常容易出现坏区,所以需要有校验的算法。


因此,NOR FLASH一般保存启动代码和系统固件,相当于BISO。NAND FLASH用于存储数据,相当于硬盘。


可参照这篇文章: 


RAM、NAND Flash、NOR Flash的区别详解


 下面从硬件连接、NANDFLASH内部结构、读写操作、控制器寄存器设置、编程例子等几个方面进行展开。


2.     NANDFLASH的硬件连接


我的TQ2440开发板上的NAND FLASH型号是K9F4G08U0B,最后的B代表第3代--3rd Generation。


NAND FLASH的命名规则详见: Nand Flash 命名规则  


硬件连接关系如下图所示。


   


GPA接口复用如下:



经查” TQ2440_V2核心板原理图”,GPA21未连接,如下图:



S3C2440提供OM[1:0],NCON,GPG13,GPG14,GPG15这5个信号来选择NAND FLASH启动,参见S3C2440中文手册,可知:



TQ2440核心板提供的连接关系:



由上图可知,电阻NR5未焊接,即NCON与GND是断路,所以:NCON=1,GPG13=1,GPG14=1,GPG15=0。即,先进NAND Flash,每个页面2K字节,需要5个地址周期,8位宽度。


3.     NANDFLASH内部组织结构


如下图所示:



由上图可知K9F4G08结构:


共4096个块,每个块有64个页,因此共有4096x64 = 256K 个页,每个页有效存储数据是2K字节,因此总共有效存储容量512M字节。


访问一个数据需要共5个周期(Cycle):


第1,2个周期访问列(A0—A11),即访问页内,2^11=2K


第3,4,5个周期访问行(A12—A29),即访问块, 2^(29-11)=2^18=256K。


具体到程序代码中是这样:


NF_Send_Addr(0x00); 

NF_Send_Addr(0x00); 

NF_Send_Addr((page_number) & 0xff); 

NF_Send_Addr((page_number >> 8) & 0xff); 

NF_Send_Addr((page_number >> 16) & 0x3); 

分5个周期。因为读写一般是按页为单位进行,所以前2行发0x00,后面3行把页号分3次发到A12--A19上。


4.     读写操作


对NAND FLASH的访问操作(读,写,擦除)可按照下面的步骤:


a.发送命令:是哪种操作,读,写,擦除?


b.发送地址:对哪一个地址操作


c. 发送数据。



5.     控制器寄存器设置


简单读写编程需要设置的寄存器包括:


GPACON : 将GPA17—GPA22设置为NAND FLASH控制器信号;

NFCONF : 主要确定TACLS、TWRPH0、TWRPH1的值;

NFCONT:用于开启NAND FLASH控制器,设置是否使能软件上锁;

NFCMD:用于写入命令;

NFADDR:用于写入要访问的地址;

NFDATA:要写入的数据放到这里;

NFSTAT: 用于检测NAND FLASH是否处于忙状态。

对于GPACON设置如下 (虽然GPA21未用到):


rGPACON &=~(0X3F << 17) ;

rGPACON |= (0X3F<< 17) ;

对于NFCONF,需要了解各参数对应关系。 S3C2440手册中如下图:



NAND FLASH的datasheet的时序关系:


由上图可知,TWRPH0 = tWP ,TWRPH1 = tCLH(= tALH)


  


例程中,FCLK=200MHz,HCLK=100MHz,PCKL=50MHz,因此:


tCLH = 5ns,Duration = 10ns *(TWRPH1+1)   ==> TWRPH1=0


tWP = 12ns,Duration = 10ns *(TWRPH0+1) = 12min  ==> TWRPH0>=1即可


tCLS - tWP = TACLS= 0ns,==> TACLS>=0,取TACLS=1.


 


NFCONT控制的第0位



NFCMMD



 NFADDR



NFDATA(只使用了低8位)



NFSTAT



 定义如下宏定义:


#define NF_Send_Cmd(cmd)   {rNFCMD  = (cmd); }


#define NF_Send_Addr(addr)  {rNFADDR = (addr); }


#define NF_Send_Data(data)  {rNFDATA8 = (data); }      


#define NF_Enable()                            {rNFCONT &= ~(1<<1); }           //nand flash控制器使能


#define NF_Disable()                 {rNFCONT |= (1<<1); }


#define NF_Enable_RB()           {rNFSTAT |= (1<<2); }                  //开启RnB监视模式;


#define NF_Check_Busy()                  {while(!(rNFSTAT&(1<<0)));} 


#define NF_Read_Byte()          (rNFDATA8)


 


6.     读器件ID程序


读器件ID的命令是90H,接下来5个周期读到产品信息码:




 

 


由上图可知,发送Address后有一个tREA延时。


读ID的程序如下:


void NF_ReadID(unsigned char *buf)

{

int i;

 

NF_Enable();    

NF_Enable_RB();

NF_Send_Cmd(CMD_READID); // read id command

NF_Send_Addr(0x0);

for ( i = 0; i < 100; i++ );


        *buf = NF_Read_Byte();

*(buf+1) = NF_Read_Byte();

*(buf+2)    = NF_Read_Byte();

*(buf+3) = NF_Read_Byte();

*(buf+4) = NF_Read_Byte();

NF_Disable();

}

主程序如下:


 


#define ESC_KEY 0x1b

unsigned char table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,

0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};


int Main()

{

int i;

unsigned char key ;

unsigned char nandID[5];


Uart0_Init(115200);


NF_Init();

NF_ReadID(nandID);


Uart0_Printf( "nNand Flash ID:n" );

for(i=0;i<5;i++){

Uart0_Putc(table[nandID[i]>>4]);

Uart0_Putc(table[nandID[i]&0x0f]);

Uart0_Printf(" t");

}


Uart0_Printf( "nPress 'ESC' key to Exi n" );

while(1)

{

key = Uart0_Getc();

if( key == ESC_KEY ) { return 1; }

}

return 0;

}


7.     写入/读出 一个Block


先向第17个Block写入00—FF,然后把第17个Block中的数据读出来,并从串口0输出。


主程序如下: 


#define ESC_KEY 0x1b

unsigned char table[]={0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,

0x38,0x39,0x41,0x42,0x43,0x44,0x45,0x46};


int Main()

{

unsigned char key ;

unsigned char srcbuf[2048],dstbuf[2048] ;

unsigned int i=1 ;


Uart0_Init(115200);

NF_Init();


for(i = 0 ; i < 2048 ; i++)

{

srcbuf[i] = i ;

}


NF_EraseBlock(17) ;


Uart0_Printf( "nWrite 0-FF to block[17] of NandFlash n" );

NF_WritePage(17,4,srcbuf) ;


Uart0_Printf( "nRead block[17] of NandFlash :n" );

NF_ReadPage(17,4, dstbuf);


for(i = 0 ; i < 2048 ; i++)

{

Uart0_Putc(table[dstbuf[i]/16]) ;

Uart0_Putc(table[dstbuf[i]%16]) ;

Uart0_Putc(' ') ;

}

Uart0_Printf( "nPress 'ESC' key to Exi n" );

while(1)

{

key = Uart0_Getc();

if( key == ESC_KEY ){ return 1; }

}

return 0 ;

}


推荐阅读

史海拾趣

ABOV(现代单片机)公司的发展小趣事

ABOV(现代单片机)是一家韩国的半导体公司,以下是该公司发展的五个相关故事:

  1. 公司成立和初期发展: ABOV公司成立于1997年,总部位于韩国首尔。公司专注于设计、制造和销售嵌入式系统解决方案,主要产品包括微控制器(MCU)和嵌入式闪存等。成立初期,ABOV致力于技术创新和产品研发,建立起一支技术精湛的研发团队。

  2. 技术创新和产品推出: ABOV在技术创新方面投入了大量资源,不断推出新产品和解决方案。公司的现代单片机产品以其高性能、低功耗和丰富的功能而闻名。ABOV还在嵌入式闪存技术方面取得了重大突破,推动了嵌入式系统的发展和普及。

  3. 市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,ABOV积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的现代单片机产品被广泛应用于消费电子、汽车电子、工业控制等领域,赢得了客户的信赖和认可。

  4. 持续投入研发和创新: ABOV持续投入研发,并不断提升产品性能和功能。公司注重与客户的密切合作,根据客户需求进行定制化开发,为客户提供个性化的解决方案。ABOV还与学术机构和合作伙伴合作,共同推动技术创新和产业发展。

  5. 未来展望和发展方向: ABOV将继续致力于技术创新和产品升级,加强在嵌入式系统领域的研发和应用。公司将继续拓展国际市场,加强与客户和合作伙伴的合作,推动现代单片机技术的发展和普及,为全球的电子行业做出更大的贡献。

Anderson Power公司的发展小趣事

Anderson Power是一家专注于电源连接器和配件制造的公司,以下是该公司发展的相关故事:

  1. 公司成立与初期阶段:Anderson Power成立于1953年,总部位于美国马萨诸塞州斯特林。最初,公司主要从事电源连接器的制造和销售。公司的创始人是William E. Anderson,他在创立公司之初便致力于提供高质量、可靠的连接器产品,满足不断增长的市场需求。

  2. 技术创新与产品发展:随着市场的需求不断增长,Anderson Power不断进行技术创新和产品开发,推出了一系列新型的电源连接器和配件产品。公司在连接器设计和制造方面拥有丰富的经验和专业知识,能够根据客户的需求定制各种类型的连接器产品。

  3. 客户合作与市场拓展:Anderson Power与全球各个行业的客户建立了长期稳定的合作关系。公司的客户群涵盖了汽车、航空航天、工业、能源等多个领域。通过与客户的紧密合作,Anderson Power不断拓展市场份额,提升品牌知名度,成为电源连接器领域的领先供应商之一。

  4. 全球布局与生产基地:为了更好地服务全球客户,Anderson Power在全球建立了多个生产基地和销售办事处。除了在美国的总部外,公司还在欧洲、亚洲等地区设立了生产工厂和销售办事处,以满足不同地区客户的需求。这些生产基地拥有先进的设备和技术,能够为客户提供高质量的连接器产品。

  5. 持续发展与未来展望:作为一家专注于电源连接器的公司,Anderson Power将继续致力于技术创新和产品发展。公司将不断推出适应市场需求的新产品,提升生产效率和产品质量,以满足客户不断变化的需求。同时,Anderson Power也将继续关注行业的发展趋势和技术变革,不断调整战略,保持在行业内的竞争优势。

FutureWafer公司的发展小趣事

对于冷热饮水机电路及家用电器电路,网友可能提出多种问题。以下是一些可能的问题及详细回答:

一、冷热饮水机电路相关问题

  1. 冷热饮水机的工作原理是什么?

    回答:冷热饮水机的工作原理主要分为加热和制冷两部分。加热部分通过电加热元件(如电炉丝)对水进行加热,当水温达到设定温度时,温控器自动切断电源,进入保温状态。制冷部分则通常利用半导体制冷技术,通过半导体制冷片对冷水进行降温,同时散热风扇帮助散热,以保持冷水的温度。

  2. 冷热饮水机为何会出现不加热的故障?

    回答:冷热饮水机不加热的故障可能由多种原因引起,包括但不限于:

    • 加热元件(如电炉丝)损坏或烧毁。
    • 温控器故障,导致无法正确感知水温或无法切断电源。
    • 电源线路问题,如插头松动、保险丝熔断等。
    • 加热控制电路故障,如继电器、微处理器等元件损坏。
  3. 冷热饮水机制冷效果不佳怎么办?

    回答:如果冷热饮水机制冷效果不佳,可以尝试以下解决方法:

    • 检查半导体制冷片和散热风扇是否工作正常,如有损坏需更换。
    • 清理饮水机内部的灰尘和杂物,确保空气流通顺畅。
    • 检查制冷控制电路是否有问题,如温控器、继电器等元件是否工作正常。
    • 如果以上方法均无效,可能是制冷剂泄漏或制冷系统其他部件故障,需请专业人员维修。
  4. 如何判断冷热饮水机的电路是否损坏?

    回答:判断冷热饮水机的电路是否损坏,可以通过以下步骤进行:

    • 检查电源插头和插座是否接触良好,电源是否正常。
    • 使用万用表等工具检查电路中的保险丝、继电器、微处理器等元件是否损坏。
    • 观察饮水机的指示灯和显示屏是否正常显示,以判断控制电路是否工作正常。
    • 如果以上检查均正常,但饮水机仍无法正常工作,可能是电路中存在隐性故障或需要更专业的检测手段。

二、家用电器电路相关问题

  1. 家用电器电路的常见故障有哪些?

    回答:家用电器电路的常见故障包括但不限于:

    • 电源故障,如插头松动、保险丝熔断等。
    • 控制电路故障,如遥控器失灵、控制面板按键无反应等。
    • 电机或压缩机故障,如电机不转、压缩机不制冷等。
    • 传感器故障,如温度传感器失灵导致温度控制不准确。
    • 电路板损坏,如电路板上的元件烧毁或短路。
  2. 如何预防家用电器电路故障?

    回答:预防家用电器电路故障可以从以下几个方面入手:

    • 定期清洁家用电器,避免灰尘和杂物积累导致散热不良或短路。
    • 使用合格的电源线和插座,避免使用劣质产品导致电路故障。
    • 注意家用电器的使用环境,避免潮湿、高温等恶劣环境对电路造成损害。
    • 不要超负荷使用家用电器,避免长时间连续工作导致电路过热或损坏。
    • 定期检查家用电器的电路和元件是否完好,如有问题及时维修或更换。
  3. 家用电器电路维修需要注意哪些事项?

    回答:家用电器电路维修需要注意以下事项:

    • 在维修前务必切断电源,避免触电危险。
    • 使用合适的工具和设备进行维修,避免损坏其他部件或造成更大的故障。
    • 在维修过程中要仔细检查电路和元件的损坏情况,避免遗漏或误判。
    • 对于不熟悉或复杂的电路故障,应请专业人员进行维修。
    • 维修完成后要进行测试,确保家用电器能够正常工作并符合安全要求。
E-Mark Inc公司的发展小趣事

DEF公司是一家跨国电子企业,在欧洲和中国都有生产基地。为了提升产品竞争力,DEF公司决定将其中国生产基地的产品进行E-Mark认证。通过跨国合作和技术交流,DEF公司成功地将中国生产的产品提升到符合欧洲标准的水平,并获得了E-Mark认证。这一认证不仅增强了DEF公司产品的市场竞争力,也促进了中欧之间的经贸合作。

Cotco公司的发展小趣事

在电子行业快速发展的浪潮中,Cotco公司于XXXX年正式成立,由几位在电子行业有着丰富经验的企业家和技术专家共同创立。初期,公司专注于电子元器件的分销和贸易,凭借创始团队成员在行业内的人脉和资源,Cotco很快与多家知名电子元器件制造商建立了合作关系,开始为客户提供优质的元器件采购服务。随着市场需求的不断增长,Cotco的业务也逐渐扩展,开始涉足电子产品的设计和生产领域。

Greenliant公司的发展小趣事

面对能源转型的挑战,GPS在2015年转型为智能电网解决方案的提供商。公司研发了一套集数据采集、监控、分析和优化于一体的智能电网平台,帮助电力公司提高运营效率,减少能源浪费。该平台通过实时监测电网状态,预测电力需求,并自动调整供电策略,实现了电网的智能化管理。GPS的智能电网解决方案在全球多个国家和地区得到应用,成为推动能源转型的重要力量。

问答坊 | AI 解惑

【讨论】s7-300模拟量(温度、压力、流量)怎么处理?

s7-300模拟量(温度、压力、流量)怎么处理?    S7-300中温度、压力及流量的输入值,这样处理为PLC可以处理的数据,并实现数值的显示???  …

查看全部问答>

SIM300 GPRS模块串口调试

各位大侠:     我的SIM300模块可以正常登陆到网络,从网络指示灯可以看出, 但是我模块成功登陆后并没用向串口发送READY信号(串口是和PC机串口相连的),我发送AT指令没有任何反应。于是我把RXD和TXD交换后,模块成功登陆网络后向串口 ...…

查看全部问答>

求串口多路复用(GSM07.10)的源代码

找了很久了,还是没有找到,没有时间自己研究协议了,听说西门子有一个WinMUX2k有源代码,不知道哪位有吗?急用,谢谢!…

查看全部问答>

GPRS 数据传输 , 必须知道 服务器的公网IP吗?

数据传输时,GPRS 终端 必须知道服务器公网IP吗? 如果没有公网的IP地址,是不是不行啊? 还有没有其它的方法来完成通信啊? 我只是测试简单的数据传输,找不到什么服务器, 谁来充当这个“服务器”啊? 利用DNS是怎么回事,谁来解释一下…

查看全部问答>

数控机床开发?

开发数控机床的控制系统,用什么软件进行编写啊?用什么软件进行模拟,谢谢!…

查看全部问答>

PSoC4 Cortex-M0开发板免费申请,分享心得赢惊喜大礼!

Cypress联合EEWORLD举行大规模的PSoC 4 ARM Cortex-M0开发板免费试用活动!将通过线上、线下、大学计划等多种渠道发放板子!分享心得,还将有机会获赠5000元RMB外加价值300美金的Oscium混合信号示波器(个税自理)、TP-Link二合一3G路由器!速来!…

查看全部问答>

未来怎么走

我是一个做电子研发的,大专毕业,在大学实习的时候进入现在的公司,那时候也没有实习的直接就作为正式员工了。那时候3.5k,包吃住的,五险第一年没交……一开始的还是新人什么都不懂,所以对工资要求也没有多少要求,可能时间过去2年多了。第一 ...…

查看全部问答>

瑞昱RTL8710:一款值得期待的物联网wifi芯片

众所周知,物联网的基础是物物间的互联互通,因此,简单、稳定、可靠的联网能力是物联网发展的最重要的元素之一。在有线和无线两种方式中,由于连接入网的设备和物品的广泛分布,以及无线通信技术在组网便捷性方面的优势,无线IoT互联的重要性不言 ...…

查看全部问答>

关于怎样学C 语言

现在开始要学C语言的知识;可是到网上找了C语言的视频一点没看懂;买了两本谭浩强的书;也看不懂。请教高手我该从哪里找到切入点…

查看全部问答>