OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 13632|回复: 13

STM32操作NAND FLASH(K9F1G08U0B)

[复制链接]

16

主题

51

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2014-1-19
在线时间
536 小时
发表于 2015-3-5 11:07:11 | 显示全部楼层 |阅读模式
5金钱

在用战舰操作K9F1G08U0B,读SD卡内的文件,写入K9F1G08U0B。操作SD卡是用了文件系统,K9F1G08U0B没用文件系统。现在遇到一个问题,读某些文件,写入K9F1G08U0B没问题,读写了N遍也没问题,我通过WINHEX对比过原文件和写入到K9F1G08U0B的数据,没问题。但是有些文件就是不行。我准备把字库文件GBK12.FON写到K9F1G08U0B,一次都没有成果过,一直丢失数据。现在可以保证的是从SD卡读出来的数据是正确的,NAND FLASH的读写函数好像也没问题,请教各位大神,先谢谢了。

最佳答案

查看完整内容[请看2#楼]

回复【2楼】正点原子: --------------------------------- 我找到原因了,应该是硬件问题,我用的是杜邦线把NAND FLASH模块连到战舰上的,数据会出错。之后我用了成品,STM32和K9F1G08U0B都在PCB上了,数据就不出错了。 文件系统我用的是Fatfs,也没有做坏块处理。我在做的系统是一开始把数据写入K9F1G08U0B,之后就是读,不再写了,这样需要做坏块处理吗?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

16

主题

51

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2014-1-19
在线时间
536 小时
 楼主| 发表于 2015-3-5 11:07:12 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
我找到原因了,应该是硬件问题,我用的是杜邦线把NAND FLASH模块连到战舰上的,数据会出错。之后我用了成品,STM32和K9F1G08U0B都在PCB上了,数据就不出错了。
文件系统我用的是Fatfs,也没有做坏块处理。我在做的系统是一开始把数据写入K9F1G08U0B,之后就是读,不再写了,这样需要做坏块处理吗?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-5 22:45:52 | 显示全部楼层
你用什么文件系统?nand有坏块,你做了处理么?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-3-6 22:56:12 | 显示全部楼层
回复【3楼】青花信物:
---------------------------------
不算。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
发表于 2016-9-23 09:38:22 | 显示全部楼层
LZ   STM32操作NAND FLASH(K9F1G08U0B)  的程序 能不能发出来看看!!!
回复

使用道具 举报

3

主题

6

帖子

0

精华

新手上路

积分
22
金钱
22
注册时间
2016-6-3
在线时间
6 小时
发表于 2016-9-23 14:15:30 | 显示全部楼层
STM32新学习者 发表于 2016-9-23 09:38
LZ   STM32操作NAND FLASH(K9F1G08U0B)  的程序 能不能发出来看看!!!

亲  能不能把NAND  FLASH 的程序发给我看一下  我现在这边急需调试这个NAND FALSH 谢谢
回复

使用道具 举报

22

主题

92

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
446
金钱
446
注册时间
2014-4-7
在线时间
53 小时
发表于 2016-9-23 16:44:46 | 显示全部楼层
我也没有调出来!!!你跳出来了  没有???
回复

使用道具 举报

16

主题

51

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1182
金钱
1182
注册时间
2014-1-19
在线时间
536 小时
 楼主| 发表于 2016-12-22 18:06:58 | 显示全部楼层
STM32新学习者 发表于 2016-9-23 09:38
LZ   STM32操作NAND FLASH(K9F1G08U0B)  的程序 能不能发出来看看!!!

附件中为可以使用的驱动

NAND_FLASH.rar

5.48 KB, 下载次数: 1056

nand驱动

回复

使用道具 举报

260

主题

810

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1898
金钱
1898
注册时间
2012-10-28
在线时间
357 小时
发表于 2016-12-25 19:47:59 | 显示全部楼层
青花信物 发表于 2016-12-22 18:06
附件中为可以使用的驱动

目前正好研究研究一下 nand flash ,多谢多谢了
回复

使用道具 举报

7

主题

88

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
276
金钱
276
注册时间
2015-1-10
在线时间
70 小时
发表于 2017-2-28 12:50:06 | 显示全部楼层
青花信物 发表于 2016-12-22 18:06
附件中为可以使用的驱动

非常感谢,正在找这段代码,学习一下。
回复

使用道具 举报

2

主题

10

帖子

0

精华

初级会员

Rank: 2

积分
83
金钱
83
注册时间
2018-12-17
在线时间
19 小时
发表于 2018-12-17 15:17:00 | 显示全部楼层
这个模拟U盘好用吗
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-9-10
在线时间
2 小时
发表于 2020-1-21 16:25:54 | 显示全部楼层
a1457047701 发表于 2016-9-23 14:15
亲  能不能把NAND  FLASH 的程序发给我看一下  我现在这边急需调试这个NAND FALSH 谢谢

void nand(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;
        FSMC_NANDInitTypeDef FSMC_NANDInitStruct;
        FSMC_NAND_PCCARDTimingInitTypeDef time;
        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOB|RCC_AHB1Periph_GPIOD|RCC_AHB1Periph_GPIOE|RCC_AHB1Periph_GPIOF|RCC_AHB1Periph_GPIOG, ENABLE);//使能PD,PE,PF,PG时钟  
  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC,ENABLE);//使能FSMC时钟
        GPIO_InitStructure.GPIO_Pin = (3<<0)|(0xB<<4)|(3<<11)|(3<<14);
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//上拉
  GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化  

  GPIO_InitStructure.GPIO_Pin = (0XF<<7);//PE7-10,AF OUT
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;//复用输出
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;//上拉
  GPIO_Init(GPIOE, &GPIO_InitStructure);//初始化

        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;//WP
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化       
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;//PD6 上拉输入,NAND FLASH的R/B信号
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;//
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);//初始化
       
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource0,GPIO_AF_FSMC); //D2
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource1,GPIO_AF_FSMC); //D3
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource4,GPIO_AF_FSMC); //OE
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource5,GPIO_AF_FSMC);        //WE
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource7,GPIO_AF_FSMC); //NCE2
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource11,GPIO_AF_FSMC);//A16
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource12,GPIO_AF_FSMC);//A17
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource14,GPIO_AF_FSMC);//D0
        GPIO_PinAFConfig(GPIOD,GPIO_PinSource15,GPIO_AF_FSMC);//D1

  GPIO_PinAFConfig(GPIOE,GPIO_PinSource7,GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource8,GPIO_AF_FSMC);       
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource9,GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE,GPIO_PinSource10,GPIO_AF_FSMC);

        GPIO_SetBits(GPIOA,GPIO_Pin_4);//WP 上拉
       
        FSMC_NANDInitStruct.FSMC_Bank = FSMC_Bank2_NAND;
  FSMC_NANDInitStruct.FSMC_Waitfeature = FSMC_Waitfeature_Disable;
  FSMC_NANDInitStruct.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
  FSMC_NANDInitStruct.FSMC_ECC = FSMC_ECC_Disable;
  FSMC_NANDInitStruct.FSMC_ECCPageSize = FSMC_ECCPageSize_512Bytes;
       
        FSMC_NANDInitStruct.FSMC_TCLRSetupTime = 0x0;
        FSMC_NANDInitStruct.FSMC_TARSetupTime = 0x0;
       
        time.FSMC_SetupTime = 0x1;//建立时间2个HCLK(设置值+1)
        time.FSMC_WaitSetupTime = 0x3;//MEMWAIT,等待时间4个HCLK(设置值+1)
        time.FSMC_HoldSetupTime = 0x2;//MEMHOLD,保持时间1个HCLK
        time.FSMC_HiZSetupTime = 0x1;//MEMHIZ,高阻态时2个HCLK(设置值+1)
       
        FSMC_NANDInitStruct.FSMC_CommonSpaceTimingStruct=&time;
        FSMC_NANDInitStruct.FSMC_AttributeSpaceTimingStruct=&time;
        FSMC_NANDInit(&FSMC_NANDInitStruct);
        FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);        

        NAND_Reset();                       //复位NAND
        delay_ms(500);       
        nand_dev.id=NAND_ReadID();        //读取ID       
回复

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
13
金钱
13
注册时间
2019-9-10
在线时间
2 小时
发表于 2020-1-21 16:27:00 | 显示全部楼层
shanglei7891 发表于 2020-1-21 16:25
void nand(void)
{
        GPIO_InitTypeDef  GPIO_InitStructure;

我读的id是FFFFFFFF,状态是0x70,手册上表明状态是正确的
回复

使用道具 举报

76

主题

159

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
296
金钱
296
注册时间
2014-1-1
在线时间
231 小时
发表于 2020-11-5 14:59:16 来自手机 | 显示全部楼层
兄弟,帮个忙呗。能不能把工程文件一起放上来?  我这找不着相对应的寄存器。  拿原子的。内存测试版本。愿意通过后  下载不运行
IMG_20201105_094710.jpg
IMG_20201105_094654.jpg
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-21 13:32

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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