搜索
bottom↓
回复: 165

[连载]AVR之X档案——2009-11-28 Updated

[复制链接]

出0入296汤圆

发表于 2009-10-28 23:53:04 | 显示全部楼层 |阅读模式
前言
    这是一些关于人们眼中不可思议的“灵异事件”的调查报告。这些事件中,当事人往往在向当局
提交报告后便杳无音信,因此,这些档案中不乏一些缺乏后文和结论的;有些诡异的现象,甚至再也
没有出现过。
  作为一名好事者,虽然不是偶然,但是接触到这些档案的机会却也是难得,久而久之便也可以凭
空记得一些,余是奋笔疾书,以箪同样好事无聊的读者。

  

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

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入296汤圆

 楼主| 发表于 2009-10-28 23:53:17 | 显示全部楼层

X档案001 需要重新启动才能生效的更新
<font color=brown>
[目击报告]
    曾经有来自世界各地的目击者声称,在AVR芯片运行自己编写的Bootloader更新程序后,读取
到的内容仍然是更新前的值,但是在复位以后,内容似乎就“生效了”;也有目击者在执行某一个
Bootloader程序后对其内容进行校验失败,但是复位后就能够校验成功。如此种种。因而,有一种
不知来自何方的揣测,认为ATXXX公司与MicroXXXX有某种神秘联系,以至于在芯片级别加入了“重
启后方可生效”的机制;甚至有人认为,这从硬件的角度证明了WinXXXXXP很多无关紧要的软件安
装也要求“重新启动”的必然性——毕竟,物质基础决定上层建筑。

[调查报告]
    根据对来自各地报告案例收集资料的分析,发现以下共同点:
    1、所有的现象都与Bootloader程序有关
    2、当事人都试图在写入某一段内容后对其进行“校验”,即比较写入值与读取值是否相同;
       当然,毫无疑问,他们都得到了一个“校验错误的结果”
  3、事实上,有一些人曾报告,每次在写入之后读取出来的值都有某种不确定性,或者说随机
       性。
    4、根据对内部资料的清查,Flash写入的时候没有所谓的影子存储器的机制。
    5、更进一步的调查显示:几乎所有已经投入使用的Bootloader系统从来没有遇到过这种情况,
       而报告这种神秘现象的人,往往只是编写了一个测试案例: 尝试写入一个值,然后再读取
       出来。

[典型现象]
    当事人在程序的一开始,编写一个检测程序,检测固定位置的flash内容,如果内容与期望值
不符合,则进入Bootloader程序,并写入期望值,同时重新读取该位置的flash内容进行校验,发
现读取到的内容仍然与写入的值不同——即校验失败。但是,在复位以后,检测程序发现指定位置
的flash内容已经与期望值相同。

[官方解释]
    据ATXXXX的多份文件和资料显示,这种现象被认为是没有正确阅读数据手册的结果。当事人忽
略了一个重要的内容,即,对于RWW区域,每次对其进行写入或者擦除操作以后,系统会自动将RWW
区域锁定,从而无法正常读取其中的内容。必须要执行一个指定的RWW度取使能操作,才能恢复对其
操作的能力。这就解释了上述现象。同时,由于复位会自动开启RWW度取使能,所以出现了“需要重
新启动才能生效”的假象。

[事态结果]
    大部分当事人在接到官方报告后便销声匿迹。也有一部分人坚称其现象依旧,而官方则已无法
复现其症状并附带程序若干进行答复。目前,所有当事人均情绪稳定,周围群众纷纷表示不会受其
影响。

出0入296汤圆

 楼主| 发表于 2009-10-29 00:00:35 | 显示全部楼层

X档案002 无法兑现的承诺
<font color=brown>

[目击报告]
    对于像M88这样的芯片来说,RESET引脚可以通过烧写fuse位的方式关闭RESET引脚的功能
而作为普通引脚使用。官方的说法是,唯一能恢复RESET引脚功能的方法是使用高压编程器。
也就是并行编程的方法。
    有没有想过这样一种情况:为了保护自己的芯片不被破解,某兄将芯片LockBits和Securit
Bits都锁死以后,将M88引脚的RESET功能关闭,同时编写程序一直在该引脚上输出低电平。按
道理来说,使用并行编程器一定能够解除这一状态——执行一个CHIP ERASE。然而,问题就出
在这里,如果你使用的是第三方的并行编程工具,那么是否能成功的解除锁定不得而知。但是
如果你有幸使用官方的STK600,至少在AVR Studio4.16Build638的版本下是无法正常解除的。
至于新版本的AVR Studio是否能解除了这个BUG,就不得而知了。

[典型现象]
    M88 将RESET引脚设置为普通IO,并持续输出低电平,芯片Securit Bit锁死。使用STK600
高压编程模式无法解除以上状况。

[调查报告]
    此系STK600 BUG。在验证过的AVR Studio4 Build638及之前的版本中存在这个问题,在最
新的AVR Studio中是否得到解决,有待验证。其实问题的原因很简单,STK600会检测RESET引脚
的电平,如果其为低电平,则判定为“短路”,因而不允许执行后续的并行编程操作。

[事态结果]
    如果你使用STK600的并行编程模式,请在安装好卡槽和芯片后,将并行编程所需的数据排线
拔下,此时,我们有机会执行CHIP ERASE操作,接下来,请将数据排线插入,再次执行CHIP
ERASE操作。芯片解锁成功。
    然而,不知道是不是中国人的山寨精神给与了我们的方便,很少听到中国玩家抱怨这个BUG,
因而不了了之。该档案列举在此,以供参考。
头像被屏蔽

出0入0汤圆

发表于 2009-10-29 00:00:36 | 显示全部楼层
先置COOL, 再搬个凳子学习。

出0入0汤圆

发表于 2009-10-29 00:02:52 | 显示全部楼层
坐地板,看热闹。

出0入296汤圆

 楼主| 发表于 2009-10-29 00:03:06 | 显示全部楼层

X档案003 假死
<font color=brown>
[目击报告]
    关于官方工具JTAGICE mkII,历来是问题的焦点:破解也罢,克隆也罢,批判仿真器
惯坏了一代工程师也罢,认为仿真器能极大地提高代码调试效率也罢,如此种种,不一而
足,然而有一点毋庸置疑。百分之80的人并能有效地让JTAGICE mkII正常工作。
    档案中,有目击者称,发现使用JTAGICE mkII进行程序仿真时,随机性的程序跑飞,
或者干脆每次都跑飞。

[典型现象]
    1、某中型程序,使用JTAGICE mkII进行仿真时,无法在指定的断点处停止,或者在
某些断点处,每次运行得到的结果都不同。同时,程序下载到芯片中独立运行则一切正常。
    2、程序大小无关,以以下程序为最小示例代码,GCC编译环境:
        void Port_Init()
        {
            ...
        }

        void System_Init(void)
        {
            Port_Init();
            ...
        }

        int main(void)
        {
            System_Init();
            while(1);
        }
      在C语言视图下,直接全速运行,单击暂停,发现PC指针没有停在while(1)处,而是
Flash任意地址。判定程序跑飞。遂使用单步,查找原因,发现每次从System_Init()函数
返回后,PC指针黄色指示消失,程序呈现全速运行状态,单击暂停,发现程序已经跑飞。使
用汇编视图,但步执行,无跑飞症状;返回C视图,再次单步,跑飞。该症状与GCC编译器优
化等级无任何关联。后发现,似乎与使用的编译器也无关联。

[调查报告]
     对于典型现象的第一种,通常是由于用户没有对JTAGICE mkII进行设置所致。JTAGICE
mkII对Mega芯片进行仿真时,要设置目标芯片的工作频率,否则将导致仿真出错。设置的方
法是,首先无条件的进入仿真模式,然后选择Tools->JTAGICE mkII Options,在对话框中
设置所要仿真芯片的实际工作频率。设置后,症状通常解除。

     对于典型现象的第二种,属于当前AVR Studio4.16Build638的一个BUG,随后的4.17版
本是否存在该问题还有待证实。问题实际上发生在,JTAGICE mkII的仿真驱动程序会自动根
据随后要仿真的代码进行某种优化操作,while(1)死循环对应唯一的一句汇编
“rjmp PC+0000” 而这一步操作似乎产生了某些错误导致PC指针出错。从而跑飞。此时,
程序会从跑飞的落脚点开始执行,如果一直碰到0xFFFF将视作nop并继续向后执行,直到
flash的尾部,然后从0x0000开始。

[事态结果]
     对于第一种状况,大部分当事人在得到合理的解释后,纷纷进行尝试,相当一部分解决
了问题,仍有一些当事人因为程序本身的综合原因而继续纠结。对于第二种状况,解决方法
其实很简单,在while(1)里面添加任何语句,比如nop都可以排除这个问题。希望广大群众
能够相信X,相信XX的公信力,对于“假死”的谣言要做到“不相信”、“不传播”。

出0入0汤圆

发表于 2009-10-29 00:05:16 | 显示全部楼层
占楼

出0入0汤圆

发表于 2009-10-29 00:10:57 | 显示全部楼层
AVR之X档案  学习

出0入0汤圆

发表于 2009-10-29 00:17:19 | 显示全部楼层
强力插入

出0入0汤圆

发表于 2009-10-29 00:18:42 | 显示全部楼层
占位,围观!

出0入0汤圆

发表于 2009-10-29 00:22:57 | 显示全部楼层
占位出租

出0入0汤圆

发表于 2009-10-29 00:27:27 | 显示全部楼层
建议把占楼的都删掉,以利阅读学习,也包括本楼,哈。

出0入0汤圆

发表于 2009-10-29 00:31:03 | 显示全部楼层
不明真相的群众来围观了...

出0入0汤圆

发表于 2009-10-29 00:33:15 | 显示全部楼层
静坐...

出0入0汤圆

发表于 2009-10-29 00:38:03 | 显示全部楼层
搬张凳子上课

出0入0汤圆

发表于 2009-10-29 00:38:56 | 显示全部楼层
好!搂主多写点出书,我绝对收藏一本

出0入0汤圆

发表于 2009-10-29 09:00:23 | 显示全部楼层
我来扮演路人甲~~~

出0入0汤圆

发表于 2009-10-29 09:19:17 | 显示全部楼层
很久没有看到傻孩子的身影,如今忽然来点灵异事件的猛料,赶快占楼。

出0入0汤圆

发表于 2009-10-29 09:36:28 | 显示全部楼层
__@

出0入0汤圆

发表于 2009-10-29 09:52:37 | 显示全部楼层
抓紧占楼

出0入0汤圆

发表于 2009-10-29 09:53:08 | 显示全部楼层
学习中…………

出610入42汤圆

发表于 2009-10-29 09:53:09 | 显示全部楼层
强,学习,再学习

出0入296汤圆

 楼主| 发表于 2009-10-30 00:22:00 | 显示全部楼层

<font color=blue>X档案004 都市传说
<font color=brown>
[目击报告]
    “AVR芯片容易破解”,“500大洋立等可取”在远离挪威的中国国内,这种传闻
几乎已经到了家喻户晓的程度。得到证实的传闻就不再是传闻,当然前提是你真的去
验证过。有多位目击者声称,他们亲自验证过某AVR著名芯片廉价破解的可能性;而且
这些目击者中还不乏一些国内AVR世界中举足轻重的媒体大亨。如同当今的和谐社会,
破解的可能性就如同某些地方性的不和谐事件相对我国欣欣向荣的社会主义现代化建设
的关系一样,在某些层面上,基本上是可以无视的。然而,“破解”是战胜不了英雄的
中国工程师的;就如同微软的windows7是战胜不了英雄的中国红客一样。有不少人声称找
到了防止AVR芯片被破解的方法,例如,有意用随机数字烧坏部分EEPROM来获取唯一的
序列号;使用内部RC校准寄存器的值作为简单的芯片“指纹”。
     愿主保佑这群人吧,你们的努力为ATXXX客观分担了困难,然而正如你们的出发点
是要保护自己的作品一样,ATXXX是不会专程来感谢你们的。
   
     问题似乎集中到了一个很奇怪的地方:究竟是从什么时候开始,大家确信AVR芯片
没有唯一的序列号的呢?官方没有公布过么?没有人真的研究过这个问题么?以讹传讹
么?问题变得有趣起来。

[典型现象]
    很多人认为AVR芯片没有唯一的序列号,从而认为,所有Flash型MCU都可以通过暴力
破解的缺点在AVR芯片上异常突出。

[调查报告]
    根据一份官方早年公开的报告(AVR922),至少可以确定有一个系列的AVR芯片具有
唯一的序列号,他们被保存在Signature Row中,通过读取Signature 特定地址的方式获
取,它们共有10个字节。详细的代码可以在这一系列芯片相关的Application Note公开
代码中找到。然而从这份报告中并不能知晓是否其它芯片业具有同样的特性。
    这些芯片是90USB1287/90USB647。

[事态结果]
    无可奉告。

出0入0汤圆

发表于 2009-10-30 00:37:28 | 显示全部楼层
X档案004 很振撼,热切期待中...

出0入0汤圆

发表于 2009-10-30 08:30:13 | 显示全部楼层

出0入0汤圆

发表于 2009-10-30 08:50:32 | 显示全部楼层
顶一个

出0入0汤圆

发表于 2009-10-30 08:55:57 | 显示全部楼层
辛苦了,顶

出0入0汤圆

发表于 2009-10-30 09:04:09 | 显示全部楼层
学习。

出0入0汤圆

发表于 2009-10-30 09:05:00 | 显示全部楼层
围观

出0入0汤圆

发表于 2009-10-30 09:25:32 | 显示全部楼层
这个RESET引脚可以当IO用,我一直当作ATMEL开的个玩笑,从来不敢这样用啊,万一要修改点东东,上哪搞并行编程器去,那你调试的时候不敢这么用,成品上更不敢这么设计了。

出0入0汤圆

发表于 2009-10-30 09:25:39 | 显示全部楼层
爪印

出0入0汤圆

发表于 2009-10-30 09:28:46 | 显示全部楼层
搬个板凳

出0入0汤圆

发表于 2009-10-30 09:30:00 | 显示全部楼层
围观。

出0入0汤圆

发表于 2009-10-30 10:23:55 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-30 12:22:31 | 显示全部楼层
留个记号

出0入0汤圆

发表于 2009-10-30 12:30:58 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-10-30 12:39:07 | 显示全部楼层

出0入0汤圆

发表于 2009-10-30 12:44:14 | 显示全部楼层
X2中提到的RST做IO用,以前试验过,但是没敢过,因为调程序太痛苦了,如果程序不对,芯片又锁死,要解锁太麻烦,现在从来不把RST当作IO看,IO不够,宁愿想办法扩展或者复用,也不会打RST的主意,至于用这个方法来保护自己,意义可能不大。X4可用来加密,关注。

出0入0汤圆

发表于 2009-10-30 12:56:08 | 显示全部楼层
我做的stk500高压编程器,是绝对可以解锁 X档案002 无法兑现的承诺

rst做io是很常用的功能

出0入309汤圆

发表于 2009-10-30 12:56:15 | 显示全部楼层
话说没有DRAGON以前用通用编程器,一直把RST当IO用.

出0入0汤圆

发表于 2009-10-30 14:00:14 | 显示全部楼层
酷贴留名!!!!!!!!!

出0入0汤圆

发表于 2009-10-30 14:12:31 | 显示全部楼层
我在ATMEGA8上也遇见了002现象,50个片子现在还放在柜子里呢,烧写器用的top2007不行

出0入0汤圆

发表于 2009-10-30 14:43:05 | 显示全部楼层
楼上可以考虑一下小店的高压编程器


楼主是atmel内部人士,应该知道一些秘密指令吧

出0入0汤圆

发表于 2009-10-30 14:59:26 | 显示全部楼层
期待傻孩子!

出0入0汤圆

发表于 2009-10-30 15:07:50 | 显示全部楼层
鸡冻啊,赶紧占楼~

原来在tiny13上用过reset脚做IO,毕竟tiny13脚太少了不够用,不过tiny13是串行高压编程,还算好搞,毕竟tiny13总共才8个脚,O(∩_∩)O

出0入0汤圆

发表于 2009-10-30 15:11:00 | 显示全部楼层
标记

出0入0汤圆

发表于 2009-10-30 18:27:10 | 显示全部楼层
我占楼一次

出0入0汤圆

发表于 2009-10-30 18:50:20 | 显示全部楼层
请尽快续

出0入0汤圆

发表于 2009-10-30 19:24:35 | 显示全部楼层
经典,搬个凳子学习

出0入0汤圆

发表于 2009-10-30 21:14:05 | 显示全部楼层
不错的贴子 值的一看 了解更多的资料

出0入296汤圆

 楼主| 发表于 2009-10-31 00:42:20 | 显示全部楼层

X档案005 失眠与睡姿


coming soon...

出0入0汤圆

发表于 2009-10-31 08:22:00 | 显示全部楼层
从楼下开始买票入场,哈哈~

出0入4汤圆

发表于 2009-10-31 08:33:55 | 显示全部楼层
哈哈,我第一个买票.....

出0入0汤圆

发表于 2009-10-31 08:45:14 | 显示全部楼层
期待X之004。。。。。。

出0入0汤圆

发表于 2009-10-31 10:15:46 | 显示全部楼层
我也占层楼

出0入4汤圆

发表于 2009-10-31 10:21:33 | 显示全部楼层
做个标记

出0入0汤圆

发表于 2009-10-31 15:07:34 | 显示全部楼层
强帖!
等待x007

出0入0汤圆

发表于 2009-10-31 15:30:19 | 显示全部楼层
期待,好好学习。

出0入296汤圆

 楼主| 发表于 2009-11-1 00:14:43 | 显示全部楼层

出0入0汤圆

发表于 2009-11-1 00:45:03 | 显示全部楼层
看完X4,看来各位还得使用老办法加密。给AVR一个唯一的ID应该不难吧,难道是因为这样会降低生产效率?

出0入0汤圆

发表于 2009-11-1 01:50:42 | 显示全部楼层
明天继续看 呵呵

出0入296汤圆

 楼主| 发表于 2009-11-1 11:32:08 | 显示全部楼层
看了61的发言我很郁闷……明明已经告诉你有序列号了……哎……
话我只能说到这个地步了……缺乏想象力的工程师们啊……
文献资料的编号告诉你们了AVR922,序列号存放的地方告诉你们了:Signature Row;
读取Signature Row的代码以及序列号位置的代码告诉你们了:与90USB1287和647相关
的公开的Application Note代码中就有,难道要我找出来粘贴给你们?
至于其它AVR芯片是否有这样的结构,亲手做一个验证试验会死人阿!

- -b
以后懒得干这种吃力不讨好的事情了……

出0入0汤圆

发表于 2009-11-1 11:56:47 | 显示全部楼层
看看

出20入0汤圆

发表于 2009-11-1 12:00:39 | 显示全部楼层
厉害!

出0入0汤圆

发表于 2009-11-1 12:21:24 | 显示全部楼层
[调查报告]
    根据一份官方早年公开的报告(AVR922),至少可以确定有一个系列的AVR芯片具有
唯一的序列号,他们被保存在Signature Row中,通过读取Signature 特定地址的方式获
取,它们共有10个字节。详细的代码可以在这一系列芯片相关的Application Note公开
代码中找到。然而从这份报告中并不能知晓是否其它芯片业具有同样的特性。
    这些芯片是90USB1287/90USB647。

[事态结果]
    无可奉告。
----------------------------------------------------------------------------------
     傻孩子,如果你发表的[调查报告][事态结果]代表的是个人观点,那么无论这个调查报告写得怎么

样,大家都会感谢你,甚至感激你。但是这里是ATMEL官方指定的中文技术支持网站,而你又作为ATMEL的员工,那么我只能默认你的发言代表的是ATMEL官方的论调,而不是你个人。如果你代表的是ATMEL,那么“至少可以

确定有一个系列的AVR芯片具有唯一的序列号”“然而从这份报告中并不能知晓是否其它芯片业具有同样

的特性。”“无可奉告。”这些话就对客户有些不负责。作为一些“缺乏想象力的工程师们”中的一位,,“亲手做一个验证试验会死人阿”,但是不亲手做试验也同样不会死人,我们做通信产品加密,根本不需要这个唯一的ID号。

     而我在61L的发言算在下才疏学浅,是对X4的报告理解错误,该帖各位大虾请忽略之,谢谢。

出0入0汤圆

发表于 2009-11-1 12:33:33 | 显示全部楼层
【63楼】 Gorgon Meducer 傻孩子

顶你!
爆料这个不公开的秘密,必将大大增加AVR的解密难度,推动AVR的应用走向新时代。




楼上楼下,这可能是ATMEL不让公开发布的资料,请原谅傻孩子无法直白地说出来。

出0入0汤圆

发表于 2009-11-1 12:40:46 | 显示全部楼层
傻孩子的意思难道是有许多种都可以去那个地方读?

如果是,干嘛遮遮掩掩,害羞什么,又不是丢人的事,鄙视“ATMEL”。又不是拿8K当4K来卖,怕什么。

出0入0汤圆

发表于 2009-11-1 12:58:20 | 显示全部楼层
to:【63楼】 Gorgon Meducer 傻孩子
     不知道是不是Avr的芯片都是有?这个验证还是比较困难的(想搞齐各种芯片还是比较困难)。

  我找到了应该是这个地方吧
#define Flash_read_id1()            ( flash_read_sig(0x0000))  //!< This macro function allows to read device ID1 of the product.
#define Flash_read_id2()            ( flash_read_sig(0x0002))  //!< This macro function allows to read device ID2 of the product.
#define Flash_read_id3()            ( flash_read_sig(0x0004))  //!< This macro function allows to read device ID3 of the product.
#define Flash_read_osccal()         ( flash_read_sig(0x0001))  //!< This macro function allows to read the OSCAL byte of the product.
#define Flash_read_sn(pos)          ( flash_read_sig((0x07*2)+pos))//!< This macro function allows to read the serial number of the product.
#define SN_LENGTH                   10                         //!< Size of the serial number containt in product.

出0入0汤圆

发表于 2009-11-1 13:00:39 | 显示全部楼层
记号先~~~

出0入0汤圆

发表于 2009-11-1 13:05:37 | 显示全部楼层
【63楼】 Gorgon Meducer 傻孩子

手头只有Mega48, SPMCSR里没SIGRD, 把SIGRD强设成5读出来都一样 @@
回头找几个有SIGRD的器件读读试试

出0入0汤圆

发表于 2009-11-1 13:06:03 | 显示全部楼层
我比较傻看了X4还不是很明白怎么用,希望高人指点迷津

flash_read_sig:
   RCALL    WAIT_SPMEN                       // Wait for SPMEN flag cleared
   MOV      R31,R23
   MOV      R30,R22                          // move adress to z pointer (R31=ZH R30=ZL)
   LDI      R20, ((1<<SPMEN) | (1<<SIGRD))  
   OUT      _ASM_SFR_IO_(SPMCSR), R20        // argument 2 decides function (r18)
   LPM                                       // Store program memory
   MOV      R24, R0                          // Store return value
   RJMP     WAIT_SPMEN                       // Wait for SPMEN flag cleared

flash_read_fuse:
   RCALL    WAIT_SPMEN                       // Wait for SPMEN flag cleared
   MOV      R31,R23
   MOV      R30,R22                          // move adress to z pointer (R31=ZH R30=ZL)
   LDI      R20,((1<<SPMEN) | (1<<BLBSET))  
   OUT      _ASM_SFR_IO_(SPMCSR), R20        // argument 2 decides function (r18)
   LPM                                       // Store program memory
   MOV      R24, R0                          // Store return value
   RJMP     WAIT_SPMEN                       // Wait for SPMEN flag cleared


WAIT_SPMEN:
   MOV      R0, R18
   IN       R18,_ASM_SFR_IO_(SPMCSR)         // get SPMCR into r18
   SBRC     R18,SPMEN
   RJMP     WAIT_SPMEN                       // Wait for SPMEN flag cleared
   MOV      R18, R0
   RET


#define Flash_read_id1()            ( flash_read_sig(0x0000))  //!< This macro function allows to read device ID1 of the product.
#define Flash_read_id2()            ( flash_read_sig(0x0002))  //!< This macro function allows to read device ID2 of the product.
#define Flash_read_id3()            ( flash_read_sig(0x0004))  //!< This macro function allows to read device ID3 of the product.
#define Flash_read_osccal()         ( flash_read_sig(0x0001))  //!< This macro function allows to read the OSCAL byte of the product.
#define Flash_read_sn(pos)          ( flash_read_sig((0x07*2)+pos))//!< This macro function allows to read the serial number of the product.
#define SN_LENGTH                   10                         //!< Size of the serial number containt in product.

出0入296汤圆

 楼主| 发表于 2009-11-1 13:26:35 | 显示全部楼层
to 【66楼】 windy__xp 龙啸
    我在ouravr发表的任何言论都只代表我个人观点。而且我确实给出了有一个确定的系列有序列号
这样的信息,他们是90USB1287和90USB647……信息量足够了吧?你们有自己的加密方法,很为你们
高兴,问题在于,我也没有觉得你读了我给的帖子就需要感谢我。
    姑妄言之,姑妄听之。我就是我,我没有进入ATMEL之前,发帖子也只是依靠大家的兴趣赚回帖的
,难道我进入ATMEL以后就被你们剥夺了以自己的身份发言的权利么?你要说,本贴有暗示性内容,说
名资料来自于内部,但实际上,我所有提到的内容都是ATMEL官方网站上可以下载和阅读到的内容,我
只是提炼一下,提醒大家注意一些容易忽略的细节。如果你们觉得我这样欺世盗名,你们大可以不看,
看了大可以不回帖……

出0入296汤圆

 楼主| 发表于 2009-11-1 13:37:21 | 显示全部楼层
to 【72楼】 crazy stone  
    用法其实比较简单,就是你找到读取AVR Signature row的方法,然后按照宏里面的提示
去读取指定的地址就可以了。关于读取Signature Row的方法,可以参考数据手册或者avr-gcc
boot.h里面提供的方法,也可以参考数据手册中关于自编程的内容。

出0入296汤圆

 楼主| 发表于 2009-11-1 13:38:32 | 显示全部楼层
to 【71楼】 sunzx  
    期待你的结果。

出0入0汤圆

发表于 2009-11-1 13:42:37 | 显示全部楼层
//_____ I N C L U D E S ______________________________________________________

#include "config.h"                          <<<<<<<< 这个文件怎么没有?


//_____ M A C R O S ________________________________________________________

//! \name These macros allow to read a specific device ID of the product.
//! @{
#define Flash_read_id1()            ( flash_read_sig(0x0000))  //!< This macro function allows to read device ID1 of the product.
#define Flash_read_id2()            ( flash_read_sig(0x0002))  //!< This macro function allows to read device ID2 of the product.
#define Flash_read_id3()            ( flash_read_sig(0x0004))  //!< This macro function allows to read device ID3 of the product.
#define Flash_read_osccal()         ( flash_read_sig(0x0001))  //!< This macro function allows to read the OSCAL byte of the product.
#define Flash_read_sn(pos)          ( flash_read_sig((0x07*2)+pos))//!< This macro function allows to read the serial number of the product.
#define SN_LENGTH                   10

出0入296汤圆

 楼主| 发表于 2009-11-1 13:44:36 | 显示全部楼层
to 【76楼】 cyberjok
     我觉得可以54掉……如果你真想做一个试验,可以直接用winavr的boot.h
然后写一个小程序,利用boot.h里面提供的函数将数据读取出来。关于boot.h
如何使用,请参考
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=2164992&bbs_page_no=1&bbs_id=1038

出0入0汤圆

发表于 2009-11-1 13:49:08 | 显示全部楼层
现在在看STM8的介绍,如果真需要加密,建议大家可以用STM8,它就有唯一的ID号,不用去测试研究什么了,

出0入296汤圆

 楼主| 发表于 2009-11-1 13:50:23 | 显示全部楼层
哎……这就是大趋势阿……

出0入0汤圆

发表于 2009-11-1 15:29:34 | 显示全部楼层
【75楼】 Gorgon Meducer

48P/48PA的datasheet里面有一节叫用软件读取signature row, 打开一看, 这个有SIGRD...

难道48真的没有SIGRD么? 回头再彻底试试...

出0入0汤圆

发表于 2009-11-1 15:31:55 | 显示全部楼层
Gorgon Meducer是个好孩子, 大家不要欺负他.

出0入296汤圆

 楼主| 发表于 2009-11-1 15:32:57 | 显示全部楼层
恩M48PA和M88PA是48和88的升级型号,完全兼容,而且48和88本身也是官方
不推荐在新产品中使用的型号了。

出0入0汤圆

发表于 2009-11-1 15:39:51 | 显示全部楼层
占楼等更新。

出0入0汤圆

发表于 2009-11-1 15:40:15 | 显示全部楼层
啊, 完全兼容这四个字信息含量不少.
回头买几片PA读读试试, 看看行为有啥区别.

出0入0汤圆

发表于 2009-11-1 16:52:43 | 显示全部楼层
楼上误解了,Gorgon Meducer 说的完全兼容,只是48PA和48兼容而已

跟唯一ID没有关系

出0入0汤圆

发表于 2009-11-1 18:59:05 | 显示全部楼层
【73楼】 Gorgon Meducer 傻孩子

    我在ouravr发表的任何言论都只代表我个人观点。而且我确实给出了有一个确定的系列有序列号
这样的信息,他们是90USB1287和90USB647……信息量足够了吧?你们有自己的加密方法,很为你们
高兴,问题在于,我也没有觉得你读了我给的帖子就需要感谢我。
    姑妄言之,姑妄听之。我就是我,我没有进入ATMEL之前,发帖子也只是依靠大家的兴趣赚回帖的
,难道我进入ATMEL以后就被你们剥夺了以自己的身份发言的权利么?你要说,本贴有暗示性内容,说
名资料来自于内部,但实际上,我所有提到的内容都是ATMEL官方网站上可以下载和阅读到的内容,我
只是提炼一下,提醒大家注意一些容易忽略的细节。如果你们觉得我这样欺世盗名,你们大可以不看,
看了大可以不回帖……
----------------------------------------------------------------------------------------
     下午出去玩了,才回来。首先申明,我并不是针对傻孩子个人,但是人的身份不同了,言行还是要注意些,让人误解了就不好了。如果这只是个人行为,那么大家可以继续讨论试验,有结果了与大家分享,不失为一件乐事。傻孩子你毕竟是ATMEL员工,接触AVR的时间肯定比我们多,对AVR的理解,也肯定比我们做产品的工程师深刻,如果能透露一些内部消息,即使能根据已发布的文档,提炼出一些大家忽略了的细节,大家理所当然应该感谢你,毕竟如果AVR有唯一的ID,加密会方便很多。

    傻孩子辛苦了,请继续。

出0入296汤圆

 楼主| 发表于 2009-11-1 19:14:48 | 显示全部楼层
to 【86楼】 windy__xp 龙啸
    大家理解,我就很开心哈。我的思维模式还是很简单的。具体细节我无法说得更多,
因为第一,我没有确凿的证据说明每一个芯片都有一个唯一的ID;第二、即便有,如果
公司没有发布,我个人也有守密义务;第三、对于已经发布的内容,我是可以基于此给
大家一些提示的;第四、很多人都提出过疑问,难道增加一个唯一的ID会增加生产成本
么?你可以去问一下稍微了MCU设计和生产的朋友,也许可以得到一些行业内通行做法的
解释,从而对AVR芯片做一些推测,并根据这一推测来试验。工程师的乐趣就在于此吧。

    说我辛苦,不客气,一点也不辛苦,相反很快乐,因为大家可以一起分享,一起试验
所以特别期待手中有芯片,心中有兴趣的大家的测试方法,也算是一种练习把,学习如何
使用Bootloader功能,学习利用这些信息保护自己的产品。

出0入0汤圆

发表于 2009-11-1 20:37:18 | 显示全部楼层
以下是48PA Datasheet 中,关于用软件读取Signature Row  的描述,哪位达人来翻译一下?

Reading the Signature Row from Software
To read the Signature Row from software, load the Z-pointer with the signature byte address
given in Table 26-5 on page 286 and set the SIGRD and SPMEN bits in SPMCSR. When an
LPM instruction is executed within three CPU cycles after the SIGRD and SPMEN bits are set in
SPMCSR, the signature byte value will be loaded in the destination register. The SIGRD and
SPMEN bits will auto-clear upon completion of reading the Signature Row Lock bits or if no LPM
instruction is executed within three CPU cycles. When SIGRD and SPMEN are cleared, LPM will
work as described in the Instruction set Manual.


还不是很明白 Signature Row 的具体应用

出0入0汤圆

发表于 2009-11-1 20:42:56 | 显示全部楼层
记下,稍后再学习。

出0入0汤圆

发表于 2009-11-1 20:52:26 | 显示全部楼层
做记号先~~~

出0入0汤圆

发表于 2009-11-1 21:10:35 | 显示全部楼层
mark

出0入12汤圆

发表于 2009-11-1 21:19:08 | 显示全部楼层
只在Bootloader时才管用吗

出0入0汤圆

发表于 2009-11-1 22:55:28 | 显示全部楼层
买票围观

出0入27汤圆

发表于 2009-11-2 09:37:16 | 显示全部楼层
有没有人测试到其它型号AVR也具有ID号?
不好意思我没用AVR,但我想知道个结果。

出0入27汤圆

发表于 2009-11-2 10:10:33 | 显示全部楼层
由datasheet来看,ATmega48PA/88PA/168PA/328P有三个字节的ID。

出0入0汤圆

发表于 2009-11-2 10:48:07 | 显示全部楼层
Signature Row指的是Signature Byte,是芯片的ID号,每个型号的芯片都是相同的,ATmega48PA的ID是:0x1E 0x92 0x0A

出0入0汤圆

发表于 2009-11-2 10:50:04 | 显示全部楼层

(原文件名:未命名.jpg)

出0入0汤圆

发表于 2009-11-2 10:50:07 | 显示全部楼层
哇哈哈   这个要标记一下了。。

出0入0汤圆

发表于 2009-11-2 10:53:28 | 显示全部楼层
学习一下

出0入296汤圆

 楼主| 发表于 2009-11-2 11:24:12 | 显示全部楼层
to 【96楼】 mau80
    你看到的是芯片型号,我说的是Serial Number,别浅尝辄止。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-4-26 02:48

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

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