OpenEdv-开源电子网

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

stm32f103zet6 fsmc读取mt29f128G08cfabawpb nandflash id不成功

[复制链接]

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2019-3-17
在线时间
41 小时
发表于 2019-3-17 19:00:34 | 显示全部楼层 |阅读模式
1金钱
u8 nand_flash_init(void)
{
        FSMC_NANDInitTypeDef FSMC_NandInitTypeDef;
        FSMC_NAND_PCCARDTimingInitTypeDef FSMC_NnadPccardTimingInitTypeDef;
        GPIO_InitTypeDef GPIO_InitStructure;
       
        RCC_AHBPeriphClockCmd(RCC_AHBPeriph_FSMC, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD | RCC_APB2Periph_GPIOE | RCC_APB2Periph_GPIOG, ENABLE);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_11|GPIO_Pin_12;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);          
        GPIO_SetBits(GPIOD,GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_7|GPIO_Pin_11|GPIO_Pin_12);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOD, &GPIO_InitStructure);          
        GPIO_SetBits(GPIOD,GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_14|GPIO_Pin_15);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOE, &GPIO_InitStructure);          
        GPIO_SetBits(GPIOE,GPIO_Pin_7|GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10);
       
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_6;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
        GPIO_Init(GPIOG, &GPIO_InitStructure);
       
        FSMC_NnadPccardTimingInitTypeDef.FSMC_SetupTime = 0x1;      
  FSMC_NnadPccardTimingInitTypeDef.FSMC_WaitSetupTime = 0x3;
  FSMC_NnadPccardTimingInitTypeDef.FSMC_HoldSetupTime = 0x2;
  FSMC_NnadPccardTimingInitTypeDef.FSMC_HiZSetupTime = 0x1;

  FSMC_NandInitTypeDef.FSMC_Bank = FSMC_Bank3_NAND;
  FSMC_NandInitTypeDef.FSMC_Waitfeature = FSMC_Waitfeature_Enable;
  FSMC_NandInitTypeDef.FSMC_MemoryDataWidth = FSMC_MemoryDataWidth_8b;
  FSMC_NandInitTypeDef.FSMC_ECC = FSMC_ECC_Enable;
  FSMC_NandInitTypeDef.FSMC_ECCPageSize = FSMC_ECCPageSize_2048Bytes;

  FSMC_NandInitTypeDef.FSMC_TCLRSetupTime = 0x00;
  FSMC_NandInitTypeDef.FSMC_TARSetupTime = 0x00;

  FSMC_NandInitTypeDef.FSMC_CommonSpaceTimingStruct = &FSMC_NnadPccardTimingInitTypeDef;
  FSMC_NandInitTypeDef.FSMC_AttributeSpaceTimingStruct = &FSMC_NnadPccardTimingInitTypeDef;

  FSMC_NANDInit(&FSMC_NandInitTypeDef);

  /* FSMC NAND Bank Cmd Test */
  FSMC_NANDCmd(FSMC_Bank3_NAND, ENABLE);
       
        NAND_Reset();                               
  delay_ms(100);
  nand_dev.id=NAND_ReadID();                
        NAND_ModeSet(4);                               
    if(nand_dev.id==MT29F128G08CFABA)   
    {
        nand_dev.page_totalsize=8936;              
        nand_dev.page_mainsize=8192;             
        nand_dev.page_sparesize=744;       
        nand_dev.block_pagenum=256;               
        nand_dev.plane_blocknum=2048;       
        nand_dev.block_totalnum=8192;           
    }
    else return 1;       
    return 0;
       
}


u8 NAND_ModeSet(u8 mode)
{   
  *(__IO uint8_t *)(NAND_ADDRESS|NAND_CMD)=NAND_FEATURE;
  *(__IO uint8_t *)(NAND_ADDRESS|NAND_ADDR)=0X01;               
        *(__IO uint8_t *)NAND_ADDRESS=mode;                                       
        *(__IO uint8_t *)NAND_ADDRESS=0;
        *(__IO uint8_t *)NAND_ADDRESS=0;
        *(__IO uint8_t *)NAND_ADDRESS=0;
    if(NAND_WaitForReady()==NSTA_READY)return 0;
    else return 1;                                                               
}

u32 NAND_ReadID(void)
{
    u8 deviceid[8];
    u32 id;  
    *(__IO uint8_t *)(NAND_ADDRESS|NAND_CMD)=NAND_READID;
    *(__IO uint8_t *)(NAND_ADDRESS|NAND_ADDR)=0X00;
       
        //IDò»12óD5¸ö×Ö½ú
       
    deviceid[0]=*(vu8*)NAND_ADDRESS;      
    deviceid[1]=*(vu8*)NAND_ADDRESS;  
    deviceid[2]=*(vu8*)NAND_ADDRESS;
    deviceid[3]=*(vu8*)NAND_ADDRESS;
    deviceid[4]=*(vu8*)NAND_ADDRESS;  
          deviceid[5]=*(vu8*)NAND_ADDRESS;
          deviceid[6]=*(vu8*)NAND_ADDRESS;

    id=((u32)deviceid[1])<<24|((u32)deviceid[2])<<16|((u32)deviceid[3])<<8|deviceid[4];
       
    return id;
}  

u8 NAND_ReadStatus(void)
{
    vu8 data=0;
    *(__IO uint8_t *)(NAND_ADDRESS|NAND_CMD)=NAND_READSTA;
    NAND_Delay(NAND_TWHR_DELAY);       
        data=*(__IO uint8_t *)NAND_ADDRESS;               
    return data;
}

u8 NAND_WaitForReady(void)
{
    u8 status=0;
    vu32 time=0;
        while(1)                                       
        {
                status=NAND_ReadStatus();       
                if(status&NSTA_READY)break;
                time++;
                if(time>=0X1FFFFFFF)return NSTA_TIMEOUT;
        }
    return NSTA_READY;
}  

u8 NAND_Reset(void)
{
    *(__IO uint8_t *)(NAND_ADDRESS|NAND_CMD)=NAND_RESET;       
    if(NAND_WaitForReady()==NSTA_READY)return 0;
    else return 1;                                                               
}

程序是根据原子stm32f207修改的,目前读id失败,找不到错误了,谢谢大神帮忙看!!



接口

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

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164817
金钱
164817
注册时间
2010-12-1
在线时间
2098 小时
发表于 2019-3-18 01:48:05 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

8

主题

39

帖子

0

精华

初级会员

Rank: 2

积分
184
金钱
184
注册时间
2019-3-17
在线时间
41 小时
 楼主| 发表于 2019-3-18 09:06:27 | 显示全部楼层
正点原子 发表于 2019-3-18 01:48
看看各个引脚的波形,看是否有波形,来确定下问题点吧

好的,谢谢
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-3-28 22:39

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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