Dalam processor ARM, memory terpetakan menjadi beberapa bagian yang masing masing bagian memory tersebut memiliki alamat yang bersifat fixed. Total rentang alamat memory tersebut berkisar 4GB
Non-Memory Map
Non-memory map artinya register atau peripheral yang tidak mempunyai alamat memori yang unik dan bukan bagian dari memory map.
Contohnya Register pada processor, untuk mengakses register ini kita tidak bisa menggunakan C pointer melainkan menggunakan inline assembly code yang disisipkan ke dalam kode C kita.
Memory Map
Memory map adalah Pemetaan area memori ke dalam rentang alamat tertentu yang telah di tentukan.
Misalnya rentang alamat memori untuk area Code ditetapkan dari alamat 0x0000_0000 sampai 0x1FFF_FFFF (lihat gambar), artinya produsen mikrokontroller yang menggunakan desain ARM harus menyambungkan memori ke dalam rentang alamat ini.
Kode Memori bisa berupa Flash, EEPROM, atau memori apapun untuk menyimpan kode.
Area memori (memory region) seperti Code, SRAM, Peripheral, dsb masing-masing memiliki rentang alamat memori yang unik satu sama lain. Masing-masing alamat yang sudah di tetapkan ARM akan berlaku di seluruh processor ARM walaupun berbeda vendor sekalipun
Mengapa harus dipetakan? Apa untungnya? Memory map memudahkan programmer untuk secara langsung mengakses area/lokasi memori atau peripheral tertentu menggunakan C pointer, karena alamat memory-nya sudah di tertulis di awal.
Demo - Mengakses register yang memory-mapped
Memory mapped register artinya, register tersebut mempunyai alamat memory yang unik. Dengan menggunakan alamat tersebut, kita dapat mengakses register tersebut dan melakukan operasi read/write.
Demo Coming soon...
Demo - Mengakses peripheral yang memory-mapped
Untuk menggunakan GPIOA, kita harus mendapatkan alamat peripheralnya yakni 0x4002_0000. Dari alamat tersebut kita bisa melakukan operasi read/write ke GPIO Register
Demo Coming soon...
Memory Region
Seperti pada gambar diatas, Total 4GB alamat memory tersebut terbagi menjadi beberapa area memori
Code Region
Rentang alamat : 0x0000_0000 - 0x1FFF_FFFF (512 MB)
Digunakan untuk menuliskan kode/program
Secara default, digunakan sebagai tempat dimana vector table berada
SRAM Region
Rentang alamat : 0x2000_0000 - 0x3FFF_FFFF (512MB)
Digunakan untuk SRAM
1MB pertama bit perta SRAM bisa digunakan untuk fitur bit-banding
Area ini bisa juga digunakan untuk mengeksekusi kode/program
Peripherals Region
Rentang alamat : 0x4000_0000 - 0x5FFF_FFFF (512MB)
Digunakan untuk peripherals, seperti GPIO, Timer, I2C, SPI dan sebagainya
1MB pertama bisa digunakan untuk bit-banding
Merupakan area eXecute Never, artinya tidak boleh melakukan eksekusi kode/program di area ini
Eksternal RAM
Rentang alamat : 0x6000_0000 - 0x9FFF_FFFF (1GB)
Digunakan untuk on-chip atau off-chip memory
Bisa melakukan eksekusi kode/r
Private Peripheral Bus Region
Rentang alamat : 0xA000_0000 - 0xDFFF_FFFF (512MB)
Merupakan area eXecute Never
Processor Peripheral seperti NVIC, Systick, dan lainya berada di area ini.
Selanjutnya apa?
Setelah tahu apa itu memory map, kita akan bahas apa itu Memory endianness