搜索
bottom↓
回复: 10

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

[复制链接]

出0入0汤圆

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

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-12-27 10:03:42 | 显示全部楼层
为什么要校验??只听说过EEPROM会被修改啊,

出0入0汤圆

 楼主| 发表于 2012-12-27 10:32:48 | 显示全部楼层
防止意外flash意外的修改,比如某一位因静电发生变化,或者某一页发生变。
这种情况在批量产品销售时,是会发生的。

出0入0汤圆

发表于 2012-12-27 11:02:46 | 显示全部楼层
编程器都有效验的功能!

出0入0汤圆

 楼主| 发表于 2012-12-27 11:10:11 | 显示全部楼层
是的,编程器可以,但不能一直手动校验
我是这样想的,每一次机器启动都自动crc校验一次,如果校验值错误,就进入故障状态。

出0入0汤圆

发表于 2012-12-27 11:50:34 | 显示全部楼层
除非你不加密,熔丝位被写了就无法再效验了

出0入0汤圆

 楼主| 发表于 2012-12-27 12:29:18 | 显示全部楼层
熔丝位写了,bootload自编程也不能读么?
不加密也可以,关键还是每一次启动保证程序的正确性。
谢谢

出0入0汤圆

 楼主| 发表于 2012-12-27 13:35:46 | 显示全部楼层
谁能给个读取avr 片内 flash 数据的例子呢?感谢

出200入2554汤圆

发表于 2012-12-27 18:22:24 | 显示全部楼层
读取片内FLASH啊,不同编译器好像不太一样哦:

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

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

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

出0入0汤圆

发表于 2012-12-27 20:06:58 | 显示全部楼层
本帖最后由 qwermhb 于 2012-12-27 20:34 编辑

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

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

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


出0入0汤圆

 楼主| 发表于 2012-12-28 12:23:25 | 显示全部楼层
谢谢,我找一下了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-24 05:23

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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