Salah satu proyek saya akan sangat diuntungkan karena dapat menjalankan program yang tidak disimpan dalam mikrokontroler (tetapi malah disimpan dalam kartu SD).
Jadi, saya mencari perangkat yang memungkinkan saya memuat kode dari kartu SD ke RAM dan kemudian mengeksekusi kode dari RAM. Saat ini, saya hanya memiliki programmer yang datang dengan PicKit2, jadi saya lebih suka tinggal dengan PICs.
Apakah ada yang tahu yang, jika ada, PIC dapat melakukan ini? Jika tidak ada PIC yang mampu melakukan ini, lalu apa saja pengontrol mikro yang akan bekerja untuk ini? Lebih disukai yang tersedia dalam paket kompatibel papan tempat memotong roti.
microcontroller
pic
Ponkadoodle
sumber
sumber
Jawaban:
Ada beberapa PIC yang memungkinkan Anda untuk menambahkan memori program eksternal. Saya belum pernah melakukan ini tetapi Aplikasi Catatan AN869 dan AN778 memiliki informasi lebih lanjut tentang cara menerapkan memori eksternal.
sumber
Pilihan lain untuk dipertimbangkan adalah menggunakan bahasa yang ditafsirkan untuk program Anda yang disimpan pada kartu SD. Dengan cara ini, prosesor tidak mengeksekusi kode mesin yang dibaca dari kartu, itu hanya memperlakukannya sebagai data.
Pendekatan ini memberi Anda fleksibilitas dengan biaya kecepatan.
Ada banyak pilihan untuk dipilih: Survei Penerjemah / Penyusun Bahasa Tingkat Tinggi untuk Mikrokontroler
sumber
Seperti yang telah dikatakan, PIC (selain PIC32) tidak dapat melakukan ini. Anda mungkin harus pergi ke prosesor yang lebih besar di keluarga mana saja atau ke prosesor dengan bus memori eksternal karena sebagian besar mikrokontroler memiliki sumber daya RAM yang sangat terbatas.
Prosesor MSP430 dapat menjalankan kode dari ruang RAM mereka, tetapi Anda akan membutuhkan sesuatu seperti F5438 dengan ruang RAM 16k - menjalankan kode dalam 128 byte bukanlah pilihan!
Jika sebuah prosesor memiliki bus eksternal maka Anda dapat memasukkan RAM ke dalam ruang kode. Anda mungkin harus menambahkan beberapa logika tambahan untuk memetakan RAM ke dalam dua wilayah memori jika arsitektur prosesor tidak memungkinkan data untuk ditulis ke dalam memori eksekusi.
Saya telah menjalankan kode dari RAM dalam sistem berbasis 8.051 tetapi itu berarti bahwa RAM harus dipetakan ke dalam ruang memori EKSTERNAL untuk pemrograman dan kemudian kembali ke ruang CODE untuk dieksekusi. Program pemuat / pemantau menangani pemindahan dan pemuatan bank memori. Tolong jangan minta kode - saya melakukan ini sekitar 30 tahun yang lalu dan sudah lama hilang (dan ditulis dalam PL / M-51)
sumber
Tak satu pun dari jangkauan rendah dan menengah PIC dapat dieksekusi dari RAM karena arsitektur memori mereka.
CPU berbasis ARM apa pun harus dijalankan dari RAM. Meskipun mereka cenderung berada dalam paket smd, ada beberapa modul ukuran 'DIP' yang memiliki mikrokontroler sudah dimuat. Lihat di tempat tidur atau LPCXpresso misalnya. Keduanya datang dengan bootloader atau, dalam kasus LPCXpresso, antarmuka debug bersama dengan kompiler gratis.
Jika Anda lebih suka tinggal dengan mikro 8 bit sederhana, mungkin pertimbangkan sesuatu dari HCS08 Family freescale. Ini dapat dijalankan dari RAM dan ada versi kode terbatas dari IDE codewarrior dan kompiler C yang tersedia secara gratis.
Saya cukup yakin MPS430 juga harus bisa melakukan ini, tapi saya belum pernah melakukannya sendiri.
sumber
Propeller memuat programnya dari penyimpanan eksternal.
sumber
Saya ingat pernah membaca tentang bootloader untuk AVR yang akan mem-flash chip dengan file .hex (mungkin) dari kartu SD. Saya tidak dapat menemukan sumber aslinya, tetapi pencarian Google ini menghasilkan beberapa klik menarik. Ya, saya tahu ini AVR dan bukan PIC, tetapi Anda mungkin merasa berguna jika masalah PIC tidak berhasil.
sumber
Seperti yang telah dicatat oleh poster lain, Anda tidak dapat mengeksekusi dari RAM pada 8 atau 16-bit PIC, karena mereka menggunakan arsitektur Harvard (kode terpisah dan ruang data). Apakah praktis memuat program dari kartu SD dan mem-flashnya ke memori kode tergantung pada seberapa sering Anda akan melakukan ini.
Jika Anda mencoba membuat lingkungan yang dinamis seperti OS yang terus-menerus menampilkan program, maka tidak. Tetapi dalam kasus saya, saya memiliki program yang memuat driver sesuai kebutuhan dari kartu SD 2 GB. PIC24FJ256GB110 memiliki minimum 10.000 siklus hapus / tulis. Bahkan jika ini dilakukan lima kali per hari, flash akan bertahan minimal 5 1/2 tahun.
(Catatan: angka 10.000 adalah minimum. Daya tahan siklus tulis / tulis khas mungkin lima kali lipat - jadi jika Anda melakukan pengembangan, Anda mungkin dapat mem-flash prosesor 140 kali sehari - setiap 3 1/2 menit selama delapan jam - dan itu mungkin masih berlangsung setahun.)
sumber
Di sekolah saya, kami menggunakan prosesor HC11 atau HC12 dengan RAM eksternal untuk memuat dan menjalankan program di ... tapi saya lupa nama board / kit :( Dalam hal apa pun, Freescale HC (S) -garis MCU alamat RAM dan ROM identik , sehingga Anda dapat memuat kode ke dalam RAM dan menjalankannya.
Mengambil antrian dari
blalor
, solusi terbaik mungkin hanya dengan menambahkan tombol di papan Anda yang dapat reflash PIC dari data yang disimpan pada kartu SD yang Anda masukkan dengan bootloader. Saya tidak bisa membayangkan kode apa yang tidak cocok dengan PIC yang lebih besar; jika Anda memiliki beberapa data statis (grafik, teks, suara), simpan itu di penyimpanan eksternal.sumber
Anda mungkin tidak dapat mengalokasikan dari RAM, tetapi untuk aplikasi Anda, Anda mungkin dapat memiliki loader kecil di flash yang kemudian dapat membaca data kartu SD ke sisa flash. Saya telah menggunakan pendekatan ini dengan chip flash yang dikendalikan SPI untuk memungkinkan firmware dimuat dari tautan nirkabel dan kemudian diinstal setelah diterima sepenuhnya; Saya tidak dapat memikirkan alasan tertentu mengapa itu tidak akan bekerja dengan kartu SD, meskipun bootloader yang kompatibel dengan SD mungkin membutuhkan ruang.
sumber
Cukup banyak mikrokontroler akan membiarkan Anda melakukan ini, sepertinya bukan pic. apa yang ingin Anda lakukan adalah memiliki bootloader yang menggunakan spi untuk membaca dari kartu sd, menyalin program, yang mungkin ingin menjadi nama file yang dikenal atau hardcoded, mungkin di direktori root, parsing file itu ke ram lalu cabang ke program dalam ram. Pengontrol berbasis ARM pasti akan membiarkan Anda melakukan sesuatu seperti ini.
Alternatifnya adalah membuat bootloader membaca kartu sd lebih dari spi dan bukannya menyalin ke ram dan membakar cabang ke sebagian dari flash. Mungkin ingin memiliki tombol jika tombol ditekan pada power up atau reset kemudian memuat program baru dari kartu sd, sebaliknya jika tanda tangan atau checksum terlihat bagus pada bagian flash yang dapat dimuat kemudian pada cabang boot ke bagian flash tersebut. Atau mungkin jika kartu sd ada maka muat dari itu jika tidak cabang ke bagian flash yang dapat dimuat. Dapat menggunakan metode ini dengan berbasis lengan dan berbasis avr, bahkan mungkin berbasis pic tapi pengalaman pic saya sudah usang. msp430 saya akan menganggap juga. Pada dasarnya jika Anda dapat memprogram ulang bagian flash yang Anda jalankan, dari prosesor mikrokontroler itu sendiri,
sumber