野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9931|回复: 8

求助RT1052Mini板子的Nandflash,已解决,驱动已由fire上传,2018-7-11

[复制链接]
发表于 2018-7-8 18:25:09 | 显示全部楼层 |阅读模式
将历程里边的SEMC  Nand的历程灌进去,读取nandflash的ID只读出了0x0000000A,
而且代码里备注的是镁光的NAND FLASH,mini板子用的明明是华邦的,怎么成镁光的了,感觉有点荒了。
之前没玩过nandflash。

=========================================
以下附件是NAND 的驱动,由fire加入
SEMC—扩展外部NAND.rar (1.5 MB, 下载次数: 92)

回复

使用道具 举报

发表于 2018-7-9 08:37:02 | 显示全部楼层
这个可能是兼容的
回复 支持 反对

使用道具 举报

发表于 2018-7-9 10:37:27 | 显示全部楼层
NandFlash我调了一个多星期,SDK中NnadFlash驱动本身就有bug。
如果有需要,可以看下你的程序。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-9 15:54:21 | 显示全部楼层
caiday 发表于 2018-7-9 10:37
NandFlash我调了一个多星期,SDK中NnadFlash驱动本身就有bug。
如果有需要,可以看下你的程序。

上传不了文件。
用的是
./0-野火【i.MX RT1052 MINI 开发板】资料\sdk\SDK_2.3.0_EVK-MIMXRT1050_适配野火核心板\boards\evkmimxrt1050\driver_examples\semc\nand
这个路径下的工程,然后  nand.c里边关于读写部分的代码,原来是被屏蔽掉的。我把他们开放了,编译能通过。
但是读取nandflash的时候只能读取出0x0000000a;
而且到擦除的时候,程序直接崩溃了。

回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-9 15:56:05 | 显示全部楼层
caiday 发表于 2018-7-9 10:37
NandFlash我调了一个多星期,SDK中NnadFlash驱动本身就有bug。
如果有需要,可以看下你的程序。

你是发现哪个地方有bug,以及是怎么解决这个bug的,可以和我们说一下,免得我们多走弯路。
回复 支持 反对

使用道具 举报

发表于 2018-7-9 21:07:53 | 显示全部楼层
吕布-单片机 发表于 2018-7-9 15:56
你是发现哪个地方有bug,以及是怎么解决这个bug的,可以和我们说一下,免得我们多走弯路。

发你私信了,加我QQ说
回复 支持 反对

使用道具 举报

发表于 2018-7-9 21:15:28 | 显示全部楼层
本帖最后由 caiday 于 2018-7-9 21:45 编辑
吕布-单片机 发表于 2018-7-9 15:56
你是发现哪个地方有bug,以及是怎么解决这个bug的,可以和我们说一下,免得我们多走弯路。

无标题.png
uint8强制转换为uint32,有可能出现对齐问题。
还有一个地方也有问题,我一时忘记了。

野火的读ID函数中:ipCmd = SEMC_BuildNandIPCommand(NAND_READID, kSEMC_NANDAM_ColumnRow, kSEMC_NANDCM_CommandRead);
第二个变量地址模式应该是kSEMC_NANDAM_ColumnCA0
第三个变量也不对,应该是kSEMC_NANDCM_CommandAddress

无标题1.png

读ID命令只需要一个地址00h(20h)

野火的读ID函数中:
result = SEMC_SendIPCommand(SEMC, kSEMC_MemType_NAND, NAND_ADDRESS, ipCmd, 0, (uint32_t *)data);
也是不对的,因为SEMC_SendIPCommand函数只是写或读,不能同时又发命令,又读数据。
正确的读芯片ID应该是:
ipCmd = SEMC_BuildNandIPCommand(NAND_COM_READID, kSEMC_NANDAM_ColumnCA0, kSEMC_NANDCM_CommandAddress);
Result = _NandFlash_SendIPCommand(SEMC, kSEMC_MemType_NAND, NAND_FLASH_BASE+0x00, ipCmd, 0, NULL);    //发送读ID命令
Result = _NandFlash_IPCommandNandRead(SEMC, NAND_FLASH_BASE, DeviceID, 5);                                                     //读芯片ID



回复 支持 反对

使用道具 举报

发表于 2018-7-11 22:20:20 | 显示全部楼层
嵌入式里用的Raw NAND基本都是遵循ONFI 1.0的,所以NAND到底是哪家生产的不是很重要,按照ONFI 1.0 spec写出来的NAND driver可以通杀所有NAND
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-12 08:46:13 | 显示全部楼层
Henjay724 发表于 2018-7-11 22:20
嵌入式里用的Raw NAND基本都是遵循ONFI 1.0的,所以NAND到底是哪家生产的不是很重要,按照ONFI 1.0 spec写 ...

现在明白了。
之前是一直使用SRAM模式来仿时序,现在是RT封装了一层了,有点迷糊而已
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-11-24 00:15 , Processed in 0.030594 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表