/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/
/* for K9F1G08 */
#define NAND_PAGE_SIZE ((uint16_t)0x0800) /* 2 * 1024 bytes per page w/o Spare Area */
NAND_IDTypeDef NAND_ID;
NAND_AddressTypeDef WriteReadAddr;
static
uint8_t TxBuffer [NAND_PAGE_SIZE];
static
uint8_t RxBuffer [NAND_PAGE_SIZE];
uint16_t i;
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
printf
(
"\r\nNandFlash Example \r\n\r\n"
);
/* Read the NAND memory ID */
HAL_NAND_Read_ID(&hnand1, &NAND_ID);
printf
(
"Nand Flash ID = 0x%02X,0x%02X,0x%02X,0x%02X "
,NAND_ID.Maker_Id, NAND_ID.Device_Id,
NAND_ID.Third_Id, NAND_ID.Fourth_Id );
if
((NAND_ID.Maker_Id == 0xEC) && (NAND_ID.Device_Id == 0xF1)
&& (NAND_ID.Third_Id == 0x80) && (NAND_ID.Fourth_Id == 0x15))
{
printf
(
"Type = K9F1G08U0A\r\n"
);
}
else
if
((NAND_ID.Maker_Id == 0xEC) && (NAND_ID.Device_Id == 0xF1)
&& (NAND_ID.Third_Id == 0x00) && (NAND_ID.Fourth_Id == 0x95))
{
printf
(
"Type = K9F1G08U0B\r\n"
);
}
else
if
((NAND_ID.Maker_Id == 0xAD) && (NAND_ID.Device_Id == 0xF1)
&& (NAND_ID.Third_Id == 0x80) && (NAND_ID.Fourth_Id == 0x1D))
{
printf
(
"Type = HY27UF081G2A\r\n"
);
}
else
{
printf
(
"Type = Unknow\r\n"
);
}
/* NAND memory address to write to */
WriteReadAddr.Zone = 0x00;
WriteReadAddr.Block = 0x00;
WriteReadAddr.Page = 0x00;
/* Erase the NAND first Block */
HAL_NAND_Erase_Block(&hnand1,&WriteReadAddr);
/* Fill the buffer to send */
for
(i = 0; i < NAND_PAGE_SIZE; i++ )
{
TxBuffer[i] = i;
}
/* Write data to FMC NAND memory */
HAL_NAND_Write_Page(&hnand1, &WriteReadAddr, TxBuffer, 1);
printf
(
"\r\nWritten to the number of£º \r\n"
);
for
(i = 0; i < 2048; i++)
printf
(
"0x%02X \r"
,TxBuffer[i]);
HAL_Delay(100);
/* Read data from FMC NAND memory */
HAL_NAND_Read_Page(&hnand1, &WriteReadAddr, RxBuffer, 1);
printf
(
"\r\nRead receive: \r\n"
);
for
(i = 0; i < 2048; i++)
printf
(
"0x%02X \r"
,RxBuffer[i]);
联系客服