立超电子科技有限公司 立超电子科技有限公司 中颖 OTP 单片机重复烧录应用笔记 中颖 OTP 单片机重复烧录应用笔记 大家都知道,OTP 类型的 MCU 是只能烧录一次的所以对于我们编程人员来说,当一些功能必须要烧录程序来测试才能得到结果的时候,烧一片 IC 测试,就意味着要浪费一片 IC 了,那么可不可以通过一些编程技巧及方法来实现 OTP 的多次重复烧录呢?而实际上在是可以做到的,下面以中颖单片机 SH69P20C 为例作个说明,希望能对大家有所帮助 一、原理介绍 1、OTP 的 ROM 介绍: 首先,我们要明白一点,就是中颖单片机 OTP 烧录的逻辑特性:只能将逻辑 0 烧录成逻辑 1,而不能从 1 烧录到 0其次就是了解 OTP 型单片机的 ROM 分配表现在我们来看看中颖 MCU(以 SH69P20C 为例)的 RAM 及 ROM分布: 由图可见,其实要实现重复烧录,就是将原来的程序代码占用的空间不用了,而将程序代码编译时整块向下移(即改变程序入口) ,因为是整块代码移动的,所以整个 IC 可用 ROM 是用户代码占用空间的 N 倍时,可重复烧录次数为(N-1) ,当然,程序如果改动后增加了很多代码,就不能这样算咯。
2、重复烧录原理示意图: 二、操作流程 1、 在 MCU 复位及各中断后加入重映射, 可跳过上次烧录的程序位置而执行新的程序入口规划程序代码位置及分块,如下图(程序代码请参阅附录) : 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 2、烧录时不要选择加密项,其中分为 IDE66 烧写和 PRO03 烧写: (记住咯,只有不加密的才可以重复烧写的哦! ) 1)IDE66 烧写配置 2)PRO03 烧写配置 3、查看首次烧录程序块的结束位置(查看 List 文件得 ),以备作下次重复烧录程序代码的起始位置(每次重复烧录都以上次代码结束位置作为本次代码开始位置) : 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 用户程序总共占用空间为 0x019 至 0x08F, 共 119 个 Word。
剩余可用地址有 0x090F 至 0x3FF 有 879 个 Word,即如果代码量不变,只改变少量程序的话,还可重复烧录 7 次如果查得的地址值大于剩余可用地址,很遗憾,你不能实现重复烧录的愿望了~ 4、改程序里的一些功能(先不要急着编译哦),然后开始我们的第一次重复烧录: 1)重新定义重映射程序入口位置; 2)重新定义复位及中断程序地址 5、报废已上一次使用过的 ROM 代码空间,将其全部填上 FFFF,即填上 NOP 1)使用烧录软件来报废 重新编译生成烧录文档打开 IDE66 开发环境,打开菜单栏“Tools”的“PGM66”,调入再次需要烧写的程序后查看“Buffer”如下图所示,在 019H-08FH 皆为 0000 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 我们通过工具填写的方式将其设置为 FFFF参照图示步骤: 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 2)通过程序填写,将使用过的程序空间报废: 使用 DW 指令,如下图操作: 重新编译生成烧录文档。
打开 IDE66 开发环境,打开菜单栏“Tools”的“PGM66”,调入再次需要烧写的程序查看“Buffer”,如下图所示,发现程序已经将 019H-08FH 设置为 FFFF 此时还可以查看 List 文件中用户程序代码的结束位置换到了 0x0106 了哦!下次重复烧录不用我说了吧~ 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 附录:重新定义映射地址参考程序 ;******************************************************************** ; \\\|/// ;Company :南京立超电子科技有限公司 ; \\ -.- // ;File Name : SH69P20C_DEMO ; ( @.@ ) ;Author :苗爱祥 ;+---oOOo-----(_)-----oOOo-----+ ;Email:max@ ; | | ;Tel:15805819950 ; | 工作顺利!!! | ;Version : 1.0 ; | 生意兴隆!!! | ;Create Data : 2009-12-26 ;+-----------------------------+ ;Last Modified : 2009-12-26 ;******************************************************************** ;******************************************************************* ;系统复位及中断向量入口 ;******************************************************************* ORG 000H JMP RESET_ADDR ORG 001H JMP INT_EX0_ADDR ORG 002H JMP INT_T0_ADDR ORG 003H JMP INT_EX1_ADDR ORG 004H JMP INT_PORT_ADDR ;******************************************************************* ;系统复位及中断向量入口重映射 ;******************************************************************* ORG 005H //第 4 次烧写映射地址 RESET_ADDR: ; ORG 006H //第 3 次烧写映射地址 ; ORG 007H //第 2 次烧写映射地址 ORG 008H //第 1 次烧写映射地址 JMP RESET //复位程序地址 //---------------------------------------------------------- ORG 009H //第 4 次烧写映射地址 INT_EX0_ADDR: ; ORG 00AH //第 3 次烧写映射地址 ; ORG 00BH //第 2 次烧写映射地址 ORG 00CH //第 1 次烧写映射地址 JMP INT0_ISP//中断 0 服务程序地址 //---------------------------------------------------------- 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// 立超电子科技有限公司 立超电子科技有限公司 中国南京市和燕路 251 号金港大厦 A 幢 2406 室 Tel: 0086-25-83306839/83310926 Fax: 0086-25-83737785 Http:// ORG 00DH //第 4 次烧写映射地址 INT_T0_ADDR: ; ORG 00EH //第 3 次烧写映射地址 ; ORG 00FH //第 2 次烧写映射地址 ORG 010H //第 1 次烧写映射地址 JMP T0_ISP //定时器 0 服务程序地址 //---------------------------------------------------------- ORG 011H //第 4 次烧写映射地址 INT_EX1_ADDR: ; ORG 012H //第 3 次烧写映射地址 ; ORG 013H //第 2 次烧写映射地址 ORG 014H //第 1 次烧写映射地址 JMP INT1_ISP//中断 1 服务程序地址 //---------------------------------------------------------- ORG 015H //第 4 次烧写映射地址 INT_PORT_ADDR: ; ORG 016H //第 3 次烧写映射地址 ; ORG 017H //第 2 次烧写映射地址 ORG 018H //第 1 次烧写映射地址 JMP PORT_ISP//口中断服务程序地址 ;*********************************。