Flash型单片机的加密与解密的方法

[09-14 10:28:14]   来源:http://www.88dzw.com  维修经验技巧   阅读:8429

文章摘要:由于系统靠检查Flash ROM和EEPROM是否清空来决定系统是否保持加密状态,所以,如果用户程序偶然将Flash ROM和EEPROM的内容全部擦除,那么系统也将自动解密。·使用密码的加密为了留有读取ROM代码的可能,用户可以采用一种带有密码的加密方式。解密时,用户只要给出正确的密码(称为“后门密码”),就可以读写ROM,而不破坏其内容了。使用这种方法,用户需要在加密之前,设定4个字长的密码,并将其存放在Flash中,MC9S12DP256存放密码的Flash地址是从$FF00到$FF07。设定的密码可以随用户程序一起下载到芯片中。解密时,接受用户输入的密码并验证的工作只能由一个用户接口程

Flash型单片机的加密与解密的方法,标签:维修技巧,http://www.88dzw.com

  由于系统靠检查Flash ROM和EEPROM是否清空来决定系统是否保持加密状态,所以,如果用户程序偶然将Flash ROM和EEPROM的内容全部擦除,那么系统也将自动解密。

  ·使用密码的加密为了留有读取ROM代码的可能,用户可以采用一种带有密码的加密方式。解密时,用户只要给出正确的密码(称为“后门密码”),就可以读写ROM,而不破坏其内容了。

  使用这种方法,用户需要在加密之前,设定4个字长的密码,并将其存放在Flash中,MC9S12DP256存放密码的Flash地址是从$FF00到$FF07。设定的密码可以随用户程序一起下载到芯片中。

  解密时,接受用户输入的密码并验证的工作只能由一个用户接口程序来完成的,不能使用BDM编程器。接口的方式没有限制,如SCI、SPI、IIC、MSCAN等等,只要用户能够将正确的密码输入,任何一种接口方式都是可以的,最为典型的接口是串口。

  假设接收的密码存在变量KEY0-KEY7中,验证密码的程序如下:

;******************
;*  TEST KEYS 
;******************
TESTKEYS
     BSET  FCNFG,$20             ;置KEYACC为1
     LDD   KEY0
     STD   $FF00
     LDD   KEY2
     STD   $FF02
     LDD   KEY4
     STD   $FF04
     LDD   KEY6
     STD   $FF06                  ;验证KEY0-KEY7
     BCLR  FCNFG,$20     ;清KEYACC为0
  LDAA  FSEC
ANDA  #$03
CMPA  #$02
BNE   FAIL                   ; 是否验证成功?
SUCCESS          ; 密码验证成功
LDAA  FSTAT      ; 清除Flash状态寄存器
     ORAA  #%00110000
     STAA  FSTAT
     LDAA  #0
     STAA  FCNFG
     BRCLR FSTAT,$80,*
     LDD   #$FFFE
     STD   $FF0E                  ; 改写加密状态,复位后系统不再加密
     LDAA  #$20
     STAA  FCMD                 
     BSET  FSTAT,#$80             ; 开始执行
     BRCLR FSTAT,$40,*   
   RTS                          ; 返回
FAIL RTS

    程序返回后,如果用户输入的密码和原值符合,系统将会把保密寄存器FSEC的最后两位SEC[1:0]改写到未加密的状态,系统自动解密。如果验证没有通过,系统将保持加密状态。

www.88dzw.com

  需要注意,不管使用哪种方式将系统解密,解密后的系统虽然可以暂时读取Flash,但是由于单元$FF0F中的最后两位仍处于加密状态(全擦除后,“11”的组合仍为加密状态),系统在下次复位后,仍会回到加密的状态,所以为了彻底解密系统,必须改写这两位为“10”。

上一页  [1] [2] [3]  下一页


Tag:维修经验技巧维修技巧家电维修 - 维修经验技巧