Здравствуйте.
Пытаюсь завести работу с NAND FLASH через HAL. Инициализация проходит, запись вроде бы тоже. Но при попытке чтения в начале буфера пишется мусор из 0x30:
По скриншоту заметно, что после стирания считался мусор + пустые байты.
Код инициализации флеша:
static void MX_FMC_Init(void)
{
FMC_NAND_PCC_TimingTypeDef ComSpaceTiming;
FMC_NAND_PCC_TimingTypeDef AttSpaceTiming;
FMC_SDRAM_TimingTypeDef SdramTiming;
/** Perform the NAND1 memory initialization sequence
*/
hnand1.Instance = FMC_NAND_DEVICE;
/* hnand1.Init */
hnand1.Init.NandBank = FMC_NAND_BANK2;
hnand1.Init.Waitfeature = FMC_NAND_PCC_WAIT_FEATURE_DISABLE;
hnand1.Init.MemoryDataWidth = FMC_NAND_PCC_MEM_BUS_WIDTH_8;
hnand1.Init.EccComputation = FMC_NAND_ECC_DISABLE;
hnand1.Init.ECCPageSize = FMC_NAND_ECC_PAGE_SIZE_2048BYTE;
hnand1.Init.TCLRSetupTime = 1;
hnand1.Init.TARSetupTime = 1;
/* hnand1.Info */
hnand1.Info.PageSize = 2048;
hnand1.Info.SpareAreaSize = 64;
hnand1.Info.BlockSize = 64;
hnand1.Info.BlockNbr = 16384;
hnand1.Info.ZoneSize = 0;
/* ComSpaceTiming */
ComSpaceTiming.SetupTime = 100; //tCS-tWP = 20-12 = 8ns
ComSpaceTiming.WaitSetupTime = 100; //tWP = 12ns
ComSpaceTiming.HoldSetupTime = 100; //tCH = 5ns
ComSpaceTiming.HiZSetupTime = 100; //tCS-tDS = 20-12 = 8ns
/* AttSpaceTiming */
AttSpaceTiming.SetupTime = 100;
AttSpaceTiming.WaitSetupTime = 100;
AttSpaceTiming.HoldSetupTime = 100;
AttSpaceTiming.HiZSetupTime = 100;
if (HAL_NAND_Init(&hnand1, &ComSpaceTiming, &AttSpaceTiming) != HAL_OK)
{
Error_Handler();
}
}
С таймингами пока что особо не баловался, сперва хочу добиться стабильной работы хоть как-то.