Pemrograman PIC melalui FPGA

9

Saya ingin tahu apakah ada cara untuk memprogram PIC untuk pertama kalinya (tulis dalam Flash) melalui kartu FPGA.

PIC sudah disolder ke FPGA dan saya tidak bisa menghapusnya. Tidak ada bootloader di PIC. Jadi saya perlu memprogramnya dalam mode USART / SPI / I2C dengan bootloader sehingga dapat menerima data dari FPGA.

Saya tahu bahwa biasanya saya harus melepaskannya, menghubungkannya ke programmer perangkat keras seperti PICKit dan memprogramnya dengan perangkat lunak pada komputer seperti MPLAB, tetapi saya tidak mampu membelinya.

Saya dapat membuat bootloader dengan MPLAB, yang merupakan file .hex, tetapi bagaimana saya dapat mentransfernya ke FPGA dan kemudian ke PIC melalui pin FPGA?

PIC yang digunakan adalah Microchip PIC12F1822.

Mister
sumber
2
Hanya memeriksa: dapatkah Anda memprogram ulang FPGA (mis. Anda memiliki semua alat yang diperlukan untuk melakukan ini)?
pjc50
Ini semacam papan pengembangan?
Matt Young
Ya, saya memiliki semua alat yang diperlukan untuk memprogram ulang FPGA (itu terhubung ke komputer melalui usb standar).
Myst
1
Tidak, mereka disalahkan karena mereka tidak melakukan upaya ini. Sebenarnya, saya sedang magang dan saya menemukan itu sangat tidak profesional. Meskipun saya masih harus memperbaiki masalahnya. Saya benar-benar tidak dapat melihat cara untuk memprogram ulang PIC ini dengan cara lain selain seorang programmer eksternal yang tidak dapat saya gunakan karena paketnya sudah selesai.
Myst
2
Apakah tidak ada cara untuk menyolder beberapa kabel jumper ke jejak atau pin pada PIC agar Anda dapat memprogramnya melalui programmer eksternal? Mencoba melakukannya melalui FPGA terdengar seperti proyek tesis pascasarjana.
horta

Jawaban:

10

Tidak, Anda tidak perlu, bahkan Anda tidak bisa, menggunakan SPI, UART, atau I 2 C untuk memprogram PIC. Satu- satunya cara untuk mendapatkan program baru menjadi PIC yang tidak memiliki kode khusus yang dimuat untuk tujuan itu (sebuah bootloader) adalah dengan menggunakan antarmuka pemrograman perangkat keras eksternal. Secara elektrik, ini berarti menghubungkan ke Vss, MCLR, PGC, dan PGD. Dapat bermanfaat untuk memiliki programmer yang terhubung ke Vdd, tetapi tidak perlu untuk chip ini selama level Vdd diketahui dan programmer menyesuaikannya.

Antarmuka perangkat keras tingkat rendah cukup sederhana. PGD ​​adalah jalur data, yang diambil sampelnya oleh PIC pada ujung jatuh dari PGC (garis jam). Untuk mendapatkan PIC ke mode pemrograman di tempat pertama, kunci 32 bit khusus clock relatif terhadap tepi spesifik pada MCLR (meskipun lihat catatan di bawah ini mengenai pemrograman tegangan tinggi).

Protokol tingkat yang lebih tinggi menjadi lebih rumit. Sebagian besar hal dilakukan dengan perintah 6 bit, beberapa di antaranya diikuti oleh 14 kata data bit. Anda harus membaca spesifikasi pemrograman dengan cermat. Perhatikan bahwa spesifikasi pemrograman adalah dokumen terpisah dari lembar data. Buka halaman produk untuk PIC khusus Anda di situs web Microchip, dan Anda akan menemukan tautan ke spesifikasi pemrograman di bagian dokumen.

Ditambahkan tentang pemrograman tegangan tinggi

Jenis PIC ini memiliki dua cara untuk masuk ke mode pemrograman, tegangan tinggi (HVP) dan tegangan rendah (LVP). Metode tegangan tinggi memerlukan menaikkan MCLR antara 8 dan 9 volt dan tetap di sana selama pemrograman. Metode ini selalu berhasil, terlepas dari data yang mungkin diprogram ke dalam PIC.

Metode tegangan rendah memasuki mode pemrograman dimulai dengan mengendarai MCLR tinggi, kemudian rendah, kemudian clocking dalam urutan kunci 32 bit khusus menggunakan PGC dan PGD secara normal. Bagian akan memasuki mode pemrograman pada urutan tombol yang benar, dan akan tetap dalam mode pemrograman selama MCLR ditahan.

Metode tegangan rendah dapat dinonaktifkan oleh salah satu bit konfigurasi. Namun, keadaan terhapus dari bit konfigurasi memungkinkan pemrograman tegangan rendah, itu dikirim dari pabrik dengan cara itu, dan bit konfigurasi ini hanya dapat diatur untuk melarang LVP jika pemrograman dimasukkan dengan metode tegangan tinggi. Oleh karena itu, agar LVP tidak diaktifkan, semua yang berikut ini harus benar:

  1. PIC terakhir diprogram dengan pemrogram berkemampuan HVP, dan mode entri program HVP digunakan.

  2. File HEX yang diprogram ke dalam PIC dengan sengaja mengatur bit LVP pada kata konfigurasi 2 ke status tidak terhapus.

Karena menonaktifkan LVP cukup banyak membutuhkan tindakan yang disengaja dan programmer yang tepat, kemungkinan masih memungkinkan. Jika sengaja dinonaktifkan karena beberapa alasan aneh, maka Anda harus menyediakan 8-9 V pada MCLR untuk mendapatkan PIC ke mode pemrograman setidaknya cukup lama untuk melakukan penghapusan massal (yang mengaktifkan kembali LVP).

Olin Lathrop
sumber
3

Pemrograman PIC membutuhkan tegangan tinggi. Ya, dimungkinkan untuk mengubah PIC menjadi "LVP", atau mode Pemrograman Tegangan Rendah, tetapi Anda memerlukan pemrogram tegangan tinggi untuk melakukan ini.

Jika PIC Anda telah dimasukkan ke dalam mode LVP maka ya, Anda dapat dengan mudah memprogram PIC dari FPGA. Lembar data semua berisi bentuk gelombang pemrograman yang diperlukan untuk memprogram chip, jadi itu akan menjadi kasus membangun perangkat programmer PIC Anda sendiri di FPGA.

Namun, jika PIC belum dimasukkan ke mode LVP, Anda harus menghasilkan tegangan tinggi (biasanya 10V) dan menerapkannya ke pin MCLR pada waktu yang tepat untuk masuk ke mode pemrograman. Jika Anda belum memiliki perangkat keras semacam ini di papan Anda, maka itu akan memerlukan perangkat keras tambahan yang pada akhirnya dikontrol oleh FPGA ketika dipicu.

Sebagian besar programmer PIC menyertakan regulator penambah kecil (pengganda tegangan) untuk mengambil 5V hingga 10V yang disediakan menggunakan PIC onboard untuk mengelola pengaturan tegangan. Mereka sering menggunakan PWM dari PIC dan input ADC pada PIC sebagai regulator boost sederhana.

Anda harus melihat skema PICkit2 yang tersedia untuk umum.

Majenko
sumber
1
Tidak, sangat mungkin tidak diperlukan tegangan tinggi. Sebagian besar bagian yang lebih baru, termasuk semua seri 12F1xxx / 16F1xxx, dapat menggunakan urutan tombol untuk masuk ke mode pemrograman. Urutan ini tidak memerlukan tegangan tinggi. Ini dapat dinonaktifkan dalam konfigurasi, tetapi bagian tersebut berasal dari pabrik dengan metode kunci diaktifkan. Kecuali jika seseorang sengaja menonaktifkan entri mode program urutan tombol, itu harus tetap tersedia. Jika dinonaktifkan, maka ya, Anda harus menaikkan MCLR ke 8-9 V untuk masuk ke mode pemrograman.
Olin Lathrop
Mode pemrograman utama adalah mode LVP. Itu bergantung pada LVP = 1 pada konfigurasi. Sepertinya chip itu default ke LVP = 1, tapi IS it = 1 pada chip tertentu, atau sudah diprogram dengan LVP = 0? Siapa tahu? Seperti saya katakan - JIKA itu dalam mode LVP maka Anda tidak perlu HV, jika tidak, Anda lakukan.
Majenko
Jadi untuk memprogram dalam Mode LVP, saya perlu mengimplementasikan beberapa programmer "digital" PIC (VHDL) ke dalam FPGA saya? Saya benar-benar tidak bisa memikirkan cara untuk melakukan itu. Bisakah Anda membantu saya membangunnya?
Myst
Tidak, saya tidak bisa. Anda memiliki skema untuk pickit2 yang tersedia, sehingga Anda tahu sinyal apa yang diperlukan. Anda memiliki sumber untuk firmware pickit2 yang tersedia, sehingga Anda tahu cara berkomunikasi. Anda memiliki lembar data pemrograman yang tersedia, sehingga Anda tahu instruksi apa yang harus dikirim dan bagaimana cara mengirimnya. Bagaimana Anda mengomunikasikan firmware ke PIC dari komputer Anda sepenuhnya terserah Anda. Seberapa banyak kecerdasan yang Anda inginkan dalam FPGA Anda, dan berapa banyak di ujung PC?
Majenko
Oke terima kasih. Pertama-tama, saya akan mencoba memprogram PIC secara langsung dengan PICKIT 3. Mengenai PICKIT (yang dibeli oleh perusahaan saya untuk tujuan itu), saya takut untuk menghubungkannya langsung ke pin PIC karena ini adalah juga terhubung ke FPGA. Saya khawatir bahwa beberapa tegangan mungkin melalui FPGA dimatikan dan melakukan beberapa kerusakan. Apakah itu masalah yang bisa dibenarkan?
Myst