在线时间285 小时
UID3419421
注册时间2017-8-30
NXP金币0
该用户从未签到
高级会员

- 积分
- 750
- 最后登录
- 2021-1-25
|
代码来源:SDK_2.2_LPC54608J512\boards\lpcxpresso54608\driver_examples\spifi\polling_transfer
硬件平台:
OM13092开发板
问题:
这个例子在开发板上运行无问题,现在我想循环擦-写-读 操作flash ,于是在代码以下地方增加while(1)
spifi_config_t config = {0};
uint32_t sourceClockFreq;
uint32_t i = 0, j = 0, data = 0, page = 0, err = 0;
uint8_t *val = (uint8_t *)FSL_FEATURE_SPIFI_START_ADDR;
/* Init the boards */
/* attach 12 MHz clock to FLEXCOMM0 (debug console) */
CLOCK_AttachClk(BOARD_DEBUG_UART_CLK_ATTACH);
/* attach 12 MHz clock to SPI3 */
CLOCK_AttachClk(kFRO12M_to_FLEXCOMM9);
BOARD_InitPins();
UartDebug_InitPins();
BOARD_BootClockFROHF96M();
BOARD_InitDebugConsole();
PRINTF("SPIFI flash polling example started \r\n");
/* Set SPIFI clock source */
CLOCK_AttachClk(kFRO_HF_to_SPIFI_CLK);
sourceClockFreq = CLOCK_GetSpifiClkFreq();
/* Set the clock divider */
CLOCK_SetClkDiv(kCLOCK_DivSpifiClk, sourceClockFreq / EXAMPLE_SPI_BAUDRATE, false);
/* Initialize SPIFI */
SPIFI_GetDefaultConfig(&config);
SPIFI_Init(EXAMPLE_SPIFI, &config);
/* Enable Quad mode */
enable_quad_mode();
/* Setup memory command */
SPIFI_SetMemoryCommand(EXAMPLE_SPIFI, &command[READ]);
/* Set the buffer */
for (i = 0; i < PAGE_SIZE; i++)
{
g_buffer = i;
}
/* Reset the SPIFI to switch to command mode */
SPIFI_ResetCommand(EXAMPLE_SPIFI);
EnableIRQ(SPIFI0_IRQn);
while(1)
{
/* Write enable */
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[WRITE_ENABLE]);
/* Set address */
SPIFI_SetCommandAddress(EXAMPLE_SPIFI, FSL_FEATURE_SPIFI_START_ADDR);
/* Erase sector */
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[ERASE_SECTOR]);
/* Check if finished */
check_if_finish();
/* Program page */
while (page < (SECTOR_SIZE / PAGE_SIZE))
{
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[WRITE_ENABLE]);
SPIFI_SetCommandAddress(EXAMPLE_SPIFI, FSL_FEATURE_SPIFI_START_ADDR + page * PAGE_SIZE);
SPIFI_SetCommand(EXAMPLE_SPIFI, &command[PROGRAM_PAGE]);
for (i = 0; i < PAGE_SIZE; i += 4)
{
for (j = 0; j < 4; j++)
{
data |= ((uint32_t)(g_buffer[i + j])) << (j * 8);
}
SPIFI_WriteData(EXAMPLE_SPIFI, data);
data = 0;
}
page++;
check_if_finish();
}
/* Reset to memory command mode */
SPIFI_ResetCommand(EXAMPLE_SPIFI);
SPIFI_SetMemoryCommand(EXAMPLE_SPIFI, &command[READ]);
// SPIFI_SetMemoryCommand(EXAMPLE_SPIFI, &command[6]); //kerry add
for (i = 0; i < SECTOR_SIZE; i++)
{
val = (uint8_t *)(FSL_FEATURE_SPIFI_START_ADDR + i);
if (*val != g_buffer[i % PAGE_SIZE])
{
PRINTF("Data error in address 0x%x, the value in memory is 0x%x\r\n", i, *val);
err++;
}
}
if (err == 0)
{
PRINTF("All data written is correct!\r\n");
}
PRINTF("SPIFI Polling example Finished!\r\n");
}
// while (1)
// {
// }
}
发现程序只跑一次,无法循环擦除-写-读
最佳答案
楼主你好,请看下LPC54608 user manual 上面这句话:
SPIFI cannot switch over from Memory Mode to Command mode and vice versa without writing 1 to the RESET bit in the SPIFI Status Register and polling u ...
|
|