реклама на сайте
подробности

 
 
> samsung NAND, не пишется
RW9UAO
сообщение Feb 6 2009, 12:53
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 23-01-07
Пользователь №: 24 688



самуснговская NAND K9F2G08U0M, 2048 + 64 байт страница. стираю блок, сначала записываю страницу данных (2048 байт), дожидаюсь завершения, читаю статус (команда 0х70), все в порядке.

col1 = 0x00
col2 = 0x00
row1 = (unsigned char) page;
row1 = (unsigned char) page>>8;
row1 = (unsigned char) page>>16;

затем пишу spare area (64 байта) той же страницы.

col1 = 0x00
col2 = 0x80
row1 = (unsigned char) page;
row1 = (unsigned char) page>>8;
row1 = (unsigned char) page>>16;
дожидаюсь завершения, читаю статус - все в порядке.
но иногда при последующем чтении видно, что или данные или спаре область не записались. то-ли не стер я её.... то-ли х.з. уже и в режим рандом ввода/вывода загонял. все равно некоторые страницы не пишутся. и их много. линукс как ни странно все пишет/читает хорошо =)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
RW9UAO
сообщение Feb 9 2009, 07:52
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 115
Регистрация: 23-01-07
Пользователь №: 24 688



Код
#define WRITE_NAND_COMMAND(d) do{ *(volatile unsigned char *)((unsigned long)base_addressCLE) = (unsigned char)(d); } while(0)
#define WRITE_NAND_ADDRESS(d) do{ *(volatile unsigned char *)((unsigned long)base_addressALE) = (unsigned char)(d); } while(0)
#define WRITE_NAND(d) do{ *(volatile unsigned char *)((unsigned long)base_address) = (unsigned char)d; } while(0)
#define READ_NAND() ((unsigned char)(*(volatile unsigned char *)(unsigned long)base_address))

int nand_wait_busy(struct chipio *cio, uint32_t usec) {
uint32_t a=0;

  for(a=0;a<5;a++)nanospin_ns(1000);
  
  for(usec = MAX_ERASE_USEC; usec; --usec) {
    if( (((AT91PS_PIO)base_PIO_C)->PIO_PDSR & AT91C_PIO_PC13) != 0){
      return(0);
    }

    nanospin_ns(1000);
  }
  // We will exit from the log and never reach here.
  return(-1);
}

//================================================================================
===================
int nand_erase_blk(struct chipio * cio, unsigned blk){
  unsigned char status;

#ifdef debug
  fprintf(stderr, "nand_erase_page: block %X\n", blk);
#endif
  
  //set NAND CE
  ((AT91PS_PIO)base_PIO_C)->PIO_CODR = AT91C_PC14_NCS3_NANDCS;

  WRITE_NAND_COMMAND(NANDCMD_ERASE);

    /* Push sector address in three cycles */
  WRITE_NAND_ADDRESS((blk >>  0) & 0xFF);
  WRITE_NAND_ADDRESS((blk >>  8) & 0xFF);
  WRITE_NAND_ADDRESS((blk >> 16) & 0xFF);

  WRITE_NAND_COMMAND(NANDCMD_ERASECONFIRM);

  if(nand_wait_busy(cio, MAX_ERASE_USEC) != 0) {
    fprintf(stderr, "nand_erase_blk: nand_wait_busy - error...\n");
    return(-1);
  }

  if(nand_wait_busy(cio, MAX_ERASE_USEC) != 0) {
    fprintf(stderr, "nand_erase_blk: nand_wait_busy - error...\n");
    return(-1);
  }

  WRITE_NAND_COMMAND(NANDCMD_STATUSREAD);

  if(nand_wait_busy(cio, MAX_READ_USEC) != 0) {
    fprintf(stderr, "nand_erase_blk: nand_wait_busy - error...\n");
    return(-1);
  }else{
      status = READ_NAND();
      if(status & NAND_PROGRAM_ERASE_ERROR){
        fprintf(stderr, "nand_erase_blk: ERROR ERASING BLOCK\n");
        return(-1);
      }
  }
  
  //clear NAND CE
//  ((AT91PS_PIO)base_PIO_C)->PIO_SODR = AT91C_PC14_NCS3_NANDCS;

  return 0;
}

облома при стирании не происходит. тем не менее при чтении страницы из стертого блока обнаруживается, что страница не чистая. куда рыть уже не знаю. времянки вроде выдержаны.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- RW9UAO   samsung NAND   Feb 6 2009, 12:53
- - 3.14   А блок точно не битый? Если "маркировку...   Feb 6 2009, 14:02
- - RW9UAO   чипа подключена к at91sam9260, линух форматирует э...   Feb 6 2009, 14:07
- - 3.14   Понятно, кстати, сори, SAM-BA только сканирует а н...   Feb 6 2009, 14:24
- - vvvv   А не пробовали писать сразу все 2112 байт, такой р...   Feb 6 2009, 15:41
- - RW9UAO   можно по идее и сразу все писать. там драйвер верх...   Feb 7 2009, 03:04
- - Alex11   Самсунговская память вполне выдерживает запись по ...   Feb 7 2009, 09:35
- - RW9UAO   Alex11 была мысль про тайминги. возможно при стира...   Feb 7 2009, 09:47
- - Alex11   Совсем дурацкий вопрос - Вы помните, что нога Busy...   Feb 9 2009, 23:39
- - RW9UAO   нога подтянута. =) линукс-то пашет там замечательн...   Feb 10 2009, 01:03
- - 3.14   Может "плюшки" как раз при чтении (если ...   Feb 10 2009, 11:43
- - RW9UAO   да не, читается нормально. сегодня перетряхнул нас...   Feb 10 2009, 13:18
- - 3.14   И все-таки, гляньте осциллом, если после команды с...   Feb 10 2009, 17:37
- - Alex11   Проверьте еще одно. Нет ли в диаграмме лишних RD и...   Feb 10 2009, 21:54
- - RW9UAO   в процедуре int nand_erase_blk(struct chipio * cio...   Feb 11 2009, 09:57


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:29
Рейтинг@Mail.ru


Страница сгенерированна за 0.02238 секунд с 7
ELECTRONIX ©2004-2016