怎样校验avr内部的flash是否正确
怎样校验avr片内的flash是否意外修改过呢?我想了两个办法:1.在bootload里面写一段代码读出rww里面的内容。
2.直接在应用区(main函数)读取片内flash,并校验(我使用的是ICCAVR编译器)。
办法1,不会写读出的代码,在网上找了一篇马潮老师的文章,只有写入的函数。办法2,不知道地址怎么表示,函数怎样写。
希望哪位大侠不吝赐教,给了例子也可以,呵呵 为什么要校验??只听说过EEPROM会被修改啊, 防止意外flash意外的修改,比如某一位因静电发生变化,或者某一页发生变。
这种情况在批量产品销售时,是会发生的。 编程器都有效验的功能! 是的,编程器可以,但不能一直手动校验
我是这样想的,每一次机器启动都自动crc校验一次,如果校验值错误,就进入故障状态。 除非你不加密,熔丝位被写了就无法再效验了 熔丝位写了,bootload自编程也不能读么?
不加密也可以,关键还是每一次启动保证程序的正确性。
谢谢 谁能给个读取avr 片内 flash 数据的例子呢?感谢 读取片内FLASH啊,不同编译器好像不太一样哦:
ICC下倾向于用汇编或者程序指针;
GCC下只能用 pgm_read_byte 之类的函数。
当然如果 flash>64k,建议用汇编,使用 (RAMPZ:Z) 方式按页访问,指令应该是 ELPM 本帖最后由 qwermhb 于 2012-12-27 20:34 编辑
AVR只能在bootloader区用SPM指令,所以你要写一个bootloader程序,你得在电脑上算好每一页FLASH的crc校验码,然后在bootloader 里 读取一页FLASH后校验,然后与算好的校验码作对比,对比正确在读下一页FLASH,全部正确后跳转到用户程序,,
论坛里面有个通用BOOTLOADER 里面有读flash的代码
只知道这么多了,希望对你有帮助啊
谢谢,我找一下了
页:
[1]