DIY编程器网

标题: MSP430加密熔丝烧断器的制作 [打印本页]

作者: liyf    时间: 2011-12-9 07:27
标题: MSP430加密熔丝烧断器的制作
原出自<<单片机与嵌入式系统应用>>  作者:宋强  微控论坛网络首发

   在过去,如果一个项目做完后。将交付客户检收时往往需将芯片进行加密保护措施,如果要买一个专业的TI编程器带加密功能的设备价格可达1000-2000RMB左右。如果认为太贵的话,大家不防考虑一下采用以简单的方法为你的芯片。成本也较专业级的低得多,同时也可以直接应用于产品生产时之用。
以下是宋强先生为大家编写的教大家如何制作的MSP430加密熔丝烧断器的制作主要要点,有兴趣的朋友不防一起动手试试制作。大家可以在微控论坛进各项交流和分享制作经验心得。谢谢宋强先生!

提出MSP430 系列单片机在代码保护及加密方面的解决方案;在此方案的基础上,对MSP430 系列单片机的JTAG结构及加密熔断的应用范围、原理、条件参数、操作时序及具体的方法进行阐述;结合实际对一款MSP430系列加密熔断器的功能特征、硬件结构、软件流程及部分程序进行详细的说明。

引言
MSP430系列单片机是德州仪器(TI)公司推出的一款16位超低功耗单片机。它能够在1.8~3.6V电压、1MHz频率的条件下运行,耗电电流在0.1~400μA。在运算速度上,MSP430系列单片机能在8 MHz 晶振的驱动下,实现125ns的指令周期。16位的数据宽度、125ns的指令周期以及多功能的硬件乘法器相配合,能实现数字信号处理的某些算法(如FFT等) 。

在整合方面,MSP430系列单片机将大量的CPU外围模块集成在片内,有如下一些模块:看门狗(WDT) 、模拟比较器、串口、硬件乘法器、液晶驱动器、10位/12位/14位ADC、端口0~6 、基本定时器。其中定时器A、B均带有多个捕获/ 比较寄存器,同时可实现多路PWM 输出;模拟比较器与定时器配合,可方便地实现ADC;液晶驱动多达160 笔段;硬件ADC 模块在小于10 μs的速率下实现10~14 位的高速、高精度转换,同时提供采样/保持与参考电压;端口0、1、2能够接收外部上升沿或下降沿的中断输入。

MSP430系列单片机的开发调试有多种技术方案,其中以JTAG和BOOTSTRAP(简称“BSL”) 方式最为方便。对于Flash型的MSP430单片机初期开发进行的仿真,只需要1台PC 机和1个JTAG控制器即可实现。进入产品级开发阶段,为了保护用户代码,烧断Flash的保护熔丝以后就无法再通过J TAG 口访问单片机, 这时用户对Flash中的程序再进行检查或更新就只能通过BOOT2STRAP 进行。不用担心用户代码会泄露,BOOTSTRAP提供了32字节256位的密码保护,能完全确保代码的安全性。
     

1 熔断加密原理
MSP430 系列单片机采用JTAG(实际上称为IEEE1149.1或边界扫描)接口技术,实现对单片机全部存储器的访问,包括程序Flash 、ROM、RAM ,并可对其进行擦除、读写。它能用于程序的下载,监测程序使用情况和各个变量与寄存器的使用情况, 并可对其进行修改。
JTAG接口需要4 根信号线、地线和电源线。具体信号线的定义如表1 所列。
表1 JTAG接口信号线
---------------------------------------------
引脚       方向         描述
TMS        输入   JTAG状态机控制信号线
TCK        输入   JTAG时钟输入线
TDI/TCLK   输入   JTAG数据输入线/ TCL K输入
TDO        输出   JTAG数据输出线
---------------------------------------------
JTAG接口为程序的调试、仿真及监控带来了很大的方便,大大提高了编程效率,缩短了开发周期;但在程序测
试完成转换为产品推向市场时,就必须对程序代码进行加密处理,防止程序代码的泄漏。JTAG接口的安全性很差,只要符合J TAG 标准的控制器就可以将程序代码读出,所以必须禁止J TAG 功能。对于MSP430 系列单片
机,禁止J TAG功能的途径是将单片机内部的加密保险丝熔断,熔断后的单片机就无法再使用JTAG功能,从而达到加密程序代码的目的。具体的JTAG及加密保险丝结构框图如图1所示。

MSP430系列单片机在上电复位时会通过TDI/TCLK端对保险丝进行检测,当保险丝完好时,在TDI/TCL K和地之间会有1mA 的电流流过。保险丝检测出现在上电复位以后TMS 端的第一个下降沿上,在第二个下降沿上会解除保险丝的检测,直到下一次的上电复位再进行保险丝检测,即在每一次的上电复位都会对保险丝进行检测。保险丝检测电流只有在保险丝检测方式时才会流过TDI/TCLK端,当检测不到保险丝电流时,JTAG功能就会失效,且这种加密方式是硬件方式的加密,一旦保险丝熔断,JTAG功能就永久失效了,无法再通过JTAG口访问单片机,从而保证了单片机内代码的安全。

2 熔断加密的时序及方法
MSP430单片机保险丝的熔断必须在特定的条件下进行。表2 列出了熔断保险丝所需的条件及具体参数。
表2 保险丝熔断条件及参数
---------------------------------------------------------
保险丝电参数                          min     nor    max
熔断时单片机供电电压VCC(fb)/V         2.5     3.3    3.6
熔断时施加在TDI/TCLK端的电压Vfb/V      6      6.5     7
熔断时施加在TDI/TCLK端的电流Ifb/mA                   100
熔断时间tfb/ms                                        1
---------------------------------------------------------

   在满足表2 所列的条件下,简单地将6.5V电压加在TDI/TCLK端上时,是无法熔断保险丝的,必须在一定的时序及指令下才可以完成。下面是熔断保险丝所需的指令及时序:

IR_SHIFT(" IR_CN TRL_SIG_16BIT" )
DR_SHIFT_IN(0x7201)                ;TDO 信号切换为TDI 功能。TDI信号端释放, TDO 切换为TDI
IR_SHIFT(" IR_PREPARE_BLOW" )      ;通过TDO 信号端传输
MsDelay(1)                         ;延时1ms。等待,连接Vpp至TDI信号端
IR_SHIFT(" IR_EX_BLOW")            ;通过TDO 信号端给目标板发送指令
MsDelay(1)                         ;延时1 ms ,将Vpp 从TDI 信号端
                                   ;移开;切换TDI 信号端返回TDI
                                   ;功能,同时复位J TA G状态机

IR_SHIFT(" IR_CNTRL_SIG_16BIT" )为切换J TAG进入16位数据接收模式;DR_ SHIFT_ IN(0x7201)为将TDO 信号切换为TDI功能,TDI信号释放,为接入熔断电压Vpp作准备;IR_SHIFT(" IR_ PREPARE_BLOW" )为设置MSP430 进入保险丝熔断方式;MsDelay(1)为延时1ms,同时连接熔断电压Vpp 至TDI信号端;IR_ SHIFT("IR_BX_BLOW" )为执行保险丝熔断;MeDelay(1) 为延时1ms,同时断开TDI端的熔断电压Vpp,TDI信号端切换回TDI功能,JATG状态机复位。保险丝加密熔断完成。

3 熔断加密器的设计与实现
  熔断加密器可以实现对MSP430Flash单片机的编程、烧熔丝和BSL下载。可以选择编程后是否熔断芯片内熔丝,进行加密;可自行设置密码,彻底保护芯片内容;可进行完全擦除编程和保留编程,通过BSL 方式读出目标CPU内的代码。
  
熔断加密器的硬件采用了MSP430F1111A作为系统芯片,实现对目标JTAG口的通信控制、熔断电压V pp的加载与分离、目标MSP430 单片机中保险丝熔断指令的控制。在电源部分,熔断电压V pp 及100mA的熔断电流是在7806三端稳压芯片与地之间串接二极管IN4001来实现的;熔断电压Vpp的加载与分离通过继电器的通断来实现,并使用了3 个LED分别指示目标单片机保险丝未熔断、正在熔断及已熔断的状态。熔断加密器系统控制部分的电路如图2 所示。
软件部分是通过C 语言来实现熔丝加密器与目标单片机之间的数据通信及指令控制的。具体软件流程如图3所示。
      
以下为加密熔断器主程序:

Microcontrol CODE

#include "MSP430x11x.h"

void main (void)
{
unsigned char k ;
WDTCTL = WDTPW + WDTHOLD ;
P1DIR = 0xFE;
P1OUT &= ~BIT2 ;       // 断开Vpp
P1OUT &= ~BIT3 ;        // 保险丝准备指示灯(黄色) 亮
P2OUT |= BIT5 ;          // 保险丝熔断成功指示(绿色) 灭
P2DIR = 0xEF ;
  
while (1)
{
if ((P1IN&0x01)==0)
  {
   ResetTAP1();            //?
   delay(50000);
   IR_SHIFT(0x14);
   DR_SHIFT16 (0xAAAA);
   if(tdovalue != 0x5555)
    {                           // 保险丝未熔断
      P1OUT |= BIT3;            // 保险丝准备指示灯(黄色) 灭
      IR_SHIFT(0x13);
      DR_SHIFT16(0x7201) ;
      delay(10000);
      tdopin="1";
      P2DIR |= BIT4;
      IR_SHIFT(0x22);
      P1OUT |= BIT2;            // 接通Vpp,断开TDI
      delay(50000);
      IR_SHIFT(0x24);
      delay(10000);
      P1OUT &= ~BIT2;           // 断开Vpp
      tdopin = 0;
      P2DIR &= ~BIT4;
      ResetTAP();
      delay(50000);
      IR_SHIFT(0x14);
      DR_SHIFT16 (0xAAAA);
      if (tdovalue == 0x5555)
        {                              // 保险丝熔断成功
          P2OUT &= ~BIT5 ;             // 保险丝熔断成功指示(绿色)
          for (k=1; k<=3; k++)
          delay(50000) ;             // 绿灯常亮
        }
      else
      {                              // 保险丝未熔断黄灯闪烁3 次
        for(k=1;k<=3;k++)
         {
          P1OUT &= ~BIT3 ;          // 保险丝准备指示灯(黄色)亮
          delay(50000) ;
          P1OUT |= BIT3 ;           // 保险丝准备指示灯(黄色)灭
          delay(50000) ;
          }
       }
    }
else
{                               // 保险丝已熔断
  for(k=1;k<=3;k++)
   {
    P1OUT &=~BIT3 ;              // 保险丝准备指示灯(黄色) 亮
    P2OUT &=~BIT5 ;              // 保险丝熔断成功指示(绿色)亮
    delay(50000) ;
    P1OUT |= BIT3 ;              // 保险丝准备指示灯(黄色) 灭
    P2OUT |= BIT5 ;              // 保险丝熔断成功指示(绿色)灭
    delay(50000) ;
   }
  }
  P1OUT &= ~BIT3 ;              // 保险丝准备指示灯(黄色)亮
  }
}
}

本加密熔断器在实际应用中取得了非常理想的效果,可对MSP430 系列单片机的保险丝进行可靠而有效的熔
断,完全保护了MSP430单片机中的代码安全。在实际的使用中达到非常好的经济效益和社会效益。

结语
本系统可应用于整个MSP430系列单片机,具有功能强大、性能可靠、成本低、体积小等特点。完全可以替代目前市场上售价高达1000~2000元的编程器,具有非常广阔的应用前景和推广价值

作者: 华淞大侠    时间: 2021-7-6 20:15
xiangd 漂亮 ,,,值得  学习 力缆狂澜
作者: jchen123    时间: 2022-5-12 15:43
现在几百元就可以买个了
作者: 18573114123    时间: 2022-5-14 20:16
感谢楼主分享




欢迎光临 DIY编程器网 (http://diybcq.com/) Powered by Discuz! X3.2