硬汉嵌入式论坛

 找回密码
 立即注册
查看: 1040|回复: 5
收起左侧

[技术讨论] 写FLASH失败

[复制链接]

2

主题

11

回帖

17

积分

新手上路

积分
17
发表于 2024-8-7 09:15:48 | 显示全部楼层 |阅读模式
本帖最后由 wbgbg20002000 于 2024-8-7 09:38 编辑

求助采用STM32G473CBT6,  写片内FLASH失败,代码如下:
        //.ROM_D0 :ER_IROM1 0x08000000 0x00020000
         __attribute__((section(".ROM_D0"))) static uint64_t Key_Flash=(uint64_t)(-1);  
    __IO  uint64_t  Key_ID=0x1234567812345678;
    __HAL_FLASH_PREFETCH_BUFFER_DISABLE();   //关闭FLASH预取缓冲区
    if((uint64_t)(-1)==Key_Flash)
    {               
        HAL_FLASH_Unlock();
        __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_OPTVERR);
        HAL_FLASH_Program(FLASH_TYPEPROGRAM_DOUBLEWORD, (uint32_t)&Key_Flash, Key_ID);
        HAL_FLASH_Lock();
    }



回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117530
QQ
发表于 2024-8-7 10:35:28 | 显示全部楼层
代码太少,看不出来有什么问题,另外方式返回值类型是什么,先执行擦除没
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2024-8-7 10:43:11 | 显示全部楼层
eric2013 发表于 2024-8-7 10:35
代码太少,看不出来有什么问题,另外方式返回值类型是什么,先执行擦除没

Key_Flash被初始化为0xFFFFFFFFFFFFFFFF,   是否无需擦除
回复

使用道具 举报

10

主题

56

回帖

86

积分

初级会员

积分
86
发表于 2024-8-7 14:44:45 | 显示全部楼层
手册上说,先清标志位,再解锁。是不是这个原因
回复

使用道具 举报

2

主题

11

回帖

17

积分

新手上路

积分
17
 楼主| 发表于 2024-8-7 15:14:33 | 显示全部楼层
quanshimutou 发表于 2024-8-7 14:44
手册上说,先清标志位,再解锁。是不是这个原因

刚测试了,先清标志位,再解锁,也写不进去
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2024-8-9 15:47:45 | 显示全部楼层
其实写flash没有那么复杂,可以照着这颗芯片Reference Manual描述的步骤自己写SFR一步步完成,或者在调用库API的过程中观察flash相关那几个SFR的值,根据状态和错误进行修改与调试。
网上查了这颗芯片,可能需要注意的点有:1)64 bit双字+8-bit ECC写;2)解锁正确才能写;3)BSY不置位才能写。
建议楼主先将目标页擦除一遍再写看看。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-8-12 20:02 , Processed in 0.040936 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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