当前位置: 代码迷 >> 单片机 >> 关于K9k8G08U0A 裸机驱动有关问题
  详细解决方案

关于K9k8G08U0A 裸机驱动有关问题

热度:109   发布时间:2016-04-28 14:50:39.0
关于K9k8G08U0A 裸机驱动问题
本帖最后由 woshi_ziyu 于 2014-11-03 09:32:10 编辑
今日调试驱动,发现以下问题,一直找不到原因。
读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;
}

------解决思路----------------------
可以参考一下这个代码
http://www.pudn.com/downloads213/sourcecode/embed/detail1005033.html
  相关解决方案