MSP430加密熔絲燒斷器的制作
MSP430系列單片機(jī)是德州儀器(TI)公司推出的一款16位超低功耗單片機(jī)。它能夠在1.8~3.6V電壓、1MHz頻率的條件下運(yùn)行,耗電電流在0.1~400μA。在運(yùn)算速度上,MSP430系列單片機(jī)能在8 MHz 晶振的驅(qū)動(dòng)下,實(shí)現(xiàn)125ns的指令周期。16位的數(shù)據(jù)寬度、125ns的指令周期以及多功能的硬件乘法器相配合,能實(shí)現(xiàn)數(shù)字信號(hào)處理的某些算法(如FFT等) 。
在整合方面,MSP430系列單片機(jī)將大量的CPU外圍模塊集成在片內(nèi),有如下一些模塊:看門狗(WDT) 、模擬比較器、串口、硬件乘法器、液晶驅(qū)動(dòng)器、10位/12位/14位ADC、端口0~6 、基本定時(shí)器。其中定時(shí)器A、B均帶有多個(gè)捕獲/ 比較寄存器,同時(shí)可實(shí)現(xiàn)多路PWM 輸出;模擬比較器與定時(shí)器配合,可方便地實(shí)現(xiàn)ADC;液晶驅(qū)動(dòng)多達(dá)160 筆段;硬件ADC 模塊在小于10 μs的速率下實(shí)現(xiàn)10~14 位的高速、高精度轉(zhuǎn)換,同時(shí)提供采樣/保持與參考電壓;端口0、1、2能夠接收外部上升沿或下降沿的中斷輸入。
MSP430系列單片機(jī)的開發(fā)調(diào)試有多種技術(shù)方案,其中以JTAG和BOOTSTRAP(簡(jiǎn)稱“BSL”) 方式最為方便。對(duì)于Flash型的MSP430單片機(jī)初期開發(fā)進(jìn)行的仿真,只需要1臺(tái)PC 機(jī)和1個(gè)JTAG控制器即可實(shí)現(xiàn)。進(jìn)入產(chǎn)品級(jí)開發(fā)階段,為了保護(hù)用戶代碼,燒斷Flash的保護(hù)熔絲以后就無(wú)法再通過J TAG 口訪問單片機(jī), 這時(shí)用戶對(duì)Flash中的程序再進(jìn)行檢查或更新就只能通過BOOT2STRAP 進(jìn)行。不用擔(dān)心用戶代碼會(huì)泄露,BOOTSTRAP提供了32字節(jié)256位的密碼保護(hù),能完全確保代碼的安全性。
1 熔斷加密原理
MSP430 系列單片機(jī)采用JTAG(實(shí)際上稱為IEEE1149.1或邊界掃描)接口技術(shù),實(shí)現(xiàn)對(duì)單片機(jī)全部存儲(chǔ)器的訪問,包括程序Flash 、ROM、RAM ,并可對(duì)其進(jìn)行擦除、讀寫。它能用于程序的下載,監(jiān)測(cè)程序使用情況和各個(gè)變量與寄存器的使用情況, 并可對(duì)其進(jìn)行修改。
JTAG接口需要4 根信號(hào)線、地線和電源線。具體信號(hào)線的定義如表1 所列。
表1 JTAG接口信號(hào)線
---------------------------------------------
引腳 方向 描述
TMS 輸入 JTAG狀態(tài)機(jī)控制信號(hào)線
TCK 輸入 JTAG時(shí)鐘輸入線
TDI/TCLK 輸入 JTAG數(shù)據(jù)輸入線/ TCL K輸入
TDO 輸出 JTAG數(shù)據(jù)輸出線
---------------------------------------------
JTAG接口為程序的調(diào)試、仿真及監(jiān)控帶來(lái)了很大的方便,大大提高了編程效率,縮短了開發(fā)周期;但在程序測(cè)
試完成轉(zhuǎn)換為產(chǎn)品推向市場(chǎng)時(shí),就必須對(duì)程序代碼進(jìn)行加密處理,防止程序代碼的泄漏。JTAG接口的安全性很差,只要符合J TAG 標(biāo)準(zhǔn)的控制器就可以將程序代碼讀出,所以必須禁止J TAG 功能。對(duì)于MSP430 系列單片
機(jī),禁止J TAG功能的途徑是將單片機(jī)內(nèi)部的加密保險(xiǎn)絲熔斷,熔斷后的單片機(jī)就無(wú)法再使用JTAG功能,從而達(dá)到加密程序代碼的目的。具體的JTAG及加密保險(xiǎn)絲結(jié)構(gòu)框圖如圖1所示。
MSP430系列單片機(jī)在上電復(fù)位時(shí)會(huì)通過TDI/TCLK端對(duì)保險(xiǎn)絲進(jìn)行檢測(cè),當(dāng)保險(xiǎn)絲完好時(shí),在TDI/TCL K和地之間會(huì)有1mA 的電流流過。保險(xiǎn)絲檢測(cè)出現(xiàn)在上電復(fù)位以后TMS 端的第一個(gè)下降沿上,在第二個(gè)下降沿上會(huì)解除保險(xiǎn)絲的檢測(cè),直到下一次的上電復(fù)位再進(jìn)行保險(xiǎn)絲檢測(cè),即在每一次的上電復(fù)位都會(huì)對(duì)保險(xiǎn)絲進(jìn)行檢測(cè)。保險(xiǎn)絲檢測(cè)電流只有在保險(xiǎn)絲檢測(cè)方式時(shí)才會(huì)流過TDI/TCLK端,當(dāng)檢測(cè)不到保險(xiǎn)絲電流時(shí),JTAG功能就會(huì)失效,且這種加密方式是硬件方式的加密,一旦保險(xiǎn)絲熔斷,JTAG功能就永久失效了,無(wú)法再通過JTAG口訪問單片機(jī),從而保證了單片機(jī)內(nèi)代碼的安全。
2 熔斷加密的時(shí)序及方法
MSP430單片機(jī)保險(xiǎn)絲的熔斷必須在特定的條件下進(jìn)行。表2 列出了熔斷保險(xiǎn)絲所需的條件及具體參數(shù)。
表2 保險(xiǎn)絲熔斷條件及參數(shù)
---------------------------------------------------------
保險(xiǎn)絲電參數(shù) min nor max
熔斷時(shí)單片機(jī)供電電壓VCC(fb)/V 2.5 3.3 3.6
熔斷時(shí)施加在TDI/TCLK端的電壓Vfb/V 6 6.5 7
熔斷時(shí)施加在TDI/TCLK端的電流Ifb/mA 100
熔斷時(shí)間tfb/ms 1
---------------------------------------------------------
在滿足表2 所列的條件下,簡(jiǎn)單地將6.5V電壓加在TDI/TCLK端上時(shí),是無(wú)法熔斷保險(xiǎn)絲的,必須在一定的時(shí)序及指令下才可以完成。下面是熔斷保險(xiǎn)絲所需的指令及時(shí)序:
IR_SHIFT(" IR_CN TRL_SIG_16BIT" )
DR_SHIFT_IN(0x7201) ;TDO 信號(hào)切換為TDI 功能。TDI信號(hào)端釋放, TDO 切換為TDI
IR_SHIFT(" IR_PREPARE_BLOW" ) ;通過TDO 信號(hào)端傳輸
MsDelay(1) ;延時(shí)1ms。等待,連接Vpp至TDI信號(hào)端
IR_SHIFT(" IR_EX_BLOW") ;通過TDO 信號(hào)端給目標(biāo)板發(fā)送指令
MsDelay(1) ;延時(shí)1 ms ,將Vpp 從TDI 信號(hào)端
;移開;切換TDI 信號(hào)端返回TDI
;功能,同時(shí)復(fù)位J TA G狀態(tài)機(jī)
IR_SHIFT(" IR_CNTRL_SIG_16BIT" )為切換J TAG進(jìn)入16位數(shù)據(jù)接收模式;DR_ SHIFT_ IN(0x7201)為將TDO 信號(hào)切換為TDI功能,TDI信號(hào)釋放,為接入熔斷電壓Vpp作準(zhǔn)備;IR_SHIFT(" IR_ PREPARE_BLOW" )為設(shè)置MSP430 進(jìn)入保險(xiǎn)絲熔斷方式;MsDelay(1)為延時(shí)1ms,同時(shí)連接熔斷電壓Vpp 至TDI信號(hào)端;IR_ SHIFT("IR_BX_BLOW" )為執(zhí)行保險(xiǎn)絲熔斷;MeDelay(1) 為延時(shí)1ms,同時(shí)斷開TDI端的熔斷電壓Vpp,TDI信號(hào)端切換回TDI功能,JATG狀態(tài)機(jī)復(fù)位。保險(xiǎn)絲加密熔斷完成。
3 熔斷加密器的設(shè)計(jì)與實(shí)現(xiàn)
熔斷加密器可以實(shí)現(xiàn)對(duì)MSP430Flash單片機(jī)的編程、燒熔絲和BSL下載。可以選擇編程后是否熔斷芯片內(nèi)熔絲,進(jìn)行加密;可自行設(shè)置密碼,徹底保護(hù)芯片內(nèi)容;可進(jìn)行完全擦除編程和保留編程,通過BSL 方式讀出目標(biāo)CPU內(nèi)的代碼。
熔斷加密器的硬件采用了MSP430F1111A作為系統(tǒng)芯片,實(shí)現(xiàn)對(duì)目標(biāo)JTAG口的通信控制、熔斷電壓V pp的加載與分離、目標(biāo)MSP430 單片機(jī)中保險(xiǎn)絲熔斷指令的控制。在電源部分,熔斷電壓V pp 及100mA的熔斷電流是在7806三端穩(wěn)壓芯片與地之間串接二極管IN4001來(lái)實(shí)現(xiàn)的;熔斷電壓Vpp的加載與分離通過繼電器的通斷來(lái)實(shí)現(xiàn),并使用了3 個(gè)LED分別指示目標(biāo)單片機(jī)保險(xiǎn)絲未熔斷、正在熔斷及已熔斷的狀態(tài)。熔斷加密器系統(tǒng)控制部分的電路如圖2 所示。
軟件部分是通過C 語(yǔ)言來(lái)實(shí)現(xiàn)熔絲加密器與目標(biāo)單片機(jī)之間的數(shù)據(jù)通信及指令控制的。具體軟件流程如圖3所示。
以下為加密熔斷器主程序:
LEADBBS CODE |
#include "MSP430x11x.h" void main (void) { unsigned char k ; WDTCTL = WDTPW + WDTHOLD ; P1DIR = 0xFE; P1OUT &= ~BIT2 ; // 斷開Vpp P1OUT &= ~BIT3 ; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色) 亮 P2OUT |= BIT5 ; // 保險(xiǎn)絲熔斷成功指示(綠色) 滅 P2DIR = 0xEF ; while (1) { if ((P1IN&0x01)==0) { ResetTAP1(); //? delay(50000); IR_SHIFT(0x14); DR_SHIFT16 (0xAAAA); if(tdovalue != 0x5555) { // 保險(xiǎn)絲未熔斷 P1OUT |= BIT3; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色) 滅 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) { // 保險(xiǎn)絲熔斷成功 P2OUT &= ~BIT5 ; // 保險(xiǎn)絲熔斷成功指示(綠色) for (k=1; k<=3; k++) delay(50000) ; // 綠燈常亮 } else { // 保險(xiǎn)絲未熔斷黃燈閃爍3 次 for(k=1;k<=3;k++) { P1OUT &= ~BIT3 ; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色)亮 delay(50000) ; P1OUT |= BIT3 ; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色)滅 delay(50000) ; } } } else { // 保險(xiǎn)絲已熔斷 for(k=1;k<=3;k++) { P1OUT &=~BIT3 ; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色) 亮 P2OUT &=~BIT5 ; // 保險(xiǎn)絲熔斷成功指示(綠色)亮 delay(50000) ; P1OUT |= BIT3 ; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色) 滅 P2OUT |= BIT5 ; // 保險(xiǎn)絲熔斷成功指示(綠色)滅 delay(50000) ; } } P1OUT &= ~BIT3 ; // 保險(xiǎn)絲準(zhǔn)備指示燈(黃色)亮 } } } |
本加密熔斷器在實(shí)際應(yīng)用中取得了非常理想的效果,可對(duì)MSP430 系列單片機(jī)的保險(xiǎn)絲進(jìn)行可靠而有效的熔
斷,完全保護(hù)了MSP430單片機(jī)中的代碼安全。在實(shí)際的使用中達(dá)到非常好的經(jīng)濟(jì)效益和社會(huì)效益。
結(jié)語(yǔ)
本系統(tǒng)可應(yīng)用于整個(gè)MSP430系列單片機(jī),具有功能強(qiáng)大、性能可靠、成本低、體積小等特點(diǎn)。完全可以替代目前市場(chǎng)上售價(jià)高達(dá)1000~2000元的編程器,具有非常廣闊的應(yīng)用前景和推廣價(jià)值。
評(píng)論