在我的板子上,使用emif连接了一块nand_flash,使用的ce0,然后连接了一块fpga,使用的是ce1,很奇怪的现象,当ce1不做配置时,与fpga可以正常读写,但是配置了ce1后,读写就乱了,这种情况无论配不配ce0都一样,我认为如果不配置ce1的话,ce1应当以reset值运行,但是我直接将reset值写入到配置,居然也不能正常工作。
void EMIF_init()
{
memset(&gNorCeCfg, 0, sizeof(gNorCeCfg));
memset(&gEmif16Cfg, 0, sizeof(gEmif16Cfg));
memset(&gNandCeCfg, 0, sizeof(gNandCeCfg));
/*configuraiton for the CE of NOR FLASH*/
gNorCeCfg.busWidth= EMIF_BUS_16BIT;
gNorCeCfg.opMode = NOR_ASRAM_MODE;
gNorCeCfg.strobeMode = SS_STROBE;
gNorCeCfg.waitMode = EMIF_WAIT_NONE;
gNorCeCfg.wrSetup = 15;
gNorCeCfg.wrStrobe = 63;
gNorCeCfg.wrHold= 7;
gNorCeCfg.rdSetup= 15;
gNorCeCfg.rdStrobe= 63;
gNorCeCfg.rdHold= 7;
gNorCeCfg.turnAroundCycles= CSL_EMIF16_A1CR_TA_RESETVAL;
gNorCeCfg.nor_pg_Cfg= NULL;
gNandCeCfg.busWidth= EMIF_BUS_8BIT;
gNandCeCfg.opMode = NAND_MODE;
gNandCeCfg.strobeMode = SS_STROBE;
gNandCeCfg.waitMode = EMIF_WAIT_NONE;
/*timing configuration for NAND512R3A2DZA6E*/
gNandCeCfg.wrSetup = 1;//CSL_EMIF16_A0CR_WSETUP_RESETVAL,
gNandCeCfg.wrStrobe = 4;//CSL_EMIF16_A0CR_WSTROBE_RESETVAL,
gNandCeCfg.wrHold= 5;//CSL_EMIF16_A0CR_WHOLD_RESETVAL,
gNandCeCfg.rdSetup= 1;//CSL_EMIF16_A0CR_RSETUP_RESETVAL
gNandCeCfg.rdStrobe= 7;//CSL_EMIF16_A0CR_RSTROBE_RESETVAL
gNandCeCfg.rdHold= 2;//CSL_EMIF16_A0CR_RHOLD_RESETVAL
gNandCeCfg.turnAroundCycles= CSL_EMIF16_A0CR_TA_RESETVAL;
gNandCeCfg.nor_pg_Cfg= NULL;
gEmif16Cfg.ceCfg[0] = &gNandCeCfg;
// gEmif16Cfg.ceCfg[1] = &gNorCeCfg;
gEmif16Cfg.wait0Polarity= EMIF_LOW_WAIT;
gEmif16Cfg.wait1Polarity= EMIF_LOW_WAIT;
gEmif16Cfg.maxWait = CSL_EMIF16_AWCCR_MAXEXTWAIT_RESETVAL;
KeyStone_EMIF16_init(&gEmif16Cfg);
}
bo lan3:
将norcecfg.strobemode改为we_strobe后,居然一切正常了,读写操作的时间改的和nand一样,实测结果8次读取时间为1.6us左右,数据正常,这让我很不能理解,文档上说we_strobe不支持ce0-2,我在fpga中是忽略了be[1:0]的,所以,两种模式对fpga来说 ,应该只是ce激活时间不同而已,求解惑