Header ISP AVR pin-6 dan pin-10
**Pemrograman dalam sistem** (In-system programming disingkat ISP), sering kali disebut pemrograman serial dalam sirkuit (ICSP), adalah kemampuan beberapa perangkat logika yang dapat diprogram, mikrokontroler, dan perangkat tertanam lainnya untuk diprogram saat dipasang dalam sistem yang lengkap, daripada memerlukan chip diprogram sebelum menginstalnya ke dalam sistem. Ini juga memungkinkan pembaruan firmware dikirimkan ke memori on-chip mikrokontroler dan prosesor terkait tanpa memerlukan sirkuit pemrograman khusus pada papan sirkuit, dan menyederhanakan pekerjaan desain.

Tidak ada standar untuk protokol pemrograman dalam sistem untuk pemrograman perangkat mikrokontroler. Hampir semua produsen mikrokontroler mendukung fitur ini, tetapi semua telah menerapkan protokol mereka sendiri, yang seringkali berbeda bahkan untuk perangkat yang berbeda dari pabrikan yang sama. Secara umum, protokol modern mencoba menjaga jumlah pin yang digunakan tetap rendah, biasanya hingga 2 pin. Beberapa antarmuka ISP berhasil mencapai hal yang sama hanya dengan satu pin, yang lain menggunakan hingga 4 untuk mengimplementasikan antarmuka JTAG.

Keuntungan utama dari pemrograman dalam sistem adalah memungkinkan produsen perangkat elektronik untuk mengintegrasikan pemrograman dan pengujian ke dalam satu fase produksi, dan menghemat uang, daripada memerlukan tahap pemrograman terpisah sebelum merakit sistem. Hal ini memungkinkan produsen untuk memprogram chip di jalur produksi sistem mereka sendiri alih-alih membeli chip yang telah diprogram sebelumnya dari produsen atau distributor, sehingga memungkinkan untuk menerapkan perubahan kode atau desain di tengah proses produksi. Keuntungan lainnya adalah produksi selalu dapat menggunakan firmware terbaru, dan fitur baru serta perbaikan bug dapat diimplementasikan dan dimasukkan ke dalam produksi tanpa penundaan yang terjadi saat menggunakan mikrokontroler yang telah diprogram sebelumnya.

Mikrokontroler biasanya disolder langsung ke papan sirkuit tercetak dan biasanya tidak memiliki sirkuit atau ruang untuk kabel pemrograman eksternal yang besar ke komputer lain.

Biasanya, chip yang mendukung ISP memiliki sirkuit internal untuk menghasilkan tegangan pemrograman yang diperlukan dari tegangan suplai normal sistem, dan berkomunikasi dengan pemrogram melalui protokol serial. Sebagian besar perangkat logika yang dapat diprogram menggunakan varian protokol JTAG untuk ISP, untuk memfasilitasi integrasi yang lebih mudah dengan prosedur pengujian otomatis. Perangkat lain biasanya menggunakan protokol atau protokol berpemilik yang ditentukan oleh standar yang lebih lama. Dalam sistem yang cukup kompleks untuk memerlukan logika lem yang cukup besar, perancang dapat menerapkan subsistem pemrograman yang dikendalikan JTAG untuk perangkat non-JTAG seperti memori flash dan mikrokontroler, yang memungkinkan seluruh pemrograman dan prosedur pengujian diselesaikan di bawah kendali satu protokol.

Sejarah
-------

Mulai dari awal 1990-an evolusi teknologi penting dalam arsitektur mikrokontroler disaksikan. Pada awalnya, mereka diwujudkan dalam dua kemungkinan solusi: dengan OTP (satu kali diprogram) atau dengan memori EPROM. Dalam teknologi ini, proses penghapusan memori mengharuskan chip terkena sinar ultraviolet melalui jendela tertentu di atas paket. Pada tahun 1993 Teknologi Microchip memperkenalkan mikrokontroler pertama dengan memori EEPROM : PIC16C84. Memori EEPROM dapat dihapus secara elektrik. Fitur ini memungkinkan untuk menurunkan biaya realisasi dengan menghapus jendela penghapus di atas paket dan memulai teknologi pemrograman dalam sistem. Dengan ISP proses flashing dapat dilakukan langsung pada board pada akhir proses produksi. Evolusi ini memberikan kemungkinan untuk menyatukan pemrograman dan fase uji fungsional dan di lingkungan produksi dan untuk memulai produksi awal papan bahkan jika pengembangan firmware belum selesai. Dengan cara ini dimungkinkan untuk memperbaiki bug atau membuat perubahan di lain waktu. Pada tahun yang sama, Atmel mengembangkan mikrokontroler pertama dengan memori flash, lebih mudah dan lebih cepat untuk diprogram dan dengan siklus hidup yang lebih lama dibandingkan dengan memori EEPROM.

Mikrokontroler yang mendukung ISP biasanya dilengkapi dengan pin yang digunakan oleh perangkat komunikasi serial untuk antarmuka dengan programmer, memori flash/EEPROM dan sirkuit yang digunakan untuk memasok tegangan yang diperlukan untuk memprogram mikrokontroler. Perangkat komunikasi pada gilirannya terhubung ke perangkat pemrograman yang menyediakan perintah untuk beroperasi pada flash atau memori EEPROM.

Saat merancang papan elektronik untuk pemrograman ISP, perlu mempertimbangkan beberapa pedoman untuk memiliki fase pemrograman yang dapat diandalkan. Beberapa mikrokontroler dengan jumlah pin yang sedikit berbagi jalur pemrograman dengan jalur I/O. Ini bisa menjadi masalah jika tindakan pencegahan yang diperlukan tidak diperhitungkan dalam desain papan; perangkat dapat mengalami kerusakan komponen I/O selama pemrograman. Selain itu, penting untuk menghubungkan saluran ISP ke sirkuit impedansi tinggi baik untuk menghindari kerusakan komponen oleh programmer dan karena mikrokontroler sering tidak dapat memasok arus yang cukup untuk mengarahkan saluran. Banyak mikrokontroler membutuhkan jalur RESET khusus untuk masuk ke Mode Pemrograman. Penting untuk memperhatikan arus yang dipasok untuk penggerak jalur dan untuk memeriksa keberadaan pengawas yang terhubung ke jalur RESET yang dapat menghasilkan reset yang tidak diinginkan dan, dengan demikian, menyebabkan kegagalan pemrograman. Selain itu, beberapa mikrokontroler memerlukan tegangan yang lebih tinggi untuk masuk ke Mode Pemrograman dan, oleh karena itu, perlu untuk memeriksa bahwa nilai ini tidak dilemahkan dan tegangan ini tidak diteruskan ke komponen lain di papan.

Aplikasi industri
-----------------

Proses Pemrograman Dalam Sistem berlangsung selama tahap akhir produksi produk dan dapat dilakukan dengan dua cara berbeda berdasarkan volume produksi.

Pada metode pertama, konektor dihubungkan secara manual ke programmer. Solusi ini mengharapkan partisipasi manusia dalam proses pemrograman yang harus menghubungkan programmer ke papan elektronik dengan kabel. Oleh karena itu, solusi ini dimaksudkan untuk volume produksi yang rendah.

Metode kedua menggunakan titik uji di papan tulis. Ini adalah area khusus yang ditempatkan di papan cetak, atau PCB, yang terhubung secara elektrik ke beberapa komponen elektronik di papan tulis. Titik uji digunakan untuk melakukan tes fungsional untuk komponen yang dipasang di papan dan, karena terhubung langsung ke beberapa pin mikrokontroler, titik tersebut sangat efektif untuk ISP. Untuk volume produksi menengah dan tinggi menggunakan titik uji adalah solusi terbaik karena memungkinkan untuk mengintegrasikan fase pemrograman dalam jalur perakitan.

Di jalur produksi, papan ditempatkan di atas alas paku yang disebut perlengkapan uji. Yang terakhir ini terintegrasi, berdasarkan volume produksi, dalam sistem pengujian semi-otomatis atau otomatis yang disebut ATE – Alat Uji Otomatis. Perlengkapan dirancang khusus untuk setiap papan - atau paling banyak untuk beberapa model yang mirip dengan papan yang dirancang untuk itu - oleh karena itu ini dapat dipertukarkan dalam lingkungan sistem tempat mereka terintegrasi. Sistem pengujian, setelah papan dan perlengkapan ditempatkan pada posisinya, memiliki mekanisme untuk menghubungkan jarum perlengkapan dengan Titik Uji di papan untuk diuji. Sistem yang terhubung dengannya, atau telah terintegrasi langsung di dalamnya, seorang programmer ISP. Yang ini harus memprogram perangkat atau perangkat yang dipasang di papan: misalnya, mikrokontroler dan/atau memori serial.

ICSP mikrochip
--------------

Untuk kebanyakan mikrokontroler Microchip, pemrograman ICSP dilakukan menggunakan dua pin, clock (PGC) dan data (PGD), sedangkan tegangan tinggi (12 V) ada pada pin Vpp/MCLR. Pemrograman tegangan rendah (5 V atau 3.3 V) mengeluarkan tegangan tinggi, tetapi hanya menggunakan pin I/O. Namun, untuk mikrokontroler yang lebih baru, khususnya keluarga mikrokontroler PIC18F6XJXX/8XJXX, masuk ke mode ICSP sedikit berbeda. Memasuki mode Program/Verifikasi ICSP memerlukan tiga langkah berikut:

* Tegangan diterapkan secara singkat ke pin MCLR (master clear).
* Urutan kunci 32-bit disajikan pada PGD.
* Tegangan diterapkan kembali ke MCLR.

Pemrogram ICSP PICkit Microchip
Perangkat keras terpisah, yang disebut programmer, diperlukan untuk terhubung ke port I/O PC di satu sisi dan ke PIC di sisi lain. Daftar fitur untuk setiap jenis pemrograman utama adalah:

* **Port paralel** - kabel besar yang besar, kebanyakan komputer hanya memiliki satu port dan mungkin tidak nyaman untuk menukar kabel pemrograman dengan printer yang terpasang. Sebagian besar laptop yang lebih baru dari 2010 tidak mendukung port ini. Pemrograman port paralel sangat cepat.
* **Port serial (port** COM) - Pada suatu waktu metode yang paling populer. Port serial biasanya kekurangan tegangan suplai pemrograman sirkuit yang memadai. Sebagian besar komputer dan laptop yang lebih baru dari 2010 tidak memiliki dukungan untuk port ini.
* **Soket** (di dalam atau di luar sirkuit) - CPU harus dilepas dari papan sirkuit, atau klem harus dipasang pada akses pembuatan chip yang bermasalah.
* **Kabel USB** - Kecil dan ringan, memiliki dukungan untuk sumber tegangan dan sebagian besar komputer memiliki port tambahan yang tersedia. Jarak antara sirkuit yang akan diprogram dan komputer dibatasi oleh panjang kabel USB - biasanya harus kurang dari 180 cm. Ini dapat membuat perangkat pemrograman jauh di dalam mesin atau lemari menjadi masalah.

Pemrogram ICSP memiliki banyak keunggulan, dengan ukuran, ketersediaan port komputer, dan sumber daya menjadi fitur utama. Karena variasi dalam skema interkoneksi dan sirkuit target yang mengelilingi mikrokontroler, tidak ada programmer yang bekerja dengan ***semua*** sirkuit target atau interkoneksi yang mungkin. Microchip menyediakan panduan pemrograman ICSP yang terperinci  Banyak situs menyediakan contoh pemrograman dan rangkaian.

PIC diprogram menggunakan lima sinyal (pin keenam 'aux' disediakan tetapi tidak digunakan). Data ditransfer menggunakan skema serial sinkron dua kawat, tiga kabel lagi menyediakan pemrograman dan daya chip. Sinyal clock selalu dikontrol oleh programmer.

Komunikasi pemrograman biasa
### Sinyal dan pinout

Koneksi chip biasa
* **V pp** - Tegangan mode pemrograman. Ini harus dihubungkan ke pin MCLR, atau pin V pp dari port ICSP opsional yang tersedia pada beberapa PIC dengan jumlah pin besar. Untuk menempatkan PIC ke mode pemrograman, baris ini harus dalam kisaran tertentu yang bervariasi dari PIC ke PIC. Untuk 5 V PIC, ini selalu beberapa jumlah di atas V dd, dan dapat setinggi 13,5 V. PIC 3,3 V saja seperti seri 18FJ, 24H, dan 33F menggunakan tanda tangan khusus untuk masuk ke mode pemrograman dan V pp adalah sinyal digital yang baik di tanah atau Vdd. Tidak ada satu tegangan V pp yang berada dalam kisaran V pp yang valid dari semua PIC. Faktanya, level minimum V pp yang diperlukan untuk beberapa PIC dapat merusak PIC lainnya.
* **V dd** - Ini adalah input daya positif ke PIC. Beberapa programmer memerlukan ini untuk disediakan oleh sirkuit (sirkuit harus setidaknya sebagian dinyalakan), beberapa programmer berharap untuk menggerakkan jalur ini sendiri dan mengharuskan sirkuit dimatikan, sementara yang lain dapat dikonfigurasi dengan cara apa pun (seperti Microchip ICD2). Pemrogram Embed Inc berharap untuk menggerakkan jalur V dd sendiri dan mengharuskan rangkaian target dimatikan selama pemrograman.
* **V ss** - Input daya negatif ke PIC dan referensi nol volt untuk sinyal yang tersisa. Tegangan sinyal lain secara implisit sehubungan dengan V ss .
* **ICSPCLK** - Garis jam antarmuka data serial. Baris ini berayun dari GND ke V dd dan selalu digerakkan oleh programmer. Data ditransfer di tepi jatuh.
* **ICSPDAT** - Jalur data serial. Antarmuka serial adalah dua arah, sehingga jalur ini dapat digerakkan oleh programmer atau PIC tergantung pada operasi saat ini. Dalam kedua kasus, garis ini berayun dari GND ke Vdd. Sedikit ditransfer di tepi jatuh PGC.
* **AUX/PGM** - Pengontrol PIC yang lebih baru menggunakan pin ini untuk mengaktifkan pemrograman tegangan rendah (LVP). Dengan menahan PGM tinggi, mikrokontroler akan masuk ke mode LVP. Pengontrol mikro PIC dikirimkan dengan LVP diaktifkan - jadi jika Anda menggunakan chip baru, Anda dapat menggunakannya dalam mode LVP. Satu-satunya cara untuk mengubah mode adalah dengan menggunakan programmer tegangan tinggi. Jika Anda memprogram pengontrol mikro tanpa koneksi ke pin ini, mode tidak akan berubah.

### Pinout RJ11

Standar industri untuk menggunakan soket RJ11 dengan programmer ICSP didukung oleh Microchip. Ilustrasi tersebut mewakili informasi yang diberikan dalam lembar data mereka. Namun, ada ruang untuk kebingungan. Lembar data PIC menunjukkan soket terbalik dan tidak memberikan tampilan gambar pinout sehingga tidak jelas di sisi mana soket Pin 1 berada. Ilustrasi yang disediakan di sini **belum diuji** tetapi menggunakan pinout standar industri telepon (steker/soket RJ11 awalnya dikembangkan untuk telepon desktop berkabel).

Pemrogram PIC RJ11 ke ICSP

Lihat pula
----------

* Pemrogram Perangkat

1. ↑  "In Circuit Programmer : In Circuit Programming (ICP) / In System Programming / Serial Programming". *xeltek.com*. Diarsipkan dari versi asli tanggal 2022-06-26. Diakses tanggal 29 Oktober 2022.
2. ↑  "Flash Microcontroller Programming Specification" (PDF). *microchip.com*. Diakses tanggal 29 Oktober 2022.
3. ↑  ww1.microchip.com/downloads/en/devicedoc/30277d.pdf ICSP programming guide, Microchip