新手上路
- 积分
- 45
- 金钱
- 45
- 注册时间
- 2014-12-31
- 在线时间
- 1 小时
|
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,读写操作就更不用说了,求大神们帮帮忙,原子哥有没有做过啊?
|
|