CMT2380F32模块开发6-flash例程

Posted andylauren

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CMT2380F32模块开发6-flash例程相关的知识,希望对你有一定的参考价值。

本设备包含一颗 32kByte 容量的 FLASH 存储器,共划分为 64 个 Sector,每个 Sector 容量为 512Byte。本模块支持对该存储器的擦除、编程以及读取操作。此外,本模块支持对 FLASH 存储器擦写的保护,以及控制寄存器的写保护。

如果是初学者不建议使用这个做离线数据保存,还是老老实实外加eeprom吧,除非你明确的直到你的代码用了哪些flash,哪些falsh没有被使用。如果你是大神,可以使用这个功能做升级。

本样例展示FLASH的擦写功能,包括Sector擦除,字节/半字/字写功能。

en_result_t FlashWriteTest(void)

    en_result_t enResult = Error;
    uint32_t u32Addr = 0x3ff0;
    uint8_t u8Data = 0x5a;
    uint16_t u16Data = 0x5a5a;
    uint32_t u32Data = 0x5a5a5a5a;

    Flash_Init(FlashInt, 0);

    Flash_SectorErase(u32Addr);

    enResult = Flash_WriteByte(u32Addr, u8Data);
    if (Ok == enResult) 
        if (*((volatile uint8_t*)u32Addr) == u8Data) 
            enResult = Ok;
         else 
            return enResult;
        
     else 
        enResult = Error;
        return enResult;
    

    u32Addr += 2;
    enResult = Flash_WriteHalfWord(u32Addr, u16Data);
    if (Ok == enResult) 
        if (*((volatile uint16_t*)u32Addr) == u16Data) 
            enResult = Ok;
         else 
            return enResult;
        
     else 
        return enResult;
    

    u32Addr += 2;
    enResult = Flash_WriteWord(u32Addr, u32Data);
    if (Ok == enResult) 
        if (*((volatile uint32_t*)u32Addr) == u32Data) 
            enResult = Ok;
         else 
            return enResult;
        
     else 
        return enResult;
    

    return enResult;

这是它的测试代码,就是对0x3ff0地址进行字节/半字/字 擦写读过程。读数据是通过指针强制类型转换进行的。

这个例程只能通过打断看,查看FlashWriteTest的返回结果。

单独跑这个程序都能成功,要是自己写的程序就不能保证了。

以上是关于CMT2380F32模块开发6-flash例程的主要内容,如果未能解决你的问题,请参考以下文章

CMT2380F32模块开发3-GPIO例程

CMT2380F32模块开发3-GPIO例程

CMT2380F32模块开发5-CLK例程

CMT2380F32模块开发5-CLK例程

CMT2380F32模块开发7-reset例程

CMT2380F32模块开发7-reset例程