野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12871|回复: 12

有那位老大 调通了 开发板上面的 NAND FLASH吗?

[复制链接]
发表于 2018-7-26 13:13:41 | 显示全部楼层 |阅读模式
目前只找到 火哥提供的 NAND 例程  ,但是这个例程有Bug  , 好像是读 写的地址无效 无论写那个地址 都会将数据写到同一页上




   修改了好几天了 ,无奈水平有限,那位大佬搞通了请帮帮忙。
回复

使用道具 举报

发表于 2018-7-26 14:11:46 | 显示全部楼层
好像nxp官方自己都没做nandflash的程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-26 15:42:01 | 显示全部楼层
NXP 数据手册 没看懂 ,通过  IPCMD 寄存器 设置 发送命令或地址 还有格式    问题是 地址 是该放在那里 ?
回复 支持 反对

使用道具 举报

发表于 2018-7-29 13:49:40 | 显示全部楼层
simms01 发表于 2018-7-26 15:42
NXP 数据手册 没看懂 ,通过  IPCMD 寄存器 设置 发送命令或地址 还有格式    问题是 地址 是该放在那里 ?

地址是会自己解码的
uint8_t NAND_WritePage(uint32_t PageNum,uint16_t ColNum,uint8_t *pBuffer,uint16_t NumByteToWrite)
{
        uint16_t ipCmd;

        ipCmd = SEMC_BuildNandIPCommand(NAND_WRITE0, kSEMC_NANDAM_ColumnRow, kSEMC_NANDCM_CommandAddressHold);
        SEMC_SendIPCommand(SEMC, kSEMC_MemType_NAND, NAND_ADDRESS+PageNum*NAND_MAX_PAGE_SIZE+ColNum, ipCmd, 0, NULL);
        if(NAND_WaitForReady()!=NSTA_READY)
        return 1;        //错误,返回

        SEMC_IPCommandNandWrite(SEMC,NAND_ADDRESS+PageNum*NAND_MAX_PAGE_SIZE+ColNum,pBuffer,NumByteToWrite);

        if(NAND_WaitForReady()!=NSTA_READY)
        return 1;        //错误,返回

        SEMC_NandCMD(NAND_WRITE_TURE1);
        if(NAND_WaitForReady()!=NSTA_READY)
        return 1;        //错误,返回
       
        return 0;        //成功

}

其中SEMC_SendIPCommand(SEMC, kSEMC_MemType_NAND, NAND_ADDRESS+PageNum*NAND_MAX_PAGE_SIZE+ColNum, ipCmd, 0, NULL);
第3个参数就是填入地址,然后这个地址,会被解码成nandflash需要的  命令+C0C1A0A1
回复 支持 反对

使用道具 举报

发表于 2018-8-22 12:54:44 | 显示全部楼层
搞定了没有啊?兄弟,我现在也碰到类似的问题了!
回复 支持 反对

使用道具 举报

发表于 2018-8-22 12:55:57 | 显示全部楼层
本帖最后由 王鹏程 于 2018-8-22 12:58 编辑
吕布-单片机 发表于 2018-7-29 13:49
地址是会自己解码的
uint8_t NAND_WritePage(uint32_t PageNum,uint16_t ColNum,uint8_t *pBuffer,uint1 ...

您这个函数我也试了,比原来的改善了一点点,还是不对,写第一个扇区,读的时候整个块都跟第一个扇区的数据一样
回复 支持 反对

使用道具 举报

发表于 2018-8-22 14:52:44 | 显示全部楼层
吕布-单片机 发表于 2018-7-29 13:49
地址是会自己解码的
uint8_t NAND_WritePage(uint32_t PageNum,uint16_t ColNum,uint8_t *pBuffer,uint1 ...

您好,能把您的擦除和读函数一起贴出来吗?谢谢!
回复 支持 反对

使用道具 举报

发表于 2018-8-22 15:23:47 | 显示全部楼层
王鹏程 发表于 2018-8-22 14:52
您好,能把您的擦除和读函数一起贴出来吗?谢谢!

网盘里更新了“SEMC—扩展外部NAND”的例程,重新下载用就可以了
回复 支持 反对

使用道具 举报

发表于 2018-8-22 23:29:00 | 显示全部楼层
本帖最后由 王鹏程 于 2018-8-22 23:31 编辑
flyleaf 发表于 2018-8-22 15:23
网盘里更新了“SEMC—扩展外部NAND”的例程,重新下载用就可以了

又下载了一次,跟以前的没什么区别,看了一下文件,除了压缩包是今天的日期,里面文件还是7月11日的修改日期啊,是不是压错了?
回复 支持 反对

使用道具 举报

发表于 2018-8-22 23:56:01 | 显示全部楼层
flyleaf 发表于 2018-8-22 15:23
网盘里更新了“SEMC—扩展外部NAND”的例程,重新下载用就可以了

谢谢,初步测试,可以用了!
回复 支持 反对

使用道具 举报

发表于 2018-8-24 17:32:08 | 显示全部楼层
本帖最后由 zjsxfkf 于 2018-8-24 17:33 编辑
王鹏程 发表于 2018-8-22 12:55
您这个函数我也试了,比原来的改善了一点点,还是不对,写第一个扇区,读的时候整个块都跟第一个扇区的数 ...

我调试过代码,其实老是写第一个块和扇区的主要原因不是别的,是地址。野火编写驱动的人对他的IPCMD编写理解有误,地址是要根据读写地址改变的,而不是传入到写寄存器。SEMC_IPCommandNandWrite(SEMC_Type *base, uint32_t address, uint8_t *data, uint32_t size_bytes),实际page和colnum地址是要换算过再代入address的,并且address是 NF的基地址+换算地址,比如写第PageNum块的第ColNum字节开始地址,如果基地址是0xa0000000,则实际代入address = 0xa0000000 + ((ColNum&0xfff) | (PageNum<<12));而且后面的size_bytes对于指令来讲1就好,对于数据当然是多少字节数据就是多少,赶紧去加油干他吧,哈哈
回复 支持 反对

使用道具 举报

发表于 2018-9-8 16:36:47 | 显示全部楼层
不知道你调试好了没有。调试这个东西的时候,最好的,是要有一个逻辑分析仪,把数据口和命令接口都接到逻辑分析仪那里去,把它发送的地址和命令都抓波形出来分析。根据数据手册,49.4.7.1的第一个图的解释,它的地址解码,是将32位地址,解码成两部分,比如,你的数据宽度是8位的,选择Column是12位的,那么就是低12位是COL,高20位是ROW。当你选择C0C1A0A1A2解码模式,也就是5字节地址解码模式的时候,它是这么解码的(真的是恶心坏了):把低12位拿出来,扩充成两个字节发出去,也就是C0  C1;高20位扩充成3个字节发出去,也就是A0  A1  A2。比如,你设置的基地址是0x9E000000(注意,初始化的时候,设置的基地址是没有任何卵用的,只是让你看看而已)。比如你发送的地址是0x9E000000,数据Column选择的是12bit,那么地址会被这么解码:高20位0x9E00000,和低12位0x000;解码的结果按照C0C1A0A1A2排列:0X00  0X00 0X00 0XE0 0X10(为什么是0x01,不应该是0x09吗,这个貌似是跟设置的nandflash的容量有关,我用的2G Bit的nandflash,它解码不出来最高位);就这样的地址解码,你去访问nandflash的时候,要么就是访问得一塌糊涂,要么就是命好,能访问到一些地址,但是访问到的地方根本不是你先想要的地方,只是能读写而已。
更有甚者,如果你的地址设置得不好,又不知道发的命令的波形的话,你也有几率是能正确读写nandflash的,如果你遇到了这样的坑,不好意思,等哪天发现这个问题的时候,你会被老板叼飞了。
比如,你用的2G bit的nandfalsh,总共2048个块,column用的12bit,基础访问地址是0x90000000,根据上面的命令解码,当你想访问第一个块的时候,其实你访问的是第1025个块,当你访问2个块的时候,访问的是第1026个块,当你访问第1025个块的时候,其实你访问的时候第1个块。这样子,你整个nandflash都能访问到,理论上是不会有什么问题的,只不过是一个实际物理位置和逻辑位置的不一致而已。
回复 支持 反对

使用道具 举报

发表于 2018-12-28 09:49:06 | 显示全部楼层
调好了吗?和sdram一起工作,闪屏吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 19:12 , Processed in 0.039304 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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