MPU in STM32 MCUs
MPU
αိုαေαααဲ့ Memory Protection Unit αိုα
αα္ေαြေႏြးαြားαွာျαα
္αါαα္။ α‘αိုα္းαα္ေαး
ေαြαဲαေαါ့။ αα½ြα္ေαာ္αိုααα
္ေαြ Memory Protection αိုαံုးααဲ့α‘αိααα္αြα္α်α္αေαာ့
Memory ေαααွာααွိαဲ့ Process αα
္αုα Memory αိုαွα္းαံုးαာαိုαာαြα္αိုααα္α‘αြα္ျαα
္αါ
αα္။ α‘ဲαီ process α malware αα္းျαα
္ႏိုα္αα္။ bug αα္းျαα
္ႏိုα္αα္။ αီαို
process α်ိဳး αိုαာαြα္ေαးαိုα္ျαα္းα‘ားျαα့္ Memory ေαααွာα‘αုα္αုα္ေααဲ့ α‘ျαားေαာ
α‘αုα္ေαြαို αိαိုα္αႈααွိေα
αွာျαα
္αါαα္။ Memory Protection αိုαုα္ေαာα္αိုααα္α‘αြα္
αα္းαα္းေαြ α‘α်ားαΎαီးαွိαါαα္။
·
Segmentation - Memory αို α‘αိုα္းαα္ေαးေαြα‘ျαα
္αိုα္းျαားေαးαဲ့αုα္αα္းα
α₯္
ျαα
္αါαα္။ Memory Location αဲα Reference αွာ α‘αိုα္းαα္ေαးေαြαိုαြဲျαားαားαဲ့ αα္းαိုးαα
္αုαါαα္αါαα္။
ေαာα္ေαာ့ Memory α‘αိုα္းαα္ေαးေαြαဲα αΎαားαွာ offset αα
္αုαα္းαါαα္αါαα္။ 32 bit
(x86) processors ေαြαွာαိုαα္ Segment Register (4) αုαွိαါαα္။ CS(Code
Segment), SS(Stack Segment), DS(Data Segment) αဲα ES(Extra Segment) αိုαျαα
္αΎααါαα္။
ေαာα္αိုα္းαα္αα့္αို္α္αဲ့ Segment ေαြα ေαာ့ FS αဲα GS αိုαျαα
္αΎααါαα္။
STM32
αွာ MPU αို Manage αုα္αα့္α‘ေαΎαာα္းαို αα္αα္ေαြးေႏြးαြားαါ့αα္။
α‘αα္αံုး MPU αိုααံုးαα္
STM32 Microcontroller αဲα MPU αို enable αုα္αားααါαα္။ program ေαး αားααα္ေαါ့α်ာ၊
MPU αို αျαα
္αေα enable αုα္αားαဲ့ααွာαါ။ MPU αို enable αုα္ααားαဲ့αူး αိုαα္ αိαိ
manage αုα္αα်ွα Memory α‘ေαααွာ αာαα္ေαာα္αႈ αွαွိαွာααုα္αါαူး။ MPU αို
Support ေαးαဲ့ STM32 ေαြαေαာ့ ARM Cortex M0+/M3/M4 αဲα M7 αိုαျαα
္αΎααါαα္။
STM32F1 Series, STM32F2 Series, STM32F3 Series, STM32F7 Series, STM32L0 Series,
STM32L1 Series, STM32L4 Series ေαြαဲα STM32H7 Series ေαြαွာ MPU αို support ေαး
αားαိုေαြαααါαα္။ αိုျαီးေαာ့ αံုျαံဳ ျαα့္α
ံုαဲ့ Embedded System αα
္αုαို MPU αံုးျαီးေαာ့
αα္αီးျαဳαုα္ႏိုα္αါαα္။ α‘ဲαီαိုα်ိဳးαိုေαာα္းαဲ့ Embedded System αα
္αုαိုαα္ေαာα္αိုααα္
α‘αြα္ေα‘ာα္αါαုα္αα္းα
α₯္ေαြαို ေαာα္αြα္ေαးααွာျαα
္αါαα္။
·
OS Kernal αိုα်ိဳးα‘ေαးαΎαီးαဲ့ αုα္αα္းα
α₯္ေαြαေααံုးαα့္
data ေαြαိုα်α္αီးαα
္αα့္ User Application ေαြαိုαားျαα
္αားααွာျαα
္αါαα္။
·
Injection αုα္αာαိုαာαြα္ႏိုα္αိုαα‘αြα္
SRAM Memory αို non-executable α‘ျαα
္ αα္αွα္αားααါαα္။ Code Injection α‘ေαΎαာα္းαို
Java Program αα
္αုαဲα αွα္းျαျαီး ေαာ့α
ာေαးαါα₯ီးαα္။
·
Memory Access Attributes ေαြαိုေျαာα္းαဲေαးααါαα္။
Memory
Region αα αု α‘αα္αို αာαြα္ႏိုα္αိုαα‘αြα္ MPU αိုα‘αံုးျαဳႏိုα္αါαα္။ Memory
Region α αုαာ 256 bytes α‘αα္းαံုးαွိαα္αိုαα္ α‘ဲ့αီ Memory αွာ Sub-Region α‘ေααဲα
α
ုα
ုေαါα္း α αုαွိျαα္αါαα္။ Sub-Regions αα
္αုα်α္းα
ီαာαိုαα္ αα
္αုαဲα αα
္αု
size αူαΎααါαα္။ αာαိုααဲαိုေαာ့ α‘αα္αံုး Memory Region Size αာ Cache Line αေααိα္းα်ဳα္αိုαျαα
္αါαα္။
Cache Line αာ Length α‘ေααဲα 32 bytes αွိ αါαα္။ αါαိုαα္ ေα
ာαα αα½ြα္ေαာ္ေျαာαဲ့αဲ့
32 bytes α‘αြα္α‘α
ားαွိαဲ့ Sub-region α
ုα
ု ေαါα္းαွα
္αုαွာαိုαα္ 256 bytes αွိαါαα္။
(8x32=256) ျαα
္αါαα္။ Regions ေαြαာαို αα္ 0 (αုα) αေα 15 (αα့္αါး) α‘αိαံαါα္α
α₯္
α‘αိုα္းαွိေααါαα္။ Default Region αိုျαီးေαာ့αα္း αွိαါေαးαα္။ αူααဲα ID αေαာ့
(-1) ျαα
္αါαα္။ 0-15 α‘αိ Memory Regions ေαြαာαိုαα္ Default Region αα္αိုျαီးေαာ့
Priority ျαα့္αါαα္။
Region
ေαြαို αα္αားαိုα nested α‘ေααဲα αα
္αုαဲααα
္αုေαာαားαိုααα္းααါαα္။ Region αံαါα္
15 αာαိုαα္ Priority α‘ျαα့္αံုးျαα
္αါαα္။ Region αံαါα္ 0 αေαာ့ Priority α‘αိα့္αံုးαါαα္α်။
Priority αိုαာαာαα္း Region ေαြ Overlap (αα္) αဲ့α‘αါ αွာαိုα‘α္αါαα္။
Priority ေαြαိုαာ
α‘ေααα္αွα္αားαာျαα
္ျαီးေαာ့ ေျαာα္းαဲαိုα ααႏိုα္αါαူး။ αံု (α) αွာ Region ေαြαို
Overlap αုα္ျααားαါαα္။ αΎαα့္αိုα္αါ။ αံု (α) α Region (6) αုαဲαα₯ααာျαေαးαားαာαါ။
Region 4 αာ Region 0 αဲα 1 αို Overlap αုα္αားαာαို ျαα္αΎααွာαါ။ Region 3 αဲαွာαိုαα္ေαာ့
Region 5 αို Enclosed αုα္αားαာαို ေαြααΎαααါαα္။ Priority αို Ascending Order (αΎαီးαာαွαα္αာαိုα)
α
ီα
α₯္αားαဲ့α‘αြα္ေαΎαာα့္ αိေααΌာ္ေαာα္αဲαျααားαဲ့ Region ေαြα Priority αိုျαα့္αါ
αα္။ αါေαΎαာα့္αိုααိုα Region 0 α Write αုα္αိုααျαီးေαာ့ Region 4 α Write αုα္αိုααααဲ့αα္
Region 0 αဲα 4 αဲα Overlap ျαα
္α
α₯္αဲαွာαΎαေαာα္ေααဲ့ address αα
္αု αာαα္း write αုα္αိုαααွာααုα္αါαူး။
MPU
αာ unified ျαα
္αါαα္။ unified ျαα
္αα္αိုαာαာαα္းαိုေαာ့ data α‘αြα္ region αဲα
instruction α‘αြα္ region αိုျαီးေαာ့ regions ေαြαိုαြဲျαားαားαာααုα္ αိုααါ။
Cache αုိα်ိဳး Memory attributes ေαြαိုαα္αွα္αိုααα္α‘αြα္αα္း MPU αို α‘αံုးျαဳႏိုα္αါαα္။
Cacheability αာ System Level Cache Unit αဲαို αα့္αိုαααါ αα္။ αါαွααုα္ Memory
Controller αီαိုαα့္αိုααα္းααါαα္။ ARM Processor Architecture αဲα Memory
Attribute Setting ေαြαဲαွာ Cache Level ႏွα
္αုαွိαါαα္။ α‘αြα္းαိုα္း cache
(Inner Cache) αဲα α‘ျαα္αိုα္း cache (Outer Cache) αိုျαီးေαာ့ေαါ့ေαာ္ ။ αိုαေααိ
αα½ြα္းα်α္α‘ေααဲα STM32F7 series αဲα STM32H7 Series ေαြαွာ Cache Level αα
္αုαာαွ်α္αွိαါαα္။
(L1- Cache) Cache Control Register αေαျαီးေαာ့ Cache ေαြαို αိα္းα်ဳα္αါαα္။ αိုαေααိ
Memory Region α cacheable ျαα
္ααား αျαα
္αူး αားαိုαာαို MPU αေαျαီးေαာ့ αြဲျαားαိαါαα္။
αါ့α‘ျαα္ MPU αာ Cache Policy αို αα္αွα္ႏိုα္αါေαးαα္။ αα½ြα္းα်α္α‘ေααဲα
L1-Cache αွိαဲ့ STM32F7 ေαြαဲα STM32H7 ေαြα‘αြα္ေαာ့ Memory Region αေα L1-Cache α‘αြα္
cache attributes ေαြαို αα္αွα္αိုααα္α‘αြα္ MPU ααြα့္ေαးαါαα္။
STM32 products ေαြαဲα
processor αွာ default memory map αα‘ေααα္αွα္αား αာαွိαါαα္αα္α်ာ။ αူααိုေαာ့ αံု(α)
αွာျαααားαါαα္။
Memory types
Memory α‘α်ိဳးα‘α
ာ αံုးαုαွိαါαα္။
• Normal Memory
Data bytes ေαြαို αိုေαွာα္ျαα္းαဲα load(αြဲαα္) αုα္αα္းα
α₯္ေαြαိုေαာα္αြα္αါαα္။
Normal Memory αွာαိုαα္ αိုေαွာα္ျαα္း (store) αဲα load(αြဲαα္ျαα္း) αုα္αα္းα
α₯္ေαြαို
CPU αေαာα္αြα္α
αာααိုα‘α္αါαူး။
• Device Memory
Device Memory αိုαα္ေαာ့ αိုေαွာα္ျαα္း (store) αဲα
load(αြဲαα္ျαα္း) αုα္αα္းα
α₯္ေαြ αိုα‘α
ီα‘α
α₯္α‘αိုα္α‘αိα‘α် αα္αွα္αားαါαα္။
Registers ေαြαိုေαာ့ αα့္ေα်ာ္
αဲ့ α‘α
ီα‘α
α₯္α‘αိုα္α‘αိα‘α်αα္αွα္αားαိုααိုα‘α္αါαိα့္αα္။
• Strongly Ordered Memory:
Program
ေαးαα့္αားαဲ့ α‘α
ီα‘α
α₯္α‘αိုα္းαဲ α‘αုα္αံုးαိုေαာα္αြα္αါαα္။ αီေααာ αွာαိုαα္ေαာ့
CPU αာ Program αဲα ေαာα္ instruction αα
္αုαိုα‘αုα္ααုα္αα္ load/store αုα္αα္းα
α₯္α‘αုα္αုα္αာျαီးαံုးေα‘ာα္ေα
ာα့္ေαးαါαα္။
αါαာαα္း Performance αို αα္ေαာα္αႈαွိαါαα္။


No comments:
Post a Comment