关于C8051F040单片机FLASH数据被篡改的问题求助!

2020-01-12 17:20发布


我单位有一款用C8051F040做核心的板子,通过CAN总线驱动A,E两个电机。经常出现某个电机无法驱动的故障,回来重新刷程序就正常了。
过程如下:
1.在实验室测试,加电,板子上报“驱动总线异常”;
2.读取板子F040FLASH上0x0000~0xFFFF数据,存为err.hex文件;
3.重新烧录程序,后板子工作正常。0x0000~0xffff程序存为normal.hex.
4.将err.hex烧录,板子工作又不正常。
5.将normal烧录,板子工作又正常。
6.检查程序中没有对FLASH写操作命令。
问题:
1.为何程序段FLASH被改写?
2.为何改写后其他功能正常,唯独CAN总线不能通信,多次实验都是如此?
3.看F040手册,写明如果从0写1,必须整页清除后再重写,但实际并非如此。
4.为何还会发生数据往后面错一个BYTE的情况?

附件为图 IMG_20190912_110451.jpg (1.5 MB, 下载次数: 0) 下载附件 2019-9-12 12:46 上传
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
arm
1楼-- · 2020-01-13 11:02
本帖最后由 arm 于 2019-9-12 15:52 编辑

复位电路不要用传统的阻容电路,用专用的复位IC,应该问题会解决,以前用这个IC,发现flash改写总是上电或者掉电的时候出现,好像是用了MAX809S就没发现这个问题了
yelong98
2楼-- · 2020-01-13 13:19
 精彩回答 2  元偷偷看……
minomi12345678
3楼-- · 2020-01-13 15:14
统一回复:
1.检查过代码,确实没有写flash指令,不过没有VDD监测;
2.复位电路就是阻容,标准的,但不明白为何改写与复位有关;
3.每次改写的数据不一样。
minomi12345678
4楼-- · 2020-01-13 17:27
错误代码起始地址:00 00 80 XX 为SJMP  XX
正确代码起始地址:02 c4 95 为LJMP c495
第一条跳转就不对了。
modbus
5楼-- · 2020-01-13 19:55
不要用内置的复位电路,不要用阻容复位电路,可外加一片CAT809S,最好使用内部振荡器
momo_li
6楼-- · 2020-01-14 00:53
对比一下读上来的flash,看看是不是真的变了啊,

一周热门 更多>