lrqblack 发表于 2022-9-7 10:51:44

STM32如何判断烧录后的第一次上电?

我给STM32外接了一个EEPROM,用于存储上一次关机的配置。正常开机会先读取EEPROM中的参数,恢复上一次保存的配置。
但我希望用烧录器烧写程序后,第一次上电后对EEPROM进行清除,而不是读取之前的配置。
向坛友们求教,如何做到上电后判断是否为烧录后的第一次,而不是正常的断电重启?
谢谢了!

lrqblack 发表于 2022-9-7 14:38:43

谢谢各位,暂时在flash中做了标志,目前可以用的。
之后有时间会考虑使用数据校验。

rei1984 发表于 2022-9-7 10:56:12

思路如下:

1.无论何时读取 EEP rom,进行CRC 校验。 如果 校验不通过, 就 init eeprom parameters


2.EEP 的参数 可以 在不同的 address 上保存3份,如果 第一份 crc error , 则读取第二份,如果 第二份 crc error ,则读取第三份。   如果 第三份 error 。 表示 是 新烧入的程序 ,在进行pamameters 的init

keshipt 发表于 2022-9-7 11:05:25

烧录程序的同时用下载器往FLASH的固定地址写入一个标志位,第一次开机读取后再擦除这个标志位即可

天下乌鸦一般黑 发表于 2022-9-7 11:08:42

看看芯片手册,一般这玩意没刷过,默认都是0xFF...

keshipt 发表于 2022-9-7 11:09:01

标志位文件可以用hex格式,指定好FLASH地址即可,脱机下载器可以一次同时将程序和这个hex的标志位烧录好,比较方便

初音之恋 发表于 2022-9-7 11:10:20

EEPROM里面放一个标识用来判断是否是第一次写入,读出来不相等则认为第一次上电,然后做EEPROM参数初始化同时写入标识, 读出来如果相等则直接读取参数,
同时烧写新的更新程序可以对判断的标识位和默认参数进行修改,这样参数就能自动更新。这种判断的是EEPROM第一次使用。
如果只是判断单片机是否是被烧写,则可以读写片内Flash,烧录器烧写的时候把数据烧录进去,单片机第一次上电读取是否存在该数据然后擦除该数据则为第一次

xzhiwei 发表于 2022-9-7 11:17:21

本帖最后由 xzhiwei 于 2022-9-7 11:19 编辑

读取指定flash地址,如果是0xFF(说明是第一次)就写入flag,
其实如果数据不常写 直接用flash存数据就行了

polarbear 发表于 2022-9-7 12:13:34

rei1984 发表于 2022-9-7 10:56
思路如下:

1.无论何时读取 EEP rom,进行CRC 校验。 如果 校验不通过, 就 init eeprom parameters
(引用自2楼)

CRC 存3份安全么? 我见过有网友是存16份备份的{:lol:}

kitten 发表于 2022-9-7 12:26:36

量产时烧2次 ,第一次的用测试固件做初始化动作。第二次的用正式固件,上电直接用。

wye11083 发表于 2022-9-7 12:31:36

lz只是想知道是不是第一次烧录。。搞那么复杂干吗?烧固件时整片擦除,然后程序启动时简单读一个位置,为0xff时就擦flash然后置数。。

qwe2231695 发表于 2022-9-7 12:46:58

STM32 的 Flash 区放置一个标志,全片擦除后应该是0xffffffff。 可以用于第一次上电判断如果是0xfffffff就擦除eeprom,然后写为flash标志为0xAAAAAAA,

Rabbitoose 发表于 2022-9-7 18:45:39

用STM32的TAMPER功能不行吗?手册只介绍了它的能力,没讲应用场景,但是我觉得从它的内存地址中拿出一个位置来记录这个状态是完全没有问题的。

当然,我并没有实操过。楼主可以试试。
页: [1]
查看完整版本: STM32如何判断烧录后的第一次上电?