OpenEdv-开源电子网

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

stm32f207驱动4g nandflash(K9GBG08U0A)

[复制链接]

2

主题

5

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-12-31
在线时间
1 小时
发表于 2015-12-19 01:45:52 | 显示全部楼层 |阅读模式
5金钱
大家救命啊,搞了好久都没有搞通,用stm32f207的fsmc驱动nandflash,我的nandflash是4g的,型号是三星的K9GBG08U0A,怎么设置都不能够读写芯片的ID,不知道是哪里的问题
下面附上我的程序
void NAND_Init(void)
{
  GPIO_InitTypeDef GPIO_InitStructure; 
  FSMC_NAND_PCCARDTimingInitTypeDef  p;
  FSMC_NANDInitTypeDef FSMC_NANDInitStructure;
  
  /*FSMC×?????????GPIO×é?±??????*/
  RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOD  | RCC_AHB1Periph_GPIOE , ENABLE);

//  RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);

  RCC_AHB3PeriphClockCmd(RCC_AHB3Periph_FSMC, ENABLE); 
  
 /*FSMC CLE, ALE, D0->D3, NOE, NWE and NCE2???????????ì????????*/
  /* GPIOD configuration */
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource0, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource1, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource4, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource5, GPIO_AF_FSMC);
//  GPIO_PinAFConfig(GPIOD, GPIO_PinSource6, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource7, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource14, GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOD, GPIO_PinSource15, GPIO_AF_FSMC);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_4 | GPIO_Pin_5 | /*GPIO_Pin_6 | */
                                GPIO_Pin_7 | GPIO_Pin_14 | GPIO_Pin_15;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);


  /* GPIOE configuration */

  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_PinAFConfig(GPIOE, GPIO_PinSource11 , GPIO_AF_FSMC);
  GPIO_PinAFConfig(GPIOE, GPIO_PinSource12 , GPIO_AF_FSMC);


  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7  | GPIO_Pin_8  | GPIO_Pin_9  | 
                                GPIO_Pin_10 | GPIO_Pin_11 | GPIO_Pin_12 ;
                                

  GPIO_Init(GPIOE, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6 ;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;
  GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
  GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
  GPIO_Init(GPIOD, &GPIO_InitStructure);

  /*--------------FSMC ×??? ?????÷????????------------------------------*/
  p.FSMC_SetupTime = 0x01;         //?¨???±??
  p.FSMC_WaitSetupTime = 0x03;     //?????±??
  p.FSMC_HoldSetupTime = 0x02;     //±????±??
  p.FSMC_HiZSetupTime = 0x01;      //??×è?¨???±??

  FSMC_NANDInitStructure.FSMC_Bank = FSMC_Bank2_NAND; //????FSMC BANK2
  FSMC_NANDInitStructure.FSMC_Waitfeature = FSMC_Waitfeature_Disable;//FSMC_Waitfeature_Enable; //????FSMC??????????
  FSMC_NANDInitStructure.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b; //NAND Flash???????í????8??
  FSMC_NANDInitStructure.FSMC_ECC = FSMC_ECC_Enable;                  //????ECC????
  FSMC_NANDInitStructure.FSMC_ECCPageSize = FSMC_ECCPageSize_1024Bytes; //ECC???ó??2048
  FSMC_NANDInitStructure.FSMC_TCLRSetupTime = 0x0;             
  FSMC_NANDInitStructure.FSMC_TARSetupTime = 0x0;
  FSMC_NANDInitStructure.FSMC_CommonSpaceTimingStruct = &p;
  FSMC_NANDInitStructure.FSMC_AttributeSpaceTimingStruct = &p;

  FSMC_NANDInit(&FSMC_NANDInitStructure);

  /*!????FSMC BANK2 */
  FSMC_NANDCmd(FSMC_Bank2_NAND, ENABLE);
}

void NAND_ReadID(NAND_IDTypeDef* NAND_ID)
{
  uint32_t data = 0;



 /* Send Command to the command area */     
  *(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = 0x90;    

  //DelayUs(3);
 *(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = 0x00;
  //DelayUs(3);
   /* Sequence to read ID from NAND flash */    

   data = *(__IO uint32_t *)(Bank_NAND_ADDR | DATA_AREA);   

   NAND_ID->Maker_ID   = ADDR_1st_CYCLE (data);
   NAND_ID->Device_ID  = ADDR_2nd_CYCLE (data);
   NAND_ID->Third_ID   = ADDR_3rd_CYCLE (data);
   NAND_ID->Fourth_ID  = ADDR_4th_CYCLE (data); 
   data = *(vu8 *)(Bank_NAND_ADDR | DATA_AREA);
   NAND_ID->Fifth_ID   = data &0xf0; 
}

读取得ID 都不对的,仿真的时候看Bank_NAND_ADDR|DATA_AREA地址里面的数据都是ff。
有没有那个高手搞过的,项目很急,现在都不知道怎么读取ID,读写操作就更不用说了,求大神们帮帮忙,原子哥有没有做过啊?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2015-12-19 13:11:07 | 显示全部楼层
回复

使用道具 举报

1

主题

16

帖子

0

精华

初级会员

Rank: 2

积分
64
金钱
64
注册时间
2015-9-6
在线时间
7 小时
发表于 2015-12-19 14:45:19 | 显示全部楼层
你看看CMD_AREA和ADDR_AREA的定义是不是正确,调换一下看看,我的就是这两个数定义错误,搞了我两天!还有FSMC_ECCPageSize_1024Bytes;改成2048 2K的试试。
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
45
金钱
45
注册时间
2015-10-25
在线时间
6 小时
发表于 2015-12-26 16:53:00 | 显示全部楼层
我也是!!!!读出来就是FF!你解决了么?
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-12-31
在线时间
1 小时
 楼主| 发表于 2016-1-6 16:54:35 | 显示全部楼层
ljinwei6 发表于 2015-12-19 14:45
你看看CMD_AREA和ADDR_AREA的定义是不是正确,调换一下看看,我的就是这两个数定义错误,搞了我两天!还有F ...

试过了,还是不行,不知道是什么原因,现在可以读取数据,但是每次读的数据都不同,没有一次正确的
回复

使用道具 举报

2

主题

5

帖子

0

精华

新手上路

积分
45
金钱
45
注册时间
2014-12-31
在线时间
1 小时
 楼主| 发表于 2016-1-6 16:55:01 | 显示全部楼层
fangtianyu 发表于 2015-12-26 16:53
我也是!!!!读出来就是FF!你解决了么?

还没有啊,头疼中,你的搞好了吗
回复

使用道具 举报

15

主题

43

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
金钱
357
注册时间
2013-12-9
在线时间
48 小时
发表于 2016-1-7 13:48:01 | 显示全部楼层
mojiaj 发表于 2016-1-6 16:55
还没有啊,头疼中,你的搞好了吗

我也在搞这个,加QQ一起交流一下啊
回复

使用道具 举报

0

主题

3

帖子

0

精华

新手入门

积分
45
金钱
45
注册时间
2015-10-25
在线时间
6 小时
发表于 2016-1-8 15:22:38 | 显示全部楼层
wofei1314 发表于 2016-1-7 13:48
我也在搞这个,加QQ一起交流一下啊

行啊。。我QQ是405708499
回复

使用道具 举报

13

主题

76

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2016-4-19
在线时间
139 小时
发表于 2016-4-19 16:59:26 | 显示全部楼层
wofei1314 发表于 2016-1-7 13:48
我也在搞这个,加QQ一起交流一下啊

请问你调试出来没有,同样遇到这样的问题。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-16 22:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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