В документации к микроконтроллеру данные формулы для расчета времени доступа к памяти
Код
(SET + 1) x tHCLK >= max (tCS, tCLS, tALS, tCLR, tAR) - tWP
(WAIT + 1) x tHCLK >= max (tWP,tRP)
(HIZ + 1) x tHCLK >= max(tCS, tALS, tCLS) + (tWP - tDS)
(HOLD + 1) x tHCLK >= max (tCH, tCLH, tALH)
((WAIT+1)+(HOLD+1)+(SET+1))xtHCLK >= max(tWC/RC)
Только не понятно, max - это максимальное значение из перечисленных параметром или сумма всех параметров? И еще не ясно как рассчитать tHCLK, использую контроллер stm32v407vg, тактируюсь от внешнего кварца на 8МГц, HCLK = 168МГц.
Еще выяснил, что данные которые я писал, писал их не на внешние nand flash, а в память микроконтроллера, выяснилось это, когда выдернул флешку из контроллера, запустил код, а он все-равно читает какие-то данные.
Теперь еще вопрос встал, как эти данные удалить, прошивал контроллер другой программой, потом снова этой и данные на месте. Функция eraseBlock и eraseAllBlocks(), листинг которых ниже также не дали результата.
Ну и вопрос все же как "подружиться" с внешней памятью, пины настроил, сам handler fsmc инициализировал, обращаюсь по адресу 0x70000000, пишу и читаю блок 0, страницу 0 и начиная с 0 байта
Код
WriteReadAddr.Zone = 0x00;
WriteReadAddr.Block = 0x00;
WriteReadAddr.Page = 0x00;
CODE
void eraseBlock()
{
WriteReadAddr.Zone = 0x00;
WriteReadAddr.Block = 0x00;
WriteReadAddr.Page = 0x00;
HAL_NAND_Erase_Block(&hnand, &WriteReadAddr);
}
void eraseAllBlocks()
{
uint16_t i,j;
for (i = 0x00; i<NAND_ZONE_SIZE; i++)
{
for (j=0x00; j<NAND_BLOCK_SIZE; j++)
{
WriteReadAddr.Zone = 0x00;
WriteReadAddr.Block = i;
WriteReadAddr.Page = j;
HAL_NAND_Erase_Block(&hnand, &WriteReadAddr);
}
}
}