松翰单片机的otp可重复烧写的技巧!_第1页
松翰单片机的otp可重复烧写的技巧!_第2页
松翰单片机的otp可重复烧写的技巧!_第3页
松翰单片机的otp可重复烧写的技巧!_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

松翰单片机的 OTP 可重复烧写的技巧!1.问题:笔者在前期工作中,常常遇到在做测试时,只要修改一些简短的指令或数据时,就要再换一个全新的芯片重新烧录一下,再测试。这样即浪费时间,又消费芯片,还消费金钱呢。2.解决:其实 OTP 不是你想象的那么“顽固”,只要你对它好一些,还是有些回报的。在烧录前,芯片的内部全是由 2 进制的 1 组成,烧录后,是对里面的 1 进行切断成 0,如此,烧录过的不能再烧录,是对已经把 1 烧录成 0 的不可再烧,而是没有把 1 烧成 0 的,还是可以再烧的。也就是说,1 可以变成 0,而 0 不可再变为 1,就象保险丝一样,烧断了就不可再烧,而没烧断的,你还可以把它烧断。要想实现重烧的过程,还是要有些技巧的。哎,废话这么多,来些实例的讲吧。你可以在你想要的地方预留些空间,等你想要在这修改时,再从里面提取出来。;-;3.实例 1:在已经烧过程序的 IC 上修改数据: incms t_enter_io ;500ms 进入一次 nop ;mov a,#0xFF ;1 预留数据修改(二进制为:11111111b)mov a,#0xFF ;2 预留数据修改mov a,#0xFF ;3 预留数据修改mov a,#0xFF ;4 预留数据修改mov a,#0xFF ;5 预留数据修改mov a,#0xF3 ;等待被修改的数据cjb t_enter_io,a,e_tele_io ;249 次进入一下clr t_enter_io ;-; 3.1.1 (直接修改)比如我想在已经烧有上面程序的 IC 的基础上,修改 a=0xF3(2 二进制:11110011B)为 a=0xF1,此时,你就不要再浪费 IC 了,直接在上面修改就可以。你可以看到,0xF3 与 0xF1 的区别只在于 3 和 1,二进制为:0011B 和 0001B,所以你可以把0011B(十进制 3)中第 2 位的 1 修改为 0,即从 0011B 成为 0001B,所以可以直接修改,当然你也要以把它修改成为你想要的数据,但前提是:你只能从二进制中的 1 烧成 0,不可从 0 变为 1. 比如我可以把 0xF1 再烧成 0xA1 或 0xA0 或 0x01 或 0x00 等等。;-;3.1.2 (覆盖修改)是否有一种可以在上面的程序中任意修改数据呢?这是有的!读者可以看到,我上面的程序为了防止修改不同的数据而所预留的 5 条 :mov a,0xFF ,这是为了修改各种数据而预留的。你可以把 0xFF(二进制:11111111B)修改成 0255 范围的任意一个数据。修改过程为:先把在最下面的不想要的数据(直接送数指令:mov a,0xF3 ;此指令生成的机器指令为:2DF3) ,用 NOP(机器指令为:0000 )给填充掉。然后第 5条的 0xFF 修改为你想要的数据) ,比如修改为:0x45,修改后的程序如下:incms t_enter_io ;500ms 进入一次 nop ;mov a,#0xFF ;1 预留数据修改(二进制为:11111111b)mov a,#0xFF ;2 预留数据修改mov a,#0xFF ;3 预留数据修改mov a,#0xFF ;4 预留数据修改mov a,#0x45;0xFF ;5 预留数据修改 已经修改为 0x45;mov a,#0xF3 ;此条指令用 NOP 取代 等待被修改的数据NOP cjb t_enter_io,a,e_tele_io ;249 次进入一下clr t_enter_io ;-;实例 2:只修改数据而已,有时还是不能达到我们想要的结果,有没有一种可以写任意的命令的呢?笔者给你的回答是:有!在下面的一个实例中,给大伙分享下,预留空间的事。3.2.1.(增加或修改部分指令)在已经存在的程序里,修改或增加部分指令。我们注意到,在已经烧过的 IC 中,里面有 dw 0ffffh ,就相当于在里面全 部用 1 去填充,当然还可以再烧了。如下面的程序,我想在下面的 b0bset fp00 后面再加几条不一样的指令,如:我想让系统在执行到置 FP00 为 1 时后,进入睡眠状态。incms t_enter_io ;500ms 进入一次 nop ;mov a,#0xF3 ;此条指令用 NOP 取代 等待被修改的数据cjb t_enter_io,a,e_tele_io ;249 次进入一下clr t_enter_io ;b0bset fp00 ;jmp F ;预留空间 30 个dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh : ;修改完后,程序如下:incms t_enter_io ;500ms 进入一次 nop ;mov a,#0xF3 ;此条指令用 NOP 取代 等待被修改的数据cjb t_enter_io,a,e_tele_io ;249 次进入一下clr t_enter_io ;b0bset fp00 ;jmp F ;预留空间 30 个 将此条屏蔽,用 NOP 取代NOP ;b0bclr fcpum1 ;睡吧!b0bset fcpum0 ;jmp F ;用去了 3 条,只剩下 27 条指令空间了!dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh ;0ffffh 0ffffh 0ffffh ;从这里释放 3 条指令出来dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh :;-;3.2.2 (大量增加指令) ,笔者有个习惯,就是在写完程序后,会把剩下的空间,全部预留起来,以防止不测(呵呵) 。也为增加大量的指令做些工作,这是必要的,笔者在开发产品过程中,就碰到过这样的情况,确定好了功能的产品,已经在生产中,却发现了隐藏很深的漏洞,由于之前做了些准备,所以可以让客户再把烧过的 IC 发回来,修改一下,重新烧给他,这把双方的损失降到最低点。例如程序如下:当要再加功能时,就可以在 save_ROM 中继续添加,方法类似于上一个例子,在此不多做描述(若看不懂,可直接与笔者联系) 。;*;*main: ;rst_wdt ;清看门狗b0bts0 f_int_tc1 ;call time_treat ; ;b0bts0 f_check_buzzer ;call buzzer ; ;call save_ROM ; 把剩下的空间预留下来 jmp main ;*;*;*;*;此文件为预留空间所用!;*;*save_ROM: ;预留空间e_save_ROM: ;ret ;*;*;100dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh;dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh;100dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh;dw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffff

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论