打印
[技术问答]

HC32L130读写FLASH问题

[复制链接]
5039|15
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
边缘天空|  楼主 | 2020-9-11 20:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
今天在试验官方例程读写FLASH时,发现当FLASH为0xff时,读写正常,再次对同一地址读写时,程序死在校验循环里(此时该FLASH地址内容为非0XFF),哪位大侠遇到这种情况,请指点一下,万分感谢!
int32_t main(void)
{
    uint32_t          u32Addr    = 0xff00;
    uint8_t           u8TestData = 0x5a;      
   
    ///< 确保初始化正确执行后方能进行FLASH编程操作,FLASH初始化(编程时间,休眠模式配置)
    while(Ok != Flash_Init(1, TRUE))
    {
        ;
    }
   
    ///< FLASH目标扇区擦除
    while(Ok != Flash_SectorErase(u32Addr))
    {
        ;
    }
   
    for (u32Addr=0xFF00; u32Addr<0x10000; u32Addr++)
    {
        ///< FLASH 字节写、校验
        if (Ok == Flash_WriteByte(u32Addr, u8TestData))
        {
            while(*((volatile uint8_t*)u32Addr) != u8TestData)  ///< 如果写入的数据不对,在此处死循环
            {
                ;
            }
        }
    }
   
    while (1);
}

使用特权

评论回复
沙发
martinhu| | 2020-9-15 14:33 | 只看该作者
Flash不是EEPROM,同一个地址,擦除一次,只能写一次,不能重复写。
另外,擦除的最小单位是扇区……

使用特权

评论回复
板凳
caigang13| | 2020-9-15 18:11 | 只看该作者
没明白描述

使用特权

评论回复
评论
martinhu 2020-9-16 09:02 回复TA
flash的一个扇区擦除之后,该扇区内的所有地址的数据都是0xFF,然后你可以对该扇区内的每个地址写一次,但是,只能写一次,因为flash编程,是把bit从1改成0,而不能把0改成1,所有扇区内的同一个地址数据,擦除一次之后,只能写一次,明白了吗? 
地板
chenjun89| | 2020-9-15 18:27 | 只看该作者
死在哪个操作的校验循环啊?

使用特权

评论回复
5
边缘天空|  楼主 | 2020-9-17 06:40 | 只看该作者
martinhu 发表于 2020-9-15 14:33
Flash不是EEPROM,同一个地址,擦除一次,只能写一次,不能重复写。
另外,擦除的最小单位是扇区…… ...

我再次写时又对该扇进行了扇区擦除然后才写的,是不是FLASH存储区在程序运行期间不能反复擦除写入操作?应该不可能吧。

使用特权

评论回复
6
嵌入小菜菜| | 2020-9-17 11:53 | 只看该作者
这个帖子不错的,我想问问,FLAsh的精准操作,还是比较实用的。

使用特权

评论回复
7
zhouyong77| | 2020-9-18 07:21 | 只看该作者
再次重新读写是怎么个操作法,贴出来的是一个main函数,重复上电?

使用特权

评论回复
8
Alenfun| | 2021-6-21 17:47 | 只看该作者
出现写成功后,有时读出来出现0xff,头大

使用特权

评论回复
评论
martinhu 2021-6-21 17:54 回复TA
Flash_Init()函数,设置成你运行时候的频率了吗? 
9
生非| | 2021-12-8 22:30 | 只看该作者
顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶

使用特权

评论回复
10
daichaodai| | 2021-12-9 08:25 | 只看该作者
外部flash还是内部啊?

使用特权

评论回复
11
koala889| | 2021-12-28 10:44 | 只看该作者
器件特性,就是写之前,要擦除吧

使用特权

评论回复
12
Alenfun| | 2022-1-17 18:26 | 只看该作者
Alenfun 发表于 2021-6-21 17:47
出现写成功后,有时读出来出现0xff,头大

写flash前没有关中断导致的,,关全局中断后可以了

使用特权

评论回复
13
gouguoccc| | 2022-1-18 08:37 | 只看该作者
flash写之前要先擦除

使用特权

评论回复
14
HC11425| | 2022-1-18 10:36 | 只看该作者
量产源码,仅供参考,HC32L13X系列内部FLASH操作。小华半导体技术支持热线:131 6807 9092 喻生
内部FLASH操作已经封装好了,可以直接调用。

flash_erase_write.zip

589.5 KB

使用特权

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

本版积分规则

3

主题

7

帖子

1

粉丝