解决中性光写flash闪烁问题

This commit is contained in:
2026-07-29 11:27:02 +08:00
parent 7b0bf78309
commit 46e9db0796
7 changed files with 181 additions and 16 deletions
@@ -340,6 +340,10 @@ __RAM_CODE static uint8_t xc_fmc_spi_flash_status(void)
return sta[1];
}
__RAM_CODE __WEAK void xc_fmc_spi_flash_busy_hook(void)
{
}
/**
****************************************************************************************
* @brief xc_fmc_spi_flash_wait_busy
@@ -354,8 +358,14 @@ __RAM_CODE static uint8_t xc_fmc_spi_flash_status(void)
*/
__RAM_CODE static void xc_fmc_spi_flash_wait_busy(void)
{
while ((xc_fmc_spi_flash_status() & PUYA_FLASH_STATUS_WIP_SET))
;
for (;;) {
xc_fmc_spi_flash_busy_hook();
if ((xc_fmc_spi_flash_status() &
PUYA_FLASH_STATUS_WIP_SET) == 0U)
break;
}
xc_fmc_spi_flash_busy_hook();
}
/**
@@ -472,6 +482,30 @@ __RAM_CODE void xc_fmc_spi_flash_erase_page(uint32_t addr)
* @retval void
****************************************************************************************
*/
__RAM_CODE void xc_fmc_spi_flash_write_16bytes(uint32_t addr, uint8_t *data)
{
uint8_t cmd[16 + 4] = {0};
xc_fmc_spi_flash_wait_busy();
xc_fmc_spi_flash_write_enable();
xc_fmc_spi_flash_wait_busy();
cmd[0] = CMD_PAGE_PROGRAM;
cmd[1] = addr >> 16;
cmd[2] = addr >> 8;
cmd[3] = addr;
ram_memcpy_bytes(&cmd[4], data, 16);
xc_fmc_status_wait_idle();
xc_fmc_spi_enable(FMC_SSI_CTRL0_DFS_LEN_32BIT);
xc_fmc_spi_write_nbyte(cmd, sizeof(cmd));
xc_fmc_spi_flash_wait_busy();
xc_fmc_spi_disable();
}
__RAM_CODE void xc_fmc_spi_flash_write_page(uint32_t addr, uint8_t *data,
uint16_t size)
{
@@ -293,6 +293,7 @@ void xc_fmc_spi_flash_wait_busy(void);
void xc_fmc_spi_flash_write_enable(void);
void xc_fmc_spi_flash_erase_sector(uint32_t addr);
void xc_fmc_spi_flash_erase_page(uint32_t addr);
void xc_fmc_spi_flash_write_16bytes(uint32_t addr, uint8_t *data);
void xc_fmc_spi_flash_write_page(uint32_t addr, uint8_t *buff,
uint16_t size);
void xc_fmc_spi_flash_read_page(uint32_t addr, uint8_t *buff,