搜索
bottom↓
回复: 45

Mega64抄板,抄不到精髓。

[复制链接]

出0入0汤圆

发表于 2012-12-30 14:48:44 来自手机 | 显示全部楼层 |阅读模式
最近搞个项目,抄国外用mage64设计的一个产品,原烧录代码已经被无良的老板破密,只是他还想加一些新的功能。
软件已经抄完,不单止功能差不多,连代码空间都很接近。
现在问题来了,用我的软件发现EEPROM数据丢失,程序写EEPROM 要输入密码,限制比较死,应该不是程序写错。后来做个测试架,在上电读取EEPROM掉电,重复这样做,几十次后真的发现某几个EEPROM被改变,改变位置和值没发现规律。
可烧破解国外的软件,一样的操作上万次也没发现EEPROM上电读取过程中被改变。软件开了4.0vBOD,同-块板。
小弟百思不得其解。请高手们指点一下。唉,老板又要叼人了,去洗洗PP先!

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

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2012-12-30 14:59:19 | 显示全部楼层
你MCU木有问题吧?

出0入0汤圆

发表于 2012-12-30 15:03:05 | 显示全部楼层
解决没有,我也遇到了,后来莫名其妙的好好坏坏的,也是mega64

出0入0汤圆

 楼主| 发表于 2012-12-30 15:13:17 来自手机 | 显示全部楼层
二楼,我用在线下载,测试两个软件用同一单片机同一块板。十秒钟断电上电一次,我的程序半个钟内就有问题,偷的程序三天没问题。

出0入0汤圆

发表于 2012-12-30 15:13:36 | 显示全部楼层
后来上电死等5秒后再运行,问题出现少很多,可能是买的芯片不好使,看起来有打磨过的样子,无语啊。

出0入0汤圆

 楼主| 发表于 2012-12-30 15:15:26 来自手机 | 显示全部楼层
三楼,没解决。老板正叼我,希望兄弟能解救!

出0入0汤圆

 楼主| 发表于 2012-12-30 15:21:57 来自手机 | 显示全部楼层
回五楼,我的也应该是上电电源不定就读EEPROM的问题,不过我已经做了2s多的上电延时。而且不是读错,是内容被改。但偷来的程序为什么没事呢?

出0入0汤圆

发表于 2012-12-30 15:22:25 | 显示全部楼层
1、EEPROM上拉电阻用1.5K试试
2、软件操作上把延时加大点
3、最好硬件上默认EEPROM写保护开启,然后软件去打开写保护,写完了再保护。

出0入0汤圆

发表于 2012-12-30 15:25:47 | 显示全部楼层
wangqing_gxu 发表于 2012-12-30 15:21
回五楼,我的也应该是上电电源不定就读EEPROM的问题,不过我已经做了2s多的上电延时。而且不是读错,是内容 ...

最有可能是你的I2C代码的问题,延时调整试试吧。

出0入42汤圆

发表于 2012-12-30 15:30:49 | 显示全部楼层
你的程序在EEPROM部分的存储结构跟偷来的是一样的吗?说不定人家做了备份和校验的

出0入0汤圆

 楼主| 发表于 2012-12-30 15:35:58 来自手机 | 显示全部楼层
谢8楼!这个-定要试试看。

出0入85汤圆

发表于 2012-12-30 15:36:44 | 显示全部楼层
哈哈,看来LZ也遇到这种问题了,之前论坛中有人说只读不写不会被篡改,但我测试的结果是依然会被篡改,尤其是MCU电源共用的有感性负载的。不知道鬼子是怎么处理的,不知道鬼子用什么编译器,有的编译器会自动避开0单元的,有的则不会,建议LZ外接一只狗,免得PC乱跑,试试我说的吧,试完了把结果也公布出来免得其他人重复提问

出0入0汤圆

 楼主| 发表于 2012-12-30 15:40:03 来自手机 | 显示全部楼层
回十楼,应该不一样,我没做多段备份。看来我要读读看看别人E2ROM是有没备份。
罪过,罪过!

出0入0汤圆

 楼主| 发表于 2012-12-30 15:46:56 来自手机 | 显示全部楼层
板一模一样山载,加个狗老扳肯定会要我的狗命!内部狗已经开了。
我在想,会不会是程序在读EEPROM瞬间掉电产生的,这样跟跑飞关系不大。

出0入0汤圆

 楼主| 发表于 2012-12-30 15:48:59 来自手机 | 显示全部楼层
谢谢各位大侠,天好冷,不过此坛很暧!

出0入0汤圆

发表于 2012-12-30 16:01:00 | 显示全部楼层
my_avr 发表于 2012-12-30 15:30
你的程序在EEPROM部分的存储结构跟偷来的是一样的吗?说不定人家做了备份和校验的 ...

这个可能性比较大.

出0入42汤圆

发表于 2012-12-30 16:19:02 | 显示全部楼层
看这个帖子吧,你的菊花保住了

http://www.amobbs.com/forum.php? ... ght=AVR%2B%2BEEPROM

出0入0汤圆

发表于 2012-12-30 16:40:47 | 显示全部楼层
不是很懂 记得马潮老师的书里有相关的内容。 可以去看看。

出0入0汤圆

 楼主| 发表于 2012-12-30 23:16:48 | 显示全部楼层
liujinhan 发表于 2012-12-30 15:25
最有可能是你的I2C代码的问题,延时调整试试吧。

I2C?
我没用I2C,我用内部EEPROM。

出0入0汤圆

 楼主| 发表于 2012-12-30 23:24:25 | 显示全部楼层
zhzj2007 发表于 2012-12-30 16:01
这个可能性比较大.

不一样,我还没研究别人的是怎么做的。

出0入0汤圆

 楼主| 发表于 2012-12-30 23:28:56 | 显示全部楼层
my_avr 发表于 2012-12-30 16:19
看这个帖子吧,你的菊花保住了

http://www.amobbs.com/forum.php?mod=viewthread&tid=3303172&highlight=A ...

看来是要做备份了,不过EEPROM数据太多,而且不同地方不同用途的数据都没区分好,全部备份又太浪费时间空间,唉!

出0入85汤圆

发表于 2012-12-30 23:46:57 | 显示全部楼层
wangqing_gxu 发表于 2012-12-30 15:46
板一模一样山载,加个狗老扳肯定会要我的狗命!内部狗已经开了。
我在想,会不会是程序在读EEPROM瞬间掉电产 ...

晕了,说错了,正确的说应该加个复位芯片,怎么说成狗了

出0入0汤圆

 楼主| 发表于 2012-12-30 23:54:02 | 显示全部楼层
marshallemon 发表于 2012-12-30 23:46
晕了,说错了,正确的说应该加个复位芯片,怎么说成狗了

没加,想加老板不会同意。
内部开了4。0V BOD

出0入85汤圆

发表于 2012-12-30 23:55:07 | 显示全部楼层
wangqing_gxu 发表于 2012-12-30 23:54
没加,想加老板不会同意。
内部开了4。0V BOD

那个不怎么管用,外加个试试就知道了,1元以内

出0入0汤圆

 楼主| 发表于 2012-12-31 00:30:36 | 显示全部楼层
marshallemon 发表于 2012-12-30 23:55
那个不怎么管用,外加个试试就知道了,1元以内

谢谢兄台。
以前有用过8L是加4。7V复位的,确实没反应过EEPROM丢,
不过有反应7805供不起电,有些7805放上去没办法工作。

这个项目暂时没有加的打算。

出0入0汤圆

 楼主| 发表于 2012-12-31 00:34:50 | 显示全部楼层
my_avr 发表于 2012-12-30 15:30
你的程序在EEPROM部分的存储结构跟偷来的是一样的吗?说不定人家做了备份和校验的 ...

刚才又偷读了一下别人程序的EEPROM,没有做数据备份。
至于校验,就不知道有没有,不过要是没备份,它有校验也没用,最多也就是有问题恢复到默认。

不过,10秒钟断电上电一次,三天它都没事,没备份的话真的不知道人家是怎么做的。

出0入0汤圆

发表于 2012-12-31 07:28:10 | 显示全部楼层
wangqing_gxu 发表于 2012-12-31 00:34
刚才又偷读了一下别人程序的EEPROM,没有做数据备份。
至于校验,就不知道有没有,不过要是没备份,它有 ...

用你的板子烧上原程序,用原板子烧上你的改动程序再测试一下!

出0入0汤圆

 楼主| 发表于 2012-12-31 10:05:54 | 显示全部楼层
xiaodao35 发表于 2012-12-31 07:28
用你的板子烧上原程序,用原板子烧上你的改动程序再测试一下!

都在同一块板上做试验!

出0入0汤圆

 楼主| 发表于 2012-12-31 10:06:25 | 显示全部楼层
xiaodao35 发表于 2012-12-31 07:28
用你的板子烧上原程序,用原板子烧上你的改动程序再测试一下!

也是同一个MCU.

出0入0汤圆

 楼主| 发表于 2012-12-31 10:13:28 | 显示全部楼层
  刚才试了一下,上电时第一时间把EEPROM控制寄存器、地址指针、数据寄存器都清0,其它没动,发现数据写不进EEPROM,不过程序执行操作完成的判断是OK的,不知道为什么?
  也就是说,程序认为已经写EEPROM成功了,不过读出来时发现根本没写进去。
  只是上电时清一下这三个寄存器。

出0入0汤圆

发表于 2012-12-31 10:15:03 | 显示全部楼层
wangqing_gxu 发表于 2012-12-31 10:06
也是同一个MCU.

抄来的代码和你修改的差异大吗?熔丝位一样吗?不行就用原版反汇编后再编译,一点点加修改功能测试!

出0入0汤圆

 楼主| 发表于 2012-12-31 10:45:38 | 显示全部楼层
xiaodao35 发表于 2012-12-31 10:15
抄来的代码和你修改的差异大吗?熔丝位一样吗?不行就用原版反汇编后再编译,一点点加修改功能测试! ...

熔断丝都是我自己设置的,是一样的.除非程序可以设置熔断丝.
说白了就是老板把别人的MCU破解了给BIN我,叫我做一模一样的功能.

反汇编现在没做,程序代码50多K,全部搞完那太庞大了.

出0入0汤圆

 楼主| 发表于 2012-12-31 10:57:18 | 显示全部楼层
说一下我的测试方法:
测试方法是做一个测试架供电,上电后0-10秒钟内断电,下次断电时会延时多10ms再断电,如此整死它.上电后程序开始都会读EEPROM,而我用到的EEPROM是08H-120H

出0入0汤圆

发表于 2012-12-31 11:03:54 | 显示全部楼层
可怜的孩纸,大过年的都不让消停!

出0入0汤圆

 楼主| 发表于 2012-12-31 13:27:02 | 显示全部楼层
wangqing_gxu 发表于 2012-12-31 10:13
刚才试了一下,上电时第一时间把EEPROM控制寄存器、地址指针、数据寄存器都清0,其它没动,发现数据写不进 ...

对不起,搞错了.EEPROM这样可以写,现在正在测试.

出0入0汤圆

 楼主| 发表于 2012-12-31 13:28:27 | 显示全部楼层
EMOSYN 发表于 2012-12-31 11:03
可怜的孩纸,大过年的都不让消停!

唉,我也不想呀!
谁叫咱嗲不争气呀!

出0入0汤圆

 楼主| 发表于 2013-1-2 10:03:50 | 显示全部楼层
上电第一时间清EEPROM控制寄存器,读写程序返回前清EEPROM控制寄存器,又测试了两天,好像效果好了很多,只被改了第一BYTE数据(地址不是00),
读和写我都是一次性读完或写完200个BYTE.

按这样推断,上电时EEPROM被偷偷改的可能性很大,因为没做上电处理之前,一般测试4个钟就发现有几个BYTE被改.
不过处理之后,测试两天还有一个BYTE被改,也许掉电时,程序跑进我的EEPROM修改子程序..

出0入0汤圆

发表于 2013-1-2 14:06:47 | 显示全部楼层
wangqing_gxu 发表于 2013-1-2 10:03
上电第一时间清EEPROM控制寄存器,读写程序返回前清EEPROM控制寄存器,又测试了两天,好像效果好了很多,只被改 ...

板子上都是有高低两种电压吧,如输入12V,输出5V给单片机用。

这样,用一个光耦,原边接高电压12V,限流电阻5.1K,副边接5V和IO口。
当输入电压存在,光耦导通,IO得到高电平,然后写eeprom程序里每一行都加上“if  IO==1”的条件,当高电压存在的时候可以正常读写.
反之,输入电压不存在,IO就木有高电平,即使5V那边勉强还有几V的残余电量在支撑单片机乱跑,但因为IO已经是低电平了,所以程序里的条件受到了限制,跑到那程序段也执行不了。

出0入0汤圆

 楼主| 发表于 2013-1-2 14:50:17 | 显示全部楼层
tbkmcjl 发表于 2013-1-2 14:06
板子上都是有高低两种电压吧,如输入12V,输出5V给单片机用。

这样,用一个光耦,原边接高电压12V,限流 ...

谢谢提供方案!
您的方案相当于加了个EEPROM使能端,电压不正常时不能写.不错.

现在我是想要找最细小的原因,从这两年(前几天到现在)得出的结果看:
1 上电容易改写EEPROM,也许是上电时电压不稳的干扰,读EEPROM变成写EEPROM,毕竟读和写的控制位只差1位.
2 掉电也可能改写EEPROM.不过这个跟个人写软件习惯有关.程式正常运行经常判断是否要写EEPROM的,或正常运行经常读EEPROM的,可能比较危险.因为读写只差1位,刚好到这条指令时电源出现突变怎么办?

至于多断备份,对第一种比较有效,第二种它是通过我们自己的程序改写EEPROM,那么它也会改写备份.

出0入0汤圆

发表于 2013-1-2 15:15:49 | 显示全部楼层
本帖最后由 tbkmcjl 于 2013-1-2 15:30 编辑
wangqing_gxu 发表于 2013-1-2 14:50
谢谢提供方案!
您的方案相当于加了个EEPROM使能端,电压不正常时不能写.不错.


对上电刚开始时不稳定带来的干扰,可以用定时器搞个loading的时间,比如3秒,过了3秒才准许读写eeprom(读写函数里面加条件)。
对掉电的干扰,就增加读写的麻烦,如我之前提到的光耦。
如果不想改硬件,就用软件式的读写障碍。以下是示例。

uchar oh_my_god = 0;  //声明麻烦变量

void read_char(uchar addr)  
{
    if(oh_my_god==0xAA)
    {
           读eeprom程序段;
           读eeprom程序段;
    }
  
          oh_my_god=0;

}

void wr_char(uchar addr,uchar dat)  
{
        if(oh_my_god==0xBB)
    {
           写eeprom程序段;
           写eeprom程序段;
    }
              oh_my_god=0;
}


void main()
{
        我想写一个字节到0x00啦。。。
         所以呢,先执行
        oh_my_god=0xbb;   //写入先行条件
        wr_char(0x00,123);
       读么,如同,
        oh_my_god=0xaa;    //读取先行条件
       result=read_char(0x00);
}

如果指针换乱,程序跑进了read_char和wr_char函数,木有关系,因为先行条件oh_my_god并没赋特殊值,所以eeprom程序段拒绝执行这样的指令。
如果程序跑进了先行条件赋值指令,咋办?由于赋值有两种数值,所以就算跑进了     oh_my_god=0xaa;    //读取先行条件 这里,然后再跑进写eeprom的函数,由于先行条件不对,又给捣蛋鬼带来了50%几率的障碍。

如果想给捣蛋鬼带来更多的麻烦,可以在程序每一行无关eeprom的地方都加个    oh_my_god=0;  又加大了随机读写的障碍。
想制造更多麻烦么?将条件多设计几个。。。。。

出0入0汤圆

发表于 2013-1-2 15:50:06 来自手机 | 显示全部楼层
tbkmcjl 发表于 2013-1-2 15:15
对上电刚开始时不稳定带来的干扰,可以用定时器搞个loading的时间,比如3秒,过了3秒才准许读写eeprom( ...

这个方法好啊

出0入0汤圆

 楼主| 发表于 2013-1-2 15:59:40 | 显示全部楼层
tbkmcjl 发表于 2013-1-2 15:15
对上电刚开始时不稳定带来的干扰,可以用定时器搞个loading的时间,比如3秒,过了3秒才准许读写eeprom( ...

谢谢!
不错的方法!

出0入0汤圆

发表于 2013-1-3 11:03:25 | 显示全部楼层
my_avr 发表于 2012-12-30 15:30
你的程序在EEPROM部分的存储结构跟偷来的是一样的吗?说不定人家做了备份和校验的 ...

同意,很多机器都会这样写的,这样能有效的检验数据的正确性?

出0入85汤圆

发表于 2013-1-11 11:51:12 | 显示全部楼层
LZ又有什么新的测试结果?

出0入0汤圆

发表于 2013-1-21 12:50:53 | 显示全部楼层
看来楼主已经解决了问题,
也不出来分享下办法,有点不地道啊

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-8-27 04:18

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

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