打印
[技术问答]

N9H20K51 w25q246 spi操作

[复制链接]
519|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
probedog|  楼主 | 2021-1-8 16:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
官方例程只有读写操作, flash 写之前要擦出,官方例程没有做处理
所以想问下各位有没有做spi flash这部分的,如果有处理过的写之前擦出的例程,请发一下参考。谢谢

使用特权

评论回复
沙发
jcky001| | 2021-3-5 09:54 | 只看该作者
spiFlashInit();

        sysprintf("Erase all SpiFlash\n");
        spiFlashEraseAll();

        sysprintf("\tWrite SpiFlash\n");
        spiFlashWrite(0, TEST_SIZE, (UINT32 *)pSrc);

        sysprintf("\tRead and Compare SpiFlash\n");
        spiFlashRead(0, TEST_SIZE, (UINT32 *)pDst);

使用特权

评论回复
板凳
twjiang| | 2021-3-25 14:31 | 只看该作者
参考:https://github.com/OpenNuvoton/N9H20_emWin_NonOS/tree/master/Tools/MassProduction_Tools/SpiWriter

int usiEraseSector(UINT32 addr, UINT32 secCount)
{
    int volatile i;

    if ((addr % (64*1024)) != 0)
        return -1;

    if(!g_4byte_adderss)
    {
        if(addr & 0xFF000000)
        {
            Enter4ByteMode();
            g_4byte_adderss = TRUE;
            PRINTF("SPI 4 Byte Address Mode Enable (R)\n");
        }
        else if ((addr+secCount*64*1024-1) & 0xFF000000)
        {
            Enter4ByteMode();
            g_4byte_adderss = TRUE;
            PRINTF("SPI 4 Byte Address Mode Enable (W1)\n");
        }
    }

    for (i=0; i<secCount; i++)
    {
        usiWriteEnable();

        outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) | 0x01);  /* CS0 */

        /* erase command */
        outpw(REG_SPI0_TX0, 0xd8);
        spiTxLen(0, 0, 8);
        spiActive(0);

        /* address */
        outpw(REG_SPI0_TX0, addr+i*64*1024);
        if(g_4byte_adderss)
            spiTxLen(0, 0, 32);
        else
            spiTxLen(0, 0, 24);
        spiActive(0);

        outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) & 0xfe);  /* CS0 */

        /* check status */
        usiCheckBusy();
    }
    return Successful;
}

int usiEraseAll(void)
{
    usiWriteEnable();

    outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) | 0x01);  /* CS0 */

    outpw(REG_SPI0_TX0, 0xc7);
    spiTxLen(0, 0, 8);
    spiActive(0);

    outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) & 0xfe);  /* CS0 */

    /* check status */
    outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) | 0x01);  /* CS0 */

    outpw(REG_SPI0_TX0, 0x05);
    spiTxLen(0, 0, 8);
    spiActive(0);

    /* get status */
    outpw(REG_SPI0_TX0, 0xff);
    spiTxLen(0, 0, 8);
    spiActive(0);
    if (((inpw(REG_SPI0_RX0) & 0xff) & 0x01) != 0x01)
    {
        outpw(REG_SPI0_SSR, inpw(REG_SPI0_SSR) & 0xfe);  /* CS0 */
        return 0;       /* ready */
    }
    else
        return 0xFF;    /* busy */
}

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

376

主题

2009

帖子

3

粉丝