今日调试驱动,发现以下问题,一直找不到原因。 读ID正常; 复位不正常,一直检测不到RB拉低; block擦除不了,检测到I/O0为高; 写不了,检测到I/O0为高; 读出来全是FF;
bool_t hw_k9k8g08u0a_init(void) { t_sysgpio_setDirection(NF_CLE_PORT, NF_CLE_PIN, DIR_OUTPUT); t_sysgpio_setDirection(NF_CE_PORT, NF_CE_PIN, DIR_OUTPUT); t_sysgpio_setDirection(NF_WE_PORT, NF_WE_PIN, DIR_OUTPUT); t_sysgpio_setDirection(NF_ALE_PORT, NF_ALE_PIN, DIR_OUTPUT); t_sysgpio_setDirection(NF_RE_PORT, NF_RE_PIN, DIR_OUTPUT); t_sysgpio_setDirection(NF_RB_PORT, NF_RB_PIN, DIR_INPUT); SET_NF_CLE(0); SET_NF_CE(1); SET_NF_WE(1); SET_NF_ALE(0); SET_NF_RE(1); hw_k9k8g08u0a_reset(); if(hw_k9k8g08u0a_readID() == 0xd3519558) return 1; else return 0; } static void hw_k9k8g08u0a_reset(void) { u2_t i=0; SET_NF_DATA_DIR(DIR_OUTPUT); SET_NF_CE(0); SET_NF_CLE(1); //write command SET_NF_WE(0); SEND_NF_DATA(0xff); SET_NF_WE(1); SET_NF_CLE(0); while(READ_NF_RB) { i++; if(i == 0xffff) return; } SET_NF_CE(1); } bool_t hw_k9k8g08u0a_blockerase(u4_t block_num) { u2_t i=0; u4_t row_addr = block_num*((NF_PAGESIZE+NF_PAGESPARE_SIZE)*NF_PAGE_PER_BLOCK); SET_NF_CE(0); SET_NF_CLE(1); SET_NF_WE(0); //write 0x60 SEND_NF_DATA(0x60); SET_NF_WE(1); SET_NF_CLE(0); SET_NF_ALE(1); SET_NF_WE(0); //write row.addr1 SEND_NF_DATA(row_addr&0x000000ff); SET_NF_WE(1); SET_NF_WE(0); //write row.addr2 SEND_NF_DATA((row_addr>>8)&0x000000ff); SET_NF_WE(1); SET_NF_WE(0); //write row.addr3 SEND_NF_DATA((row_addr>>16)&0x000000ff); SET_NF_WE(1); SET_NF_ALE(0); SET_NF_CLE(1); SET_NF_WE(0); //write 0xd0 SEND_NF_DATA(0xd0); SET_NF_WE(1); SET_NF_CLE(0); while(READ_NF_RB) { i++; if(i == 0xffff) return 1; } SET_NF_CLE(1); SET_NF_WE(0); //write 0x70 SEND_NF_DATA(0x70); SET_NF_WE(1); SET_NF_CLE(0); SET_NF_DATA_DIR(DIR_INPUT); SET_NF_RE(0); SET_NF_RE(1); RB_val = READ_NF_IO0; SET_NF_CE(1); return RB_val; }
[1] [2] [3] [4] 下一页
|