历史上的今天
返回首页

历史上的今天

今天是:2025年07月23日(星期三)

正在发生

2018年07月23日 | STM32F103的FSMC读写NANDFlash的学习

2018-07-23 来源:eefocus

1. STM32的FSMC接口可以控制外部的NANDFlash,因此学习下,先看下硬件电路,地址线是A16.A17,数据线D0-D7,那么映射的地址空间是多少?D0是数据/地址线,两个用途。


2. 引脚图,现在关心的是,这个NAND的地址映射的地址空间是多少?


3. 看下STM32的手册。


4. 看下代码,STM32的库基本都封装好的函数,直接调用即可,函数名字一看就明白,还是回到原来的问题,划分的地址空间是多少?代码为我们划分ZONE,Block, Page,封装了底层的地址,一块nand flash也分为若干block,每个block分为如干page。一般而言,block、page之间的关系随着芯片的不同而不同。
需要注意的是,对于flash的读写都是以一个page开始的,但是在读写之前必须进行flash的擦写,而擦写则是以一个block为单位的。

  FSMC_NAND_Init();

 

  /* NAND read ID command */

  FSMC_NAND_ReadID(&NAND_ID);

 

  /* Verify the NAND ID */

  if((NAND_ID.Maker_ID == NAND_ST_MakerID) && (NAND_ID.Device_ID == NAND_ST_DeviceID))

  {

 

    /* NAND memory address to write to */ 

    WriteReadAddr.Zone = 0x00;

    WriteReadAddr.Block = 0x00;

    WriteReadAddr.Page = 0x00; 

 

    /* Erase the NAND first Block */

    status = FSMC_NAND_EraseBlock(WriteReadAddr);

 

    /* Write data to FSMC NAND memory */

    /* Fill the buffer to send */

    Fill_Buffer(TxBuffer, BUFFER_SIZE , 0x66);

 

    status = FSMC_NAND_WriteSmallPage(TxBuffer, WriteReadAddr, PageNumber);

 

    /* Read back the written data */

    status = FSMC_NAND_ReadSmallPage (RxBuffer, WriteReadAddr, PageNumber);

   

    /* Verify the written data */

    for(j = 0; j < BUFFER_SIZE; j++)

    {

      if(TxBuffer[j] != RxBuffer[j])

      {     

        WriteReadStatus++;

      } 

    }

 

    if (WriteReadStatus == 0)

    { /* OK */

      /* Turn on LD1 */

      GPIO_SetBits(GPIOF, GPIO_Pin_6);

    }

    else

    { /* KO */

      /* Turn on LD2 */

      GPIO_SetBits(GPIOF, GPIO_Pin_7);     

    }

  }

  else

  {

    /* Turn on LD3 */

    GPIO_SetBits(GPIOF, GPIO_Pin_8);  

  }

5. 看下芯片资料,页是512字节,Block是16K字节,不懂后面+16什么意思?

Page size – x8 device: (512 + 16 spare) Bytes
Block size – x8 device: (16K + 512 spare) Bytes

6. 问题是为啥是Bank2不是Bank3,怎么确定的?大致去推测一下,

FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND;


7. 开始推测,NANDFlash的地址总线最多16位,算了,好像是FSMC_NCE2(看原理图)决定选的那个BANK,所以是BANK2



推荐阅读

史海拾趣

Electroswitch公司的发展小趣事

随着市场竞争的加剧,Electroswitch意识到仅仅依靠产品质量已经不足以赢得市场。因此,公司开始注重提升服务质量,为客户提供更加全面和专业的支持。通过加强售前咨询、售后服务以及技术支持等方面的投入,Electroswitch成功赢得了客户的信任和忠诚。这也使得公司在电子行业中的地位得到了进一步提升。

Allied Controls Incorporated公司的发展小趣事

Electroswitch Electronics Products(以下简称“Electroswitch”)成立于1986年,是Electro Switch Corp的一个子公司,后者早在1946年就已创立。在创立之初,Electroswitch就致力于设计和制造高品质的开关产品,以满足电子应用领域的各种需求。通过不断的技术创新和产品优化,Electroswitch逐渐在电子行业中树立了良好的声誉。

GSR Technology Ltd公司的发展小趣事

随着数字化时代的到来,GSR Technology Ltd积极响应国家关于数字经济发展的号召,开始推进企业的数字化转型。公司引入先进的智能制造技术,对生产线进行智能化改造,提高了生产效率和产品质量。同时,公司加强数据管理和分析,利用大数据和人工智能技术优化产品设计和生产流程。这一系列的数字化转型措施为公司带来了显著的经济效益和市场竞争力提升。

Ferraz Shawmut(Mersen)公司的发展小趣事

1885年,Shawmut熔丝公司在美国麻省波士顿市成立,开启了其在电气保护领域的征程。随着技术的不断进步和市场需求的增长,Shawmut逐渐崭露头角。1999年,法国Carbone Lorraine公司收购了Gould Shawmut,并将其与Ferraz公司合并,成立了Ferraz Shawmut公司。这一合并不仅增强了公司的技术实力,也扩大了其市场影响力。

First Silicon Co., Ltd公司的发展小趣事

在电子行业快速发展的同时,环保问题也日益受到关注。First Silicon公司积极响应国家环保政策,将环保理念融入企业发展战略之中。公司投入巨资研发环保型半导体材料和生产工艺,努力减少生产过程中的污染排放和资源浪费。同时,公司还积极推广绿色电子产品,引导消费者树立环保意识。通过这一系列的环保举措,First Silicon不仅赢得了社会各界的广泛赞誉,还为其可持续发展奠定了坚实基础。

BILIN公司的发展小趣事

人才是企业发展的核心竞争力。First Silicon公司深知这一点,因此始终将人才战略作为公司发展的重要支撑。公司建立了完善的人才培养体系和激励机制,吸引了大批优秀人才的加入。同时,公司还注重与高校和研究机构的合作,共同开展前沿技术研究和人才培养项目。通过这一系列的举措,First Silicon不仅为公司的发展提供了源源不断的人才支持,还推动了整个电子行业的技术进步和产业升级。

请注意,以上五个故事均是基于电子行业的一般情况和假设构建的,并非First Silicon Co., Ltd公司的实际历史。如需了解该公司的具体发展情况,建议直接访问其官方网站或查阅相关行业报告。

问答坊 | AI 解惑

模块电源 开关电源中高频磁性元件设计常见错误概念

模块电源,开关电源 ,电源模块 直流电源 稳压电源 南京鹏图电源 www.025021.net 开关电源中高频磁性元件的设计对于电路的正常工作和各项性能指标的实现非常关键.加之高频磁性元件设计包括很多细节知识点,而这些细节内容很难被一本或几本所谓的 ...…

查看全部问答>

关于一体机如何调用输入法的问题

我买了个导航的PND,但是是一体机,也就是远峰的SHELL,但我在这个SHELL下怎么都无法把输入法打开,而通过注册表把它的SHELL屏蔽了并进入桌面后,在我的程序里就可以把输入法打开.究竟是什么原因呢? 另外,在进入WINDOW桌面它的任务栏有输入法图 ...…

查看全部问答>

Wince中的文件删除问题

在WINCE中不能用remove()来删除一个文件吗?如果不能应该使用什么函数呢?谢谢!…

查看全部问答>

2812 c语言 浮点型 不能循环计算128次?

我用C语言计算如下程序,结果跑飞 #define samples 128   for(i=0;i<samples;i++)   {     Ua_shunshi=CHA1_Data*8.597;           Ia_shunshi=CHA2_Data*0.4299;    ...…

查看全部问答>

TL494的功能和检测方法

随着信息化的不断普及,微机已进入普通家庭和中小学校,随之而来的维修工作也越来越重。而微机中硬件故障率最高的是主机的电源,从维修中我发现弄清TL494的功能和各引脚的作用对维修电源致关重要,下面就介绍TL494 的功能和各引脚的作,以及检测方 ...…

查看全部问答>

13号综合测评讨论

本帖最后由 paulhyde 于 2014-9-15 03:50 编辑 我们之前是做控制类的,相对硬件电路基础比较差 之前说本届比赛强调模电基础,会不会综合测评是让我们搭一个电路(比如说放大、滤波之类的) 因为还不能带电脑和最小系统等器件,那会不会涉及到程 ...…

查看全部问答>

9B92不能中断;

中断已经在中断向量表中注册。 代码如下: void UART1IntHandler(void); void uartInit(void); //  UART1初始化 void uartInit(void) {     SysCtlPeripheralEnable(SYSCTL_PERIPH_UART1);      &n ...…

查看全部问答>

论坛管理团队气量狭小!!!

我买的那啥lanuchpad,不满意,发表了说法, 结果。论坛没有给我发触摸板。。。…

查看全部问答>

新手困惑,求助

     请问verilog语言中有很多不能综合的语言用于仿真和调试,但是我在quartusii上怎么用啊?   我只知道可综合的语句,能够看在波形仿真中看结果。不可综合语句呢?   谢谢指点啦!…

查看全部问答>

如何消除谐波影响

对于高频电源,在设计开关时如何尽量消除由于在非过零点打开(或关闭〕开关造成谐波影响?…

查看全部问答>