松翰单片机的OTP可重复烧写的技巧!

发布者:心灵之窗最新更新时间:2016-02-26 来源: eefocus关键字:松翰单片机  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)修改成0~255范围的任意一个数据。修改过程为:先把在最下面的不想要的数据(直接送数指令: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                                        ;
;;***********************************************;*********
;100
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh;
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
;100
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh;
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
        dw        0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffh
;………
关键字:松翰单片机  OTP  可重复烧写 引用地址:松翰单片机的OTP可重复烧写的技巧!

上一篇:松翰单片机 RTC 应用注意
下一篇:ARM芯片和51单片机区别

推荐阅读最新更新时间:2024-03-16 14:45

用4BIT OTP单片机实现USB/PS2 MOUSE的设计
   引言:   USB  低速设备的设计发展到现在已经有了相当的成熟度。 各家IC公司都推出了USB DEVICE端的解决方案, 一般以8 BIT CPU CORE + USB SIE为主流构架。 SH69P04是中颖电子(Sinowealth)本着丰富USB产品应用,降低USB IC成本而设计的4BIT OTP单片机, 用以开发USB DEVICE设备。   SH69P04的功能及特点                        图1    如图1, SH69P04集成了USB SIE, 支持USB和PS2端口复用。 内建1.5K可控上拉电阻为用户节约成本, 并能建立和PC稳定的通讯。 专门为MOU
[单片机]
华虹半导体推出0.18微米数模混合及嵌入式OTP/MTP工艺平台增强
全球领先的200mm纯晶圆代工厂 华虹半导体有限公司(「华虹半导体」或「公司」,连同其附属公司,统称「集团」,股份代号:1347.HK)今日推出最新低本高效0.18微米数模混合及嵌入式OTP/MTP工艺平台增强版(0.18CE 工艺平台增强版)。该增强型工艺平台的推出,进一步奠定了华虹半导体在蓬勃发展的微控制器(Microcontroller Unit, MCU)市场中的领先地位,并把现有0.18CE工艺平台扩展至数模混合电路及电源管理芯片领域,为拓展新的应用市场打下了坚实基础。 华虹半导体0.18CE工艺平台增强版是在0.18微米低本高效OTP(One-Time Programming)工艺平台的基础上研发升级而来。其最大优势
[半导体设计/制造]
松翰单片机跑灯程序
CHIP SN8F27E65 //{{SONIX_CODE_OPTION .Code_Option WDT_CLK Flosc/4 .Code_Option Reset_Pin P04 .Code_Option LVD LVD_Max ; 3.3V Reset .Code_Option Watch_Dog Disable ;关闭看门狗 .Code_Option Low_Fcpu Flosc/1 .Code_Option High_Clk IHRC_16M ; Internal 16M RC Oscillator .Code_Option High_Fcpu Fhosc/1 .Code_Option Security Enable
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved