打印
[其他ST产品]

【NUCLEO试用】三:NUCLEO-L552ZE-Q 驱动nand flash

[复制链接]
1335|28
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 数码小叶 于 2020-5-28 21:47 编辑

上一篇吐槽贴发完过了很久了【NUCLEO试用】二:NUCLEO-L552ZE-Q 各种槛 (出处: 中国电子网技术论坛),后来慢慢的把坑填完了,只是帖子没发,为了完整性,还是得补上,上一篇就说,原本是要驱动nand flash的,结果卡壳了。经过这次体验,发现STM32的FMC接口真的是很方便,省去了很多配置以及不需要跟底层驱动时序打交道了。

"NOR和NAND是现在市场上两种主要的非易失闪存技术。Intel于1988年首先开发出NOR flash技术,彻底改变了原先由EPROM和EEPROM一统天下的局面。紧接着,1989年, 东芝公司发表了NAND flash结构,强调降低每比特的成本,更高的性能,并且象磁盘一样可以通过接口轻松升级。"Nand flash内存是flash内存的一种,其内部采用非线性宏单元模式,为固态大容量内存的实现提供了廉价有效的解决方案。Nand-flash存储器具有容量较大,改写速度快等优点,适用于大量数据的存储 "

FMC接口,全称“
Flexible memory controller”,大多数大于64脚的封装中,基本都配备了这个。这个扩展接口很强,参考手册里介绍的很详细,就不写了



这次只是用到了其中的nand flash。
打开cubeMX,直接选择NUCLEO-L552ZE-Q ,这样可以省去很多配置,串口什么的也可以直接使用了。




其他的设置就不写了,主要是FMC相关的,这里选择8位还是16位,根据自己的需求来,后面调用不同的HAL库操作函数。






里面要配置的参数很多,这些参数从哪来呢,就得看使用的nand flash芯片资料了。我测试的是K9F1G080U0E






吐槽一句,这种接线方式有点不可靠,刚开始一直不稳定,后来用热熔胶固定后就稳定了,主要是条件限制,应该用短线焊接起来的。再来寻找需要填的参数,分别来自STM32L552xx and STM32L562xx advanced Arm®-based 32-bit MCUs Reference manual和K9F1G08U0E datasheet















最后配置如下


从模块资料例程里,复制过来测试代码,读取芯片ID
  HAL_NAND_Read_ID(&hnand1, &NAND_ID);

  printf("Nand Flash ID = 0x%02X,0x%02X,0x%02X,0x%02X  ",NAND_ID.Maker_Id, NAND_ID.Device_Id,NAND_ID.Third_Id, NAND_ID.Fourth_Id );
  if ((NAND_ID.Maker_Id == 0xEC) && (NAND_ID.Device_Id == 0xF1)
        && (NAND_ID.Third_Id == 0x80) && (NAND_ID.Fourth_Id == 0x15))
  {
        printf("Type = K9F1G08U0A\r\n");
  }
  else if ((NAND_ID.Maker_Id == 0xEC) && (NAND_ID.Device_Id == 0xF1)
        && (NAND_ID.Third_Id == 0x00) && (NAND_ID.Fourth_Id == 0x95))
  {
        printf("Type = K9F1G08U0B\r\n");     
  }
  else if ((NAND_ID.Maker_Id == 0xAD) && (NAND_ID.Device_Id == 0xF1)
        && (NAND_ID.Third_Id == 0x80) && (NAND_ID.Fourth_Id == 0x1D))
  {
        printf("Type = HY27UF081G2A\r\n");      
  }
  else
  {
        printf("Type = Unknow\r\n");
  }

第一次没成功,后面ok

但是读出的好像不对啊,不是E么,对比数据手册

没有问题,程序中定义错了

再来测试下读写
  HAL_NAND_Write_Page(&hnand1, &WriteReadAddr, TxBuffer, 1);
  printf("\r\n\r\nWritten number: \r\n");
  for(i = 0; i < 13; i++)
{
    printf("0x%02X,",TxBuffer[i]);
    HAL_Delay(2);
  }
  HAL_Delay(100);

  HAL_NAND_Read_Page(&hnand1, &WriteReadAddr, RxBuffer, 1);
  printf("\r\n\r\nRead number: \r\n");
  for(i = 0; i < 13; i++)
  {
    printf("0x%02X,",RxBuffer[i]);
    HAL_Delay(2);
  }        




串口打印,ok


使用特权

评论回复
沙发
mmuuss586| | 2020-5-29 10:09 | 只看该作者

使用特权

评论回复
板凳
yklstudent| | 2020-5-29 20:32 | 只看该作者
厉害了我的楼主

使用特权

评论回复
地板
yklstudent| | 2020-5-29 20:32 | 只看该作者
楼主可以试试移植跑个micrium的ucfs文件系统

使用特权

评论回复
5
gygp| | 2020-6-3 19:59 | 只看该作者
基于STM32L5 微控制器  

使用特权

评论回复
6
chenci2013| | 2020-6-3 20:00 | 只看该作者
如何使用NUCLEO-F401RE

使用特权

评论回复
7
biechedan| | 2020-6-3 20:00 | 只看该作者
谢谢楼主的资料了。   

使用特权

评论回复
8
wangdezhi| | 2020-6-3 20:00 | 只看该作者
有完整的工程文件吗   

使用特权

评论回复
9
isseed| | 2020-6-3 20:01 | 只看该作者
给力,谢谢楼主。   

使用特权

评论回复
10
xietingfeng| | 2020-6-3 20:01 | 只看该作者
NUCLEO-L552ZE看着不错呢。   

使用特权

评论回复
11
suzhanhua| | 2020-6-3 20:01 | 只看该作者
在性能、功耗和安全性之间实现新的最优平衡  

使用特权

评论回复
12
mituzu| | 2020-6-3 20:02 | 只看该作者
NUCLEO_L552ZE     

使用特权

评论回复
13
hellosdc| | 2020-6-3 20:02 | 只看该作者
读写NOR和NAND需要技术的。  

使用特权

评论回复
14
uiint| | 2020-6-3 20:02 | 只看该作者
      

使用特权

评论回复
15
isseed| | 2020-6-3 20:02 | 只看该作者
STM32的FMC接口不错呢。   

使用特权

评论回复
16
wangdezhi| | 2020-6-3 20:02 | 只看该作者
不知道性能怎么样了   

使用特权

评论回复
17
xietingfeng| | 2020-6-3 20:02 | 只看该作者
外设也没有办法呢。      

使用特权

评论回复
18
biechedan| | 2020-6-3 20:02 | 只看该作者
跟着楼主学习学习吧。   

使用特权

评论回复
19
suzhanhua| | 2020-6-3 20:02 | 只看该作者
功耗可以到多少呢?   

使用特权

评论回复
20
chenci2013| | 2020-6-3 20:02 | 只看该作者
这个价格怎么样呢     

使用特权

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

本版积分规则

103

主题

2542

帖子

19

粉丝