Ada beberapa hal yang saya tidak mengerti pada proses boot mikrokontroler STM32F4.
Pemahaman saya adalah sebagai berikut:
- Sepatu bot ARM Cortex-M4 mengharapkan nilai inisialisasi penunjuk tumpukan dan vektor interupsi aktif
0x00000000 + SCB->VTOR
, sedangkanSCB->VTOR
dihapus saat reset. - Tidak ada memori di lokasi itu. Memori flash dimulai pada
0x08000000
, SRAM pada0x20000000
. - Untuk memungkinkan booting, μC dapat memetakan rentang memori flash atau SRAM
0x00000000
. Rentang memori yang akan dipetakan ditentukan oleh status pin booting.
Pertanyaan saya:
Mengapa manual referensi STM32F4 mengatakan pada halaman 69 itu
Ketika perangkat melakukan booting dari SRAM, dalam kode inisialisasi aplikasi, Anda harus memindahkan tabel vektor dalam SRAM menggunakan tabel pengecualian NVIC dan register offset.
? Dalam pandangan saya, ini tidak perlu, karena seluruh wilayah memori tetap ada. Menariknya, ini sepertinya tidak diperlukan ketika wilayah flash dipetakan kembali ke
0x0
angkasa.Satu-satunya penggunaan untuk boot dari SRAM saya bisa memikirkan jika untuk mengurangi siklus tulis pada flash selama pengembangan. Sebelum Anda melepaskan μC dari reset, Anda menulis program ke SRAM menggunakan debugger dan kemudian boot dari sana. Namun, karena Anda memiliki akses debugger, toh tidak akan ada batasan untuk memulai dari mana. Jadi mengapa memiliki fitur ini?
Bahwa posisi boot berasal dari pin menunjukkan (setidaknya menurut pendapat saya) bahwa fitur ini digunakan tidak selama pengembangan tetapi dalam operasi akhir. Dan dalam operasi terakhir, SRAM jelas saat boot. Oleh karena itu tidak masuk akal untuk boot dari SRAM.
Jawaban:
Pertanyaan 1:
Saya tidak bisa menjawab pertanyaan pertama Anda. Namun dalam manual pemrograman tempat register VTOR dijelaskan ( halaman 212 ) menyatakan bahwa bit 29 digunakan untuk menentukan di mana tabel vektor berada, baik di wilayah kode (0) atau di wilayah SRAM (1).
Sekarang saya tidak mengerti mengapa ini harus dilakukan karena alasan yang sama dengan yang Anda sebutkan, SRAM akan dialihkan ke 0x0, jadi mengapa ada kebutuhan untuk mengatur offset ini?
Satu-satunya tebakan yang saya miliki dinyatakan pada halaman 69 yang dikutip. Mereka mengatakan:
Mungkin pada interupsi bus ICode digunakan, yang tidak dapat mengakses SRAM bahkan ketika memetakan kembali (saya tidak tahu apakah ini benar). Ini akan menjelaskan mengapa bit ini harus diatur sesuai, memberitahu inti untuk menggunakan bus sistem dan mengakses SRAM.
Pertanyaan 2:
Walaupun mungkin benar, bahwa SRAM kosong pada boot pertama perangkat, itu tidak selalu untuk boot nanti. Jadi Anda bisa membuat sesuatu seperti perangkat bertenaga baterai yang memprogram SRAM-nya selama produksi dan kemudian berjalan sampai baterai mati, yang akan menghapus SRAM-nya. Saya kira ini akan membuat rekayasa balik perangkat sedikit lebih sulit.
Pada perangkat bertenaga baterai, Anda mungkin akan menggunakan mode siaga untuk menghemat daya, dan jika Anda meninggalkan mode itu, pin-Boot akan dicoba lagi, jadi mereka harus memiliki pengaturan yang benar untuk mendapatkan SRAM lagi.
Anda juga dapat me-reboot perangkat dengan aman karena konten SRAM tidak hancur jika tidak ada pengambilan daya.
Bukan aplikasi yang sangat meyakinkan untuk memperbaiki semua kesulitan untuk memetakan ulang SRAM.
sumber