硬汉嵌入式论坛

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

[FileX] fx_file_read引起PGAERR,PGSERR

[复制链接]

25

主题

176

回帖

251

积分

高级会员

积分
251
发表于 2024-12-9 22:47:23 | 显示全部楼层 |阅读模式
如题,在fx_file_read时,FLASH报错,只好在每次写64bit长度数据时先先清除错误。

BOOT里面从SD卡读固件,然后以64位长度写FLASH。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-10 08:28:07 | 显示全部楼层
当前的实现是从FileX方式从SD卡读取固件,然后调用Flash API更新固件吗。

还有就是你描述的read时报Flash错误,这个确定是读取完后再做的Flash写操作吧
回复

使用道具 举报

25

主题

176

回帖

251

积分

高级会员

积分
251
 楼主| 发表于 2024-12-10 14:18:13 | 显示全部楼层
eric2013 发表于 2024-12-10 08:28
当前的实现是从FileX方式从SD卡读取固件,然后调用Flash API更新固件吗。

还有就是你描述的read时报Flas ...

是的。

先把要写的区域全部擦除掉,这时没报错的。然后再从SD中分批读取固件,再往FLASH中写,结果就在从SD中读固件时,就报FLASH错了。现在是在执行写的时候,先把错误清除掉,然后写成功了,等下一次写的时候还是得先把错误清除掉,不然会因为读SD卡引起FLASH报错,会写不成功。

现在一次读512字节出来,然后一次写8字节,如果不做处理的话,第一次8字节会写不成功,后面的会成功。反正从SD卡读的时候会FLASH错误。之前用FREERTOS或裸机都没出问题,现在用THREADX做BOOT,就出这个问题了。
回复

使用道具 举报

25

主题

176

回帖

251

积分

高级会员

积分
251
 楼主| 发表于 2024-12-10 15:19:47 | 显示全部楼层
eric2013 发表于 2024-12-10 08:28
当前的实现是从FileX方式从SD卡读取固件,然后调用Flash API更新固件吗。

还有就是你描述的read时报Flas ...

差点忘了,代码里面执行过这段代码就会出现这种情况,但是,就算不接仿真器,也会出现FLASH错误的情况。

[C] 纯文本查看 复制代码
        HAL_FLASHEx_OBGetConfig(&OptionsBytesStruct);
        
        if(OptionsBytesStruct.RDPLevel == OB_RDP_LEVEL_0)
        {
                HAL_FLASH_Unlock();
                HAL_FLASH_OB_Unlock();
                
                __HAL_FLASH_CLEAR_FLAG(FLASH_FLAG_ALL_ERRORS);
                OptionsBytesStruct.OptionType = OPTIONBYTE_RDP;
                OptionsBytesStruct.RDPLevel = OB_RDP_LEVEL_1;
                HAL_FLASHEx_OBProgram(&OptionsBytesStruct);
                
                HAL_FLASH_OB_Lock();
                HAL_FLASH_Lock();
                HAL_FLASH_OB_Launch();                                 
        }
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-11 09:27:23 | 显示全部楼层
ccschen 发表于 2024-12-10 15:19
差点忘了,代码里面执行过这段代码就会出现这种情况,但是,就算不接仿真器,也会出现FLASH错误的情况。
...

你的芯片是不是STM32G系列,之前好几个坛友反馈过类似的清除标志问题。
回复

使用道具 举报

25

主题

176

回帖

251

积分

高级会员

积分
251
 楼主| 发表于 2024-12-11 10:08:16 | 显示全部楼层
eric2013 发表于 2024-12-11 09:27
你的芯片是不是STM32G系列,之前好几个坛友反馈过类似的清除标志问题。

STM32L4的,我推测原因是在线仿真刚执行了加密的指令,但是没重新上电运行完全生效,然后仿真器也挂上的,就有影响,于是,我把仿真器断开,反复测试更新固件,没这个问题。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115434
QQ
发表于 2024-12-12 10:24:17 | 显示全部楼层
ccschen 发表于 2024-12-11 10:08
STM32L4的,我推测原因是在线仿真刚执行了加密的指令,但是没重新上电运行完全生效,然后仿真器也挂上的 ...

没注意你的最关键信息,调试状态不正常。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-25 20:19 , Processed in 0.269740 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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