lntech 发表于 2012-12-27 09:40:06

怎样校验avr内部的flash是否正确

怎样校验avr片内的flash是否意外修改过呢?
我想了两个办法:1.在bootload里面写一段代码读出rww里面的内容。
                        2.直接在应用区(main函数)读取片内flash,并校验(我使用的是ICCAVR编译器)。
办法1,不会写读出的代码,在网上找了一篇马潮老师的文章,只有写入的函数。办法2,不知道地址怎么表示,函数怎样写。
希望哪位大侠不吝赐教,给了例子也可以,呵呵

qwermhb 发表于 2012-12-27 10:03:42

为什么要校验??只听说过EEPROM会被修改啊,

lntech 发表于 2012-12-27 10:32:48

防止意外flash意外的修改,比如某一位因静电发生变化,或者某一页发生变。
这种情况在批量产品销售时,是会发生的。

starli 发表于 2012-12-27 11:02:46

编程器都有效验的功能!

lntech 发表于 2012-12-27 11:10:11

是的,编程器可以,但不能一直手动校验
我是这样想的,每一次机器启动都自动crc校验一次,如果校验值错误,就进入故障状态。

Soul.art 发表于 2012-12-27 11:50:34

除非你不加密,熔丝位被写了就无法再效验了

lntech 发表于 2012-12-27 12:29:18

熔丝位写了,bootload自编程也不能读么?
不加密也可以,关键还是每一次启动保证程序的正确性。
谢谢

lntech 发表于 2012-12-27 13:35:46

谁能给个读取avr 片内 flash 数据的例子呢?感谢

t3486784401 发表于 2012-12-27 18:22:24

读取片内FLASH啊,不同编译器好像不太一样哦:

ICC下倾向于用汇编或者程序指针;

GCC下只能用 pgm_read_byte 之类的函数。

当然如果 flash>64k,建议用汇编,使用 (RAMPZ:Z) 方式按页访问,指令应该是 ELPM

qwermhb 发表于 2012-12-27 20:06:58

本帖最后由 qwermhb 于 2012-12-27 20:34 编辑

AVR只能在bootloader区用SPM指令,所以你要写一个bootloader程序,你得在电脑上算好每一页FLASH的crc校验码,然后在bootloader 里 读取一页FLASH后校验,然后与算好的校验码作对比,对比正确在读下一页FLASH,全部正确后跳转到用户程序,,

论坛里面有个通用BOOTLOADER   里面有读flash的代码

只知道这么多了,希望对你有帮助啊


lntech 发表于 2012-12-28 12:23:25

谢谢,我找一下了
页: [1]
查看完整版本: 怎样校验avr内部的flash是否正确