松翰单片机的OTP可重复烧写的技巧!
- 格式:doc
- 大小:26.00 KB
- 文档页数:8
单片机片内存储器如何烧写几种烧写方式介绍单片机应用系统由硬件和软件组成,软件的载体是硬件的程序存储器,程序存储器采用只读存储器,这种存储器在电源关闭后,仍能保存程序,在系统上电后,CPU 可取出这些指令重新执行。
只读存储器(Read Only Memory,ROM)中的信息一旦写入,就不能随意更改,特别是不能在程序运行过程中写入新的内容,故称只读存储器。
向ROM中写入信息称为ROM编程。
根据编程方式不同,掩模ROM.在制造过程中编程,是以掩模工艺实现的,因此称为掩模ROM。
这种芯片存储结构简单,集成度高,但是由于掩模工艺成本较高,只适合于大批量生产。
可编程ROM(PROM).芯片出厂时没有任何程序信息,用独立的编程器写入。
但是PROM 只能写一次,写入内容后,就不能再修改。
EPROM.用紫外线擦除,用电信号编程。
在芯片外壳的中间位置有一个圆形窗口,对该窗口照射紫外线就可擦除原有的信息,使用编程器可将调试完毕的程序写入。
E2PROM(EEPROM).用电信号擦除,用电信号编程。
对E2PROM的读写操作与RAM存储器几乎没什么差别,只是写入速度慢一些,但断电后仍能保存信息。
Flash ROM.闪速存储器(简称闪存),是在EPROM和E2PROM的基础上发展起来的一种电擦除型只读存储器。
特点是可快速在线修改其存储单元中的数据,改写次数达一万次(ROM 都有改写次数),读写速度快,存取时间可达70ns,而成本比E2PROM低得多,因此正逐步取代E2PROM。
注意:更多存储器内容请参考,《电子技术基础》数字部分(第五版) 主编康华光. 第七章,或者电工学(第七版)(下册) 主编秦曾煌第22章.烧写器、烧录器、编程器、下载器、仿真器、调试器单片机编程器(烧写器、烧录器)是用来将程序代码写入存储器芯片或者单片机内部的工具。
编程器主要修改只读存储器中的程序,编程器通常与计算机连接,再配合编程软件使用。
如下图所示是一个典型的编程器外形。
文件名称六 芯片读取及烧录 2.所选择程序读取正常后,将烧录器连接机台进行芯片烧录,注意事项1.取对应转接板插入所烧写程序,注意丝印上所印有型号,如C020配备2501B转接板,使用错误将无法烧录。
2.对所选择程序必须截图存档,方便每日程序点检及日后异常追溯。
4.将烧录器连接机台后,注意LED灯显示,黄色为烧录中,绿色为烧录完成,红色为不良.
作成部门
③编写/日期
②审核/日期
①批准/日期修订次数修 订日 期审 核日 期文件编号:XDD/SMT-0001
版 本:A.1
松翰(SONIX)烧录器作业指导书第 3 页 共 3 页
1 点击“读取OTP”按钮,会将芯片中的信息读出(如果芯片有加密则只能读出部分数
据),并显示在信息框中.
3.程序选取正确后必须读取1PCS芯片,点检芯片是否正确,并如实填写<烧录点检表>.。
单片机片内存储器如何烧写几种烧写方式介绍单片机片内存储器如何烧写几种烧写方式介绍单片机应用系统由硬件和软件组成,软件的载体是硬件的程序存储器,程序存储器采用只读存储器,这种存储器在电源关闭后,仍能保存程序,在系统上电后,CPU 可取出这些指令重新执行。
只读存储器(Read Only Memory,ROM)中的信息一旦写入,就不能随意更改,特别是不能在程序运行过程中写入新的内容,故称只读存储器。
向ROM中写入信息称为ROM编程。
根据编程方式不同,掩模ROM.在制造过程中编程,是以掩模工艺实现的,因此称为掩模ROM。
这种芯片存储结构简单,集成度高,但是由于掩模工艺成本较高,只适合于大批量生产。
可编程ROM(PROM).芯片出厂时没有任何程序信息,用独立的编程器写入。
但是PROM 只能写一次,写入内容后,就不能再修改。
EPROM.用紫外线擦除,用电信号编程。
在芯片外壳的中间位置有一个圆形窗口,对该窗口照射紫外线就可擦除原有的信息,使用编程器可将调试完毕的程序写入。
E2PROM(EEPROM).用电信号擦除,用电信号编程。
对E2PROM 的读写操作与RAM存储器几乎没什么差别,只是写入速度慢一些,但断电后仍能保存信息。
Flash ROM.闪速存储器(简称闪存),是在EPROM和E2PROM的基础上发展起来的一种电擦除型只读存储器。
特点是可快速在线修改其存储单元中的数据,改写次数达一万次(ROM 都有改写次数),读写速度快,存取时间可达70ns,而成本比E2PROM低得多,因此正逐步取代E2PROM。
注意:更多存储器内容请参考,《电子技术基础》数字部分(第五版) 主编康华光. 第七章,或者电工学(第七版)(下册) 主编秦曾煌第22章.烧写器、烧录器、编程器、下载器、仿真器、调试器单片机编程器(烧写器、烧录器)是用来将程序代码写入存储器芯片或者单片机内部的工具。
编程器主要修改只读存储器中的程序,编程器通常与计算机连接,再配合编程软件使用。
EMC单片机实现多次烧录的办法
一般来说,EMC 的OTP 类型芯片是只能进行一次烧录的。
但是如果在第一次烧录时,某一位为被烧为“1”,则该位可以再次被烧录成“0”;反之,如果已
经被烧录成“0”了,则无法再次烧录成“1”。
由此,有人发现了以下文章中介绍
的这种多次烧录OTP 芯片的方法。
在EMC 单片机中,“ADD A,@0xFF”的机器码为全1。
在下面这篇文章中,介绍的是用“ADD A,@0xFF”指令来预填,方便下次的改写。
其实,还有更方便的办法:
文中提到的办法如下
ORG 0X000
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
MAIN1:
其实,可以改写成下面的程序,达到的效果和前面的方法是一样一样一样样的。
ORG 0X000
ORG 0X007 ;注意这条ORG 定义
MAIN1:。
单片机程序烧录方法及问题解决方式解析自学单片机是一场苦旅,这在第一次面对复杂的烧录界面的时候就会有深刻的感受,面对这么多参数的界面,该如何让自己苦心编写的程序运行在单片机上呢?下面就给大家介绍一下。
先,将烧写线把开发板与电脑连接,安装驱动之后,烧写程序能自动识别设备1,安装USB驱动程序,驱动程序在学习光盘中,具体安装方法参考配套“使用说明书”2.驱动安装完后,请检查USB的COM 端口号。
3.程序烧录时,要满足下面各参数的设置情况,打开c om m a gic.e xe烧录软件,选种“Fla sh Ma gic”选项卡,请按图设置烧录成功的显示烧录方法及问题解决:1. 确认烧录步骤:插上usb后,没有灯亮的,然后点击电脑的download,L1亮了,这时立刻按下板子的电源开关,然后L2亮了,这样就开始烧录了。
PS:每一步都必须按照上面的操作,如果灯的指示有误表明有硬件问题2. 截图烧录软件在1的基础上确认好了,是最后烧录不行,确认下图需要设置的地方是否正确。
关于串口号:并非一定如图所示是com5,具体在安装驱动后看“我的电脑”右键——“属性”——“设备管理器”——“端口(COM和LPT)”,与“USB-SERIAL CH340”一致。
这两个地方没有问题的话,出现以下提示:串口打开失败的错误,要么是没有安装驱动ch340,要么是没有选择正确的com口,用上述方法即可查看。
若出现以下两个情况的话一、确认板子是平放在桌面上的,底部是不接触任何东西影响电路的二、试试把芯片取下来,再放会去,注意芯片缺口是朝向数码管的,另外压芯片的那把手,压到水平位置,不能压得过低三、用杜邦线把P1.0和P1.1接到地GND上,然后按流程正常烧录PS:到了第三还是不行的话,返回第二再做一次,如果还是不行就请联系客服。
单片机无法烧录程序的解决办法1.单击下载按钮,让软件向单片机写入程序,如果出现这个提示无法下载,请在下载状态下关闭单片机电源再重新打开,看烧写过程开始没有2.如果还没有,请检查COM端口设置的是不是你连接编程器或者开发板的端口,数据线有没有连接好3.将串口的波特率降到最低1200,如果1200时写入程序正常,下次写入时再逐渐提高。
Sonix OTP MCU 重复烧录教程By 540 2008-10-30 大家都知道,OTP类型的MCU是只能烧录一次的。
所以对于我们编程人员来说,当一些功能必须要烧录程序来测试才能得到结果的时候,烧一片IC测试,就意味着要浪费一片IC了,那么可不可以通过一些编程技巧及方法来实现OTP的多次重复烧录呢?而实际上在是可以做到的,下面以Sonix为例作个说明,希望能对大家有所帮助。
首先,我们要明白一点,就是OTP烧录的逻辑特性:只能将逻辑1烧录成逻辑0,而不能从0烧录到1。
再有就是明白REPEAT宏命令的作用:将一段指令重复执行,重复次数可定义。
如:REPEAT20NOPENDM编译时编译器会连续生成20条NOP指令。
现在我们来看看Sonix MCU(以SN8P2501B为例)的RAM及ROM分布:由图可见,其实要实现重复烧录,就是将原来的程序代码占用的空间不用了,而将程序代码编译时整块向下移(即改变程序入口),因为是整块代码移动的,所以整个IC可用ROM 是用户代码占用空间的N倍时,可重复烧录次数为(N-1),当然,程序如果改动后增加了很多代码,就不能这样算了。
重复烧录原理(图):1>在MCU复位后加入重映射,可跳过上次烧录的程序位置而执行新的程序入口2>规划程序代码位置及分块:以下用程序及图片说明具体的实现步骤:1>将安全保密烧录模式关闭:2>首次烧录IC里屏蔽报废地址生成功能,并将后面剩余地址保留为FFFF(即逻辑1):3>查看首次烧录程序块的结束位置(查看List文件得),以备作下次重复烧录程序代码的起始位置(每次重复烧录都以上次代码结束位置作为本次代码开始位置):用户程序总共占用空间为0x13B个Word, 剩余可用地址有0x3FC-0x13B = 0x2C1=2*0x13B+4B,即如果代码量不变,只改变少里程序的话,还可重复烧录两次。
如果查得的地址值大于剩余可用地址,很遗憾,你不能实现重复烧录的愿望了~4>改程序里的一些功能(先不要急着编译哦),然后开始我们的第一次重复烧录:开启报废地址功能,并将上次用户代码结束位置填入(此次为0x13B,填0x140只是为了向后再多偏移几个地址开始),实现将用户程序代码块向后面地址移动重新定义重映射程序入口位置5>重新编译生成烧录文档,把该文档再次烧录到IC上试试看(刚刚已烧录过首次编译时文件的IC),程序是不是按你的新功能跑起来了!6>此时还可以查看List文件中用户程序代码的结束位置换到了0x0263了哦!下次重复烧录不用我说了吧~。
松翰单片机的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 预留数据修改(二进制为:b)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二进制:B)为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等等。
;-----------------------------------------------------------------------------;(覆盖修改)是否有一种可以在上面的程序中任意修改数据呢这是有的!读者可以看到,我上面的程序为了防止修改不同的数据而所预留的5条 :mov a,0xFF ,这是为了修改各种数据而预留的。
你可以把 0xFF(二进制:B)修改成0~255范围的任意一个数据。
修改过程为:先把在最下面的不想要的数据(直接送数指令:mov a,0xF3 ;此指令生成的机器指令为:2DF3),用 NOP(机器指令为:0000 )给填充掉。
然后第5条的0xFF修改为你想要的数据),比如修改为:0x45,修改后的程序如下:incms t_enter_io ;500ms 进入一次nop;mov a,#0xFF;1 预留数据修改(二进制为:b)mov a,#0xFF ;2 预留数据修改mov a,#0xFF ;3 预留数据修改mov a,#0xFF ;4 预留数据修改mov a,#0x45;0xFF ;5 预留数据修改已经修改为0x45;;;mov a,#0xF3 ;此条指令用 NOP 取代等待被修改的数据NOPcjb t_enter_io,a,e_tele_io ;249次进入一下clr t_enter_io ;;-----------------------------------------------------------------------------;实例2:只修改数据而已,有时还是不能达到我们想要的结果,有没有一种可以写任意的命令的呢笔者给你的回答是:有!在下面的一个实例中,给大伙分享下,预留空间的事。
(增加或修改部分指令)在已经存在的程序里,修改或增加部分指令。
我们注意到,在已经烧过的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 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh0ffffh 0ffffhdw 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 0ffffhdw 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh 0ffffh@@:;-----------------------------------------------------------------------------; (大量增加指令),笔者有个习惯,就是在写完程序后,会把剩下的空间,全部预留起来,以防止不测(呵呵)。
也为增加大量的指令做些工作,这是必要的,笔者在开发产品过程中,就碰到过这样的情况,确定好了功能的产品,已经在生产中,却发现了隐藏很深的漏洞,由于之前做了些准备,所以可以让客户再把烧过的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;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 0ffffh0ffffh0ffffh 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;………。