[ บทความ : วิธีการ Lock เพื่อป้องกันการอ่านไมโครคอนโทรลเลอร์ตระกูล Z8Encore!  ]

วิธีการ Lock เพื่อป้องกันการอ่านไมโครคอนโทรลเลอร์ตระกูล Z8Encore! 

ในการป้องกันการอ่าน Source Code จาก MCU ตระกูล Z8Encore! ออกมานั้นสามารถทำได้โดยการเข้าไป SET  ในส่วนของ Flash Option Bit  ซึ่งมีที่ตั้งอยู่ที่ หน่วยความจำแอดเดรส 0000H เพื่อให้ง่ายในการใช้งานผู้ใช้สามารถนำโปรแกรมย่อยที่เราเขียนให้ดูนี้ไปเรียกใช้งานได้เลยดังนี้

 

#include<stdio.h>

#include<ez8.h>

void codeproc(void);

char near RamByte;

 

 main()

 {

    codeproc();

   ……….…โปรแกรมที่ท่านเขียนขึ้นสำหรับใช้งานอื่นๆ…………….. ;

   ……….…โปรแกรมที่ท่านเขียนขึ้นสำหรับใช้งานอื่นๆ…………….. ;

   ……….…โปรแกรมที่ท่านเขียนขึ้นสำหรับใช้งานอื่นๆ…………….. ;

 

   }

 

   void codeproc(void)                          // โปรแกรมย่อย codeproc สำหรับป้องกันการอ่าน

   {  

   #pragma noopt    

              FFREQH = 0x48  ;              // Baud Rate For Flash

              FFREQL = 0x00  ;

              asm ("LDX %FF8,#%73")   ;  // write 73H to Flash Control register

                 asm ("LDX %FF8,#%8C")  ;  // write 8CH to Flash Control register

                 RamByte = (0x0000>>8)      ;

                 asm("LD R8,_RamByte")   ;  // Location of flash MSB

                 

                 RamByte = (0x0000&0x00FF) ;

                 asm("LD R9,_RamByte")    ;   // Location of flash LSB_RamByte

                 RamByte = 0xFB                   ;    //Value to be stored for code protection

                 asm("LD R10,_RamByte")   ;

                 asm("LDC@RR8,R10")       ;       // Load Byte into Flash location

                 while((FSTAT&0x3F) != 0x00)

                 {

                     FCTL = 0xFF                   ;      //Write some value other than 0x73,

                 }                                                  // 0x8C,0x95,and 0x63 to Flash control

                 }                                                  // register

 

 

   จากโปรแกรมนี้เวลาใช้งานเมื่อผู้ใช้เขียนโปรแกรมใดๆขึ้นมาก็ตามและต้องการที่จะทำการ Lock MCU  ให้ผู้ใช้เขียนโปรแกรมย่อย codeproc ลงไปด้วยโดยมีรูปแบบการเขียนตามตัวอย่างทุกประการไม่ต้องแก้ไขใดๆทั้งสิ้น  จากนั้นในส่วนของ main() โปรแกรม ท่านจะต้องเรียกโปรแกรมย่อย codeproc  ขึ้นมาโดยจะเรียกขึ้นมาในส่วนของโปรแกรมหลักที่ท่านเขียนขึ้นส่วนใดก็ได้ ในที่นี้เราจะเขียนไว้ใต้ main() แล้วจึงตามด้วยโปรแกรมหลัก และท่านจะต้องประกาศตัวแปร            

RamByte เป็นชนิด char near ไว้เหนือ main() ตามตัวอย่าง

 

                หลังจากเขียนโปรแกรมเรียบร้อยแล้วให้ทำการคอมไพล์ โดยคลิกที่ปุ่ม Rebuile All เมื่อคอมไพล์เรียบร้อยให้ทำการดาวน์โหลดลงบน MCU  ถ้าโปรแกรมที่อยู่ในMCUที่ท่านดาวน์โหลดลงไปมีการกำหนดการlockไว้ เวลาท่านจะดาวน์โหลดโปรแกรม ตัวใหม่ หรือตัวเดิมลงไปทับโปรแกรมที่มีอยู่ใน MCU ก็จะมีหน้าต่างขึ้นมาดังรูป

 

ให้ท่านเลือก Ok เพื่อดาวน์โหลดโปรแกรมตัวใหม่ลงไป หรือเลือก Cencel เพื่อยกเลิกการดาวน์โหลด

 

                และเพื่อให้แน่ใจท่านสามารถตรวจสอบการ Lock ได้โดย ให้ท่านทำการ Run โปรแกรม โดยคลิกที่ปุ่ม Go จากนั้นไปที่เมนู View เลือก Debug Windows และเลือกที่ Memory  จะมีหน้าต่างขึ้นมาดังนี้

 

               ให้ทิ้งหน้าต่างนี้ไว้ จากนั้นให้หยุดการ Run โดยคลิกที่ปุ่ม Stop Debugging แล้วจึงไปคลิกที่ปุ่ม Connect to Target [    ] เพื่อทำการอ่าน Source code จาก MCU แล้วจะมีหน้าต่างออกมาเตือนเหมือนตอนแรกดังรูป

 

 

               ซึ่งถ้าท่านคลิก Ok นั่นหมายถึงว่า ข้อมูลที่อยู่ใน MCU จะถูกลบทั้งหมด และค่าที่อ่านออกมาได้จะแสดงที่หน้าต่าง Memory ออกมาเป็น FF หมด ดังรูป แต่ถ้าคลิก Cencel จะยกเลิกการอ่านทำให้ไม่สามารถอ่านค่าอะไรออกมาได้

 

 

 


เขียนโดย : ทีมงานอีทีที
Author : ETT Team
e-mail : sales@etteam.com
วันที่ทำการปรับปรุง : ๒๕ มิ.ย. ๒๕๔๗