[ บทความ : วิธีการ 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 จะยกเลิกการอ่านทำให้ไม่สามารถอ่านค่าอะไรออกมาได้
|