LY-Bear 发表于 2025-5-29 10:03

关于CW32外设库中FLASH_SetReadOutLevel(uint16_t RdLevel)函数的一些疑惑

在官方提供的L010外设库函数中,FLASH这部分的源文件中的void FLASH_SetReadOutLevel(uint16_t RdLevel)函数中,
发现这个函数中出现了几个魔法数字,分别是

类似秘钥的 0x5A50
可能为设置读保护地址的 0x4000431C
可能为MCU软复位地址的 0x40004370
可能为软复位命令数字的 0x5A5AABCD

这几个数字我在数据手册和用户手册中都没有找到,且这两个裸地址指向
SYSCTRL的地址范围内,且在寄存器列表中并未标出这个地址的寄存器定义

此外,无法在用户手册和数据手册中找到SYSRESETREQ复位怎么去触发,
而只看到设置完读保护等级后,对这块对着未知的0x40004370地址写了0x5A5AABCD
表示能触发MCU复位,很疑惑。

搞这几个魔法数字,真的很迷~
希望官方的人能帮我解答上述问题。

LY-Bear 发表于 2025-5-29 12:31

本帖最后由 LY-Bear 于 2025-5-29 13:02 编辑

在core_cm0plus.h找到SCB结构体,找到SYSRESETREQ在哪里定义了。但是那个0x4000431C和0x40004370地址是啥还没搞清楚。

dffzh 发表于 2025-5-29 13:29

本帖最后由 dffzh 于 2025-5-29 13:36 编辑

确实,我也看了一下,库函数里直接通过将数值写入地址的方式操作了,更合理的应该是加上寄存器宏定义来实现;
使用手册里也没有这几个地址对应的寄存器的说明;魔法数字,一点不假!

实际使用倒是不影响。

dffzh 发表于 2025-5-29 13:31

如果你要使用读保护功能,下面这个帖子你最好是看一下,有读保护操作次数限制的:
https://bbs.21ic.com/icview-3454654-1-1.html

LY-Bear 发表于 2025-5-29 14:15

本帖最后由 LY-Bear 于 2025-5-29 14:16 编辑

dffzh 发表于 2025-5-29 13:31
如果你要使用读保护功能,下面这个帖子你最好是看一下,有读保护操作次数限制的:
https://bbs.21ic.com/ic ...
怎么感觉官方有些地方藏着掖着的?读保护有次数限制也不在用户手册里说,此外,还搞这种魔法数字,挺难评的~

dffzh 发表于 2025-5-29 14:38

LY-Bear 发表于 2025-5-29 14:15
怎么感觉官方有些地方藏着掖着的?读保护有次数限制也不在用户手册里说,此外,还搞这种魔法数字,挺难评 ...厂商可能有自己的见解和原因吧,就看后续此帖有木有专业人士解答了。

hight1light 发表于 2025-6-6 11:45

在CW32L010外设库函数FLASH_SetReadOutLevel中出现的魔法数字(0x5A50、0x4000431C、0x40004370、0x5A5AABCD)未在官方文档中明确标注

teaccch 发表于 2025-6-6 12:52

0x5A50:可能作为密钥或校验值,用于确保读保护等级设置的合法性,防止误操作

miltk 发表于 2025-6-6 14:16

0x4000431C可能指向与读保护设置相关的寄存器地址,用于存储或配置读保护等级。

nuan11nuan 发表于 2025-6-6 16:05

这些地址可能是芯片内部实现的特殊功能寄存器,用于控制读保护等安全功能,但出于安全或设计考虑,未在公开文档中详细标注。

hhdhy 发表于 2025-6-6 18:06

文档更新滞后了吧,官方文档可能未及时更新,导致这些地址信息缺失。

wamed 发表于 2025-6-6 20:23

0x5A5AABCD可能为软复位命令数字,写入该值至特定地址可触发MCU重启,确保读保护等级设置生效。

twinkhahale 发表于 2025-6-7 07:25

0x40004370可能为MCU软复位地址,写入特定值(如0x5A5AABCD)可触发MCU重启以更新读保护等级。

gongqijuns 发表于 2025-6-7 09:01

这些地址可能是厂商自定义的特殊功能地址,用于实现特定的芯片功能。

星星点点didi 发表于 2025-6-7 12:10

查阅官方文档更新,关注官方文档的更新情况,看是否有新增或修改的信息。

gra22ce 发表于 2025-6-7 14:09

建议联系官方技术支持,向芯片厂商的技术支持团队咨询,获取更准确的信息和解决方案。
页: [1]
查看完整版本: 关于CW32外设库中FLASH_SetReadOutLevel(uint16_t RdLevel)函数的一些疑惑