Перейти к содержанию
    

aduduka

Участник
  • Постов

    6
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Контакты

  • Сайт
    Array
  • ICQ
    Array
  1. Добрый день! Используется контроллер LPC3131 и микросхема памяти MT29F8G16. Выполнена инициализация контроллера. Функции чтения и записи страниц работают. void InitNAND(void) { /*Select EBI/MPMC pins*/ SYSCREG_MUX_LCD_EBI_SEL_bit.Mux_LCD_EBI_sel = 1; CGU_Run_Clock(EBI_CLK); /*Enable MPMC clocks*/ CGU_Run_Clock(MPMC_CFG_CLK); CGU_Run_Clock(MPMC_CFG_CLK2); CGU_Run_Clock(MPMC_CFG_CLK3); /* Enable NAND Flash Controller Clocks */ CGU_Run_Clock(NANDFLASH_S0_CLK); CGU_Run_Clock(NANDFLASH_ECC_CLK); CGU_Run_Clock(NANDFLASH_NAND_CLK); CGU_Run_Clock(NANDFLASH_PCLK); /*Reset NAND Flash Controller*/ NANDFLASH_CTRL_ECC_RESET_N_SOFT = 0; NANDFLASH_CTRL_NAND_RESET_N_SOFT = 0; for(volatile Int32U i = 0; 10000 > i; i++); NANDFLASH_CTRL_ECC_RESET_N_SOFT = 1; NANDFLASH_CTRL_NAND_RESET_N_SOFT = 1; /**/ SYSCREG_MUX_NAND_MCI_SEL_bit.Mux_NAND_MCI_sel = 0; /*Nand Configuration Register*/ NandConfig = (1<<0)| /* Error Correction On */ (1<<1)| /* 16-bit flash device */ (0<<3)| /* DMA enabled */ (0<<4)| /* Little endian */ (3<<5)| /* Latency configuration */ (0<<7)| /* ECC started after 516B */ (1<<8)| /* CE deactivated */ (0<<10)| /* 528 Bytes Read/Write */ (0<<12); /* 5-bit mode ECC */ NandSetCE = 0x1E; /* NAND Reset */ /*Clear Status Flags*/ NandIRQStatusRaw = 0xffffffff; /*Erase Command*/ NandSetCmd = NAND_RST; // wait for device ready while (!NandIRQStatusRaw_bit.INT28R); } /************************************************************************* * Function Name: NandReadPage * Parameters: Page - NAND Flash Page Number. It is Block*NAND_PG_PER_BLK + Page_in_Block * Buffer_Index - Index to NFC Buffer (0-3) * Return: FLASH_OK - No Read Error or 1bit Error * FLASH_ERROR - Non Correcable Read Error * Description: Reads one page (512 main+16 spera) from NAND Flash into RBA * *************************************************************************/ unsigned int NandReadPage(unsigned char * dest, unsigned int Page,unsigned int Buff_Index) { int t=0; /*Read commad*/ NandSetCmd = 0x00; /*Set Address*/ #ifdef NAND_MOD AddrInOperation(NAND_PAGE_WORD_SIZE *(Page%4),Page/4); #else AddrInOperation(NAND_PAGE_SIZE *(Page%4),Page/4); #endif /*Clear Status Flags*/ NandIRQStatusRaw = 0xffffffff; /*Read Command*/ NandSetCmd = 0x30; // wait for device ready while (!NandIRQStatusRaw_bit.INT28R); /*Clear Status flags*/ NandIRQStatusRaw = 0xffffffff; /*Start Reading*/ NandControlFlow = 1; /*Wait reading and ECC to complete*/ while(!NandIRQStatusRaw_bit.INT21R); /*Non Correctable error*/ if( !NandIRQStatusRaw_bit.INT26R && NandIRQStatusRaw_bit.INT11R) return FLASH_ERROR; unsigned char * src = (unsigned char *) 0x70000000; for(int i = 0; i<516; i+=sizeof(unsigned char)) { *dest++ = *src++; } return FLASH_OK; } Проблема возникает когда я пытаюсь организовать проверку всех микросхемы на наличие плохих блоков. Генирируется таблица случайных чисел и записывается в каждый блок (страница за страницей). Затем в цикле постранично считывается и сравнивается с ожидаемым результом. Число блоков 8192. Число страниц в блоке 256 по 512 байт. В случайном блоке при чтении возникает событие if( !NandIRQStatusRaw_bit.INT26R && NandIRQStatusRaw_bit.INT11R) и функция чтения возвращает ошибку чтения. В моем цикле, в случае ошибки, предусмотрено чтение страницы 3 раза. Все 3 попытки оказываются не успешными. void ReadRandomData(void) { int i,k,j; int NumTry=3; int ErrorInBlock=0; for(i = STARTBLOCK; i<NAND_BLK_NUM; ++i) { int compare=0; for( k =0; k<NAND_PG_PER_BLK; k++) { NumTry=3; do { ErrorInBlock=0; if (FLASH_ERROR == NandReadPage(DataBuf, i*NAND_PG_PER_BLK+k,0)) { NumTry--; ErrorInBlock++; } else NumTry=0; } while (NumTry!=0); /*Compare Data*/ if (ErrorInBlock) { /*вывод сообщения об ошибке*/ } else { /*сравнение полученных данных и ожидаемых*/ } } } } Если же потом обратиться к данной странице, то ошибки нет, и данные считываются верно. Так же если проверять не все страницы блока, а с шагом, скажем каждая 10,17, 20 сраница, то данной ошибки не возникает и тест выполняется. Пробовала в случае ошибки снова вызывать функцию инициализации. Не помогло. Из-за чего может возникнуть такая ошибка?
  2. Такая же ситуация как у keeka. Книжки: 1)"Introduction to Digital Design" - Richard E. Haskell & Darrin M. Hanna 2) "Digital Design" - Richard E. Haskell & Darrin M. Hanna. Поделитесь пожалуйста.
  3. А как это сделать? Я добавляю готовый блок ip core DDS, и не понимаю, как получить доступ к таблице Необходимо сделать генератор сигнала произвольной формы с малым джиттером.
  4. Подскажите, пожалуйста, можно ли использовать dds compiler для создания сигнала произвольной формы ? Возможно ли редактирование или полная замена sin lookup table ?
  5. Спасибо, просто пример, который приведен в цитате был взят из той темы.
  6. Здравствуйте. Подскажите пожалуйста, как связать прерывание написанное на .asm с основным кодом на с. Не пойму, какие параметры у функции должны быть? Прототип FIR_fract(fract16*, fract16*, u32), а как и куда они передаются в _FIR_fract: ?
×
×
  • Создать...