Search This Blog

Tuesday, June 6, 2017

Flash content protection for LPC824

LPC824 low cost 32-bit ARM Cortex-M0 microcontroller လေးကို OM13071 LPCXpresso824-MAX Development board သုံးပြီး evaluate လုပ်လို့ရတဲ့ အတွေ့အကြုံလေးကို ပြောချင်ပါတယ်။ Board မှာ သုံးထားတဲ့ MCU အမျိုးအစားက LPC824M201JHI33 ပါ။ အရွယ်အစား က 5 x 5 x 0.85 mm ပဲရှိတဲ့ 33 pins ပါတဲ့ HVQFN package ပါ။

သူ့အတွက် MCUXpresso Integrated Development Environment (IDE) ကို download လုပ်ပြီး၊ install လုပ်ပါမယ်။ အခြား လိုအပ်တဲ့ tools တွေကိုလည်း ဒီမှာ တွေ့နိုင်ပါတယ်။ MCUXpresso ကိုဖွင့် ပြီး workspace သတ်မှတ်ပြီးတဲ့ အခါ ဘယ်ဘက်အောက်နားက Quick Start Paner ထဲက Import projects from file system ... ဆိုတာကိုနှိပ်ပြီး Browse LPC open resources ကိုနှိပ်ပြီး နမူနာ တွေကို ယူနိုင်ပါတယ်။



LPC824 board ကို ကွန်ပျူတာနဲ့ ဆက်လိုက်ရင် mass storage တစ်ခုအနေနဲ့ ပေါ်လာပါမယ်။ အဲဒါကို ပိတ်ထားနိုင်ပါတယ်။ ပြီးရင် နမူနာတွေထဲက periph_blinky ဆိုတဲ့ project ကို စမ်းကြည့်ပါမယ်။ အဲ့ဒီ project folder ထဲက readme တို့၊ src folder ထဲက source code တို့ကို ကြည့်ပြီးတဲ့ အခါ ခုနက ဘယ်ဘက်အောက်နားက Quick Start Paner ထဲမှာပဲ Build ကို နှိပ်ပြီး compile လုပ်နိုင်ပါတယ်။ ပြီးတဲ့အခါ သူ့ရဲ့ အောက်နားမှာပဲ Debug ကို နှိပ်ပြီး၊ MBED CMIS-DAP ဆိုတဲ့ probe ကိုရွေးပြီး တဲ့အခါ၊ မြား အစိမ်းလေးကို နှိပ်ပြီး run ကြည့်လိုက်ရင် LPC824 board ပေါ်က LED အနီရောင် blink ဖြစ်နေမှာကို တွေ့ရပါမယ်။





MCUXpresso မှာ GUI flash programmer ပါ ပါပါတယ်။ သူ့ကို command prompt ကနေလည်း အောက်ကလို run လို့ရပါတယ်။
crt_emu_cm_redlink --flash-mass-load "Y:\periph_blink.axf"
 -g --debug 2  --vendor NXP -p LPC824  -ProbeHandle=1
 -CoreIndex=0  --flash-driver LPC800_32.cfx




Flash content တွေကို လုံခြုံအောင်ကာကွယ်ဖို့ အတွက် LPC82x User manual ရဲ့ စာမျက်နှာ 371 မှာ Code Read Protection (CRP) options တွေအကြောင်းပြောပြထားပါတယ်။ CRP level ကို src folder ထဲက crp.c ထဲမှာ အောက်ကပုံမှာ ပြထား သလိုမျိုး ပြင်နိုင်ပါတယ်။ Project -> Properties -> C/C++ build -> Settings -> Tool Settings Tab -> MCU Linker -> Managed Linker Script -> Enable automatic placement of Code Read Protection field ကို tick လုပ်ထား မထား စစ်ပြီး၊ မလုပ်ရသေးရင် tick လုပ်ထားဖို့ လိုပါတယ်။



ပြီးရင် project အောက်က Binaries folder ထဲက periph_blinky.axf ဆိုတဲ့ ဖိုင်ပေါ်မှာ right click နှိပ်ပြီး Binary Utilities -> Disassemble လုပ်နိုင်ပါတယ်။ ထွက်လာတဲ့ dis ဖိုင်ထဲမှာ CRP_WORD ကို ရှာကြည့်လိုက်ရင် address 2fc မှာ သတ်မှတ်လိုက်တဲ့ သက်ဆိုင်ရာ တန်ဖိုး ရောက်နေတာကို တွေ့နိုင်ပါတယ်။





Intel hex format နဲ့ ထွက်စေချင်ရင် Project -> Properties -> C/C++ build -> Settings -> Build steps -> Post build steps မှာ Edit ကိုနှိပ်ပြီး အောက်ကလိုင်းကို ထည့်ပေးနိုင်ပါတယ်။

arm-none-eabi-objcopy -v -O ihex "${BuildArtifactFileName}" "${BuildArtifactFileBaseName}.hex"




ထွက်လာတဲ့ hex ဖိုင်ထဲမှာ ကြည့်လိုက်ရင် address 2fc မှာ သတ်မှတ်လိုက်တဲ့ သက်ဆိုင်ရာ CRP တန်ဖိုး ရောက်နေတာကို တွေ့နိုင်ပါတယ်။



Flash ကို burn ပြီးရင် power ပိတ်ပြီး ပြန်ဖွင့်လိုက်မှ သက်ရောက်မှု ရှိမှာဖြစ်ပါတယ်။ အဲ့ဒီလို လုပ်တဲ့ အခါ သတိထားရမှာက CRP level 3 ဆိုရင် chip ကပြန်သုံးလို့ မရတော့ပဲ အသေ ဖြစ်သွားပါမယ်။ CRP level 2 ဆိုရင်တော့ flash က ရေးလို့၊ ဖတ်လို့ မရတော့ပဲ SWD pin တွေလည်း သုံးလို့ မရတော့ပါဘူး။ ပြန် erase လုပ်မှပဲ ရမှာပါ။ အဲ့လို erase လုပ်ဖို့ကလည်း Flash magic တို့လို software သုံးပြီး uart ကနေဖျက်မှ ရပါမယ်။





UART ကို FTDI cable အစရှိတဲ့ usb to uart converter တစ်ခုခု သုံးပြီး ဆက်လို့ရပါတယ်။ ကျနော်ကတော့ CP2102 adapter ကို သုံးခဲ့ပါတယ်။ LPC824 board (schematic) က Arduino pin နဲ့တူတဲ့ အတွက် D0 pin (P0_0) က Rx ဖြစ်ပြီး၊ CP2102 adapter ရဲ့ Tx နဲ့ ဆက်ဖို့ လိုပါတယ်။ D1 pin (P0_4) က တော့ Tx ဖြစ်တဲ့ အတွက်၊ CP2102 module ရဲ့ Rx နဲ့ ဆက်လိုက်ပါတယ်။ Flash magic နဲ့ erase မလုပ်ခင်မှာ ISP ခလုပ်ကို နှိပ်ထားပြီး reset လုပ်ဖို့ လိုပါတယ်။

Flase magic မသုံးပဲ serial port ကိုပဲ သုံးပြီး ကိုယ့်ဟာကိုယ် အောက်က commands တွေပို့ပြီး erase လုပ်ရင်လည်း ရပါတယ်။

From host or controllerCommandHexadecimalDescription
H?3Finitiate to sync
CSynchronized53 79 6E 63 68 72 6F 6E 69 7A 65 64 0D 0A reply
HSynchronized53 79 6E 63 68 72 6F 6E 69 7A 65 64 0D 0Aack sync
COK4F 4B 0D 0A
H1200031 32 30 30 30 0D 0Afreq 12 MHz
COK4F 4B 0D 0A
HU 2313055 20 32 33 31 33 30 0D 0Aunlock wr and erase with unlock code 23130
C030 0D 0Asuccess code
HP 0 3150 20 30 20 33 31 0D 0A prepare sector 0 to 31 for erase or wr
C030 0D 0A success code
HE 0 31 45 20 30 20 33 31 0D 0A erase sector 0 to 31
C0 30 0D 0Asuccess code


UART နမူနာတွေ သုံးကြည့်တဲ့ အခါ LPC824 board ကိုယ်တိုင်က Mbed serial ဆိုပြိး ကွန်ပျူတာမှာ serial port တစ်ခု အနေနဲ့ သုံးလို့ရပါတယ်။ သူ့ကို သုံးဖို့ အတွက် SJ9 မှာ ရှိတဲ့ 0 ohm resistor ကို pin 2 နဲ့ 3 မှာ ပြောင်းဆက်ပေးဖို့ လိုပါတယ်။

No comments:

Post a Comment