查看: 4021|回复: 3

[已解决] LPC54608 spifi 不能循环读写

[复制链接]

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
发表于 2018-4-3 19:04:16 | 显示全部楼层 |阅读模式
代码来源: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 ...
回复

使用道具 举报

该用户从未签到

4

主题

18

帖子

0

注册会员

Rank: 2

积分
146
最后登录
2018-10-23
发表于 2018-4-3 21:31:46 | 显示全部楼层
请加一下 我的qq 一块探讨一下:1831974697
回复 支持 反对

使用道具 举报

该用户从未签到

61

主题

233

帖子

7

高级会员

Rank: 4

积分
750
最后登录
2021-1-25
 楼主| 发表于 2018-4-4 09:12:36 | 显示全部楼层
dojery 发表于 2018-4-3 21:31
请加一下 我的qq 一块探讨一下:1831974697

有么问题发帖交流
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24871
最后登录
2025-7-18
发表于 2018-4-4 15:35:57 | 显示全部楼层
楼主你好,请看下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 until it is cleared by hardware to ensure that the current mode has been aborted.

这个应该就是你不能重复读写的原因。 你需要在SPIFI status 基础器的RESET位写1,并且等待它被清除掉。
希望能帮到你。
如果还有问题,欢迎继续交流!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 23:18 , Processed in 0.093007 second(s), 25 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表