Apakah CPU ARM Cortex berhenti selama pemrograman mandiri flash?

8

Sebagian besar MCU ARM Cortex tidak memiliki fitur memori EEPROM. Sebagai gantinya, data persisten dapat ditulis ke memori flash yang sama yang juga memegang program.

  • Bagaimana status CPU selama proses hapus / tulis ini?
  • Apakah itu berhenti? Apakah itu mempertahankan operasi normal?
  • Apakah perilaku CPU tergantung pada keluarga MCU tertentu (misalnya STM32, Kinetis L) yang digunakan?

(Untuk beberapa orang ini bisa terlihat seperti pertanyaan bodoh, tetapi Microchip PIC16 menghentikan CPU hingga 40 ms selama pemrograman mandiri flash.)

waktu sebenarnya
sumber
Apakah Anda memiliki referensi tentang penghentian PIC16?
Daniel Grillo
@Wouter Yang mana? Sudahkah Anda mengujinya, katakanlah dengan interupsi yang sepenuhnya dijalankan dalam RAM?
starblue
2
Berlawanan dengan apa yang saya komentari sebelum membaca dari UserManuals mereka, chip NXP tampaknya hanya menonaktifkan antarmuka flash selama Dalam Pemrograman Aplikasi, jadi interupsi yang berjalan sepenuhnya dari RAM dimungkinkan selama Flash menghapus atau menulis waktu. Tapi wilayah yang sebagian besar belum dijelajahi ini, saya bisa membayangkan masalah waktu ketika interupsi membutuhkan waktu yang cukup lama, dengan konsekuensi untuk daya tahan Flash.
Wouter van Ooijen
Ya, Mereka tidak memiliki EEPROM tetapi, untuk situasi ini beberapa Cortex-M seperti ST32 memiliki register cadangan yang Anda dapat menyimpan informasi Anda di sana dan tentang PIC16, saya pikir itu adalah hal yang menarik. tolong sebutkan sumber Anda tentang PIC16. (Datasheet?)
Roh
@Wouter Ya, waktu bisa menjadi masalah. Kecuali untuk LPC8xx, "Salin RAM ke flash" perintah IAP mengambil frekuensi clock sebagai parameter, jadi saya curiga mereka menggunakan loop penundaan sederhana.
starblue

Jawaban:

4

Perilaku inti tidak tergantung pada implementasi. Flash bukan bagian integral dari inti ARM, dan karenanya, setiap vendor menerapkannya secara berbeda. Biasanya, selama proses hapus / tulis seseorang akan mengeksekusi dari RAM, dan eksekusi tidak akan terpengaruh.

Pada STM32, saya percaya membaca dari flash stall sementara menghapus / menulis siklus sedang berlangsung. Ini akan menyebabkan eksekusi inti terhenti hingga operasi selesai. Dengan beberapa konfigurasi flash, saya yakin Anda dapat terus menjalankan / membaca flash dan itu hanya akan berhenti ketika Anda mengakses bagian dari flash yang Anda hapus / pemrograman.

Saya telah menggunakan Cortex M lain di mana Anda harus mengeksekusi dari RAM sambil memodifikasi konten flash jika tidak Anda akan menemukan kesalahan bus (dan kemungkinan sistem crash jika penangan kesalahan bus / penangan kesalahan keras Anda dalam flash). Beberapa mikro dengan sejumlah besar flash menerapkannya sebagai dua array flash independen, dan ini biasanya memungkinkan akses penuh ke satu bank saat beroperasi di yang lain.

Anda perlu merujuk ke dokumentasi untuk bagian spesifik Anda untuk melihat batasan eksekusi saat memodifikasi konten flash.

rjp
sumber