Apa itu JTAG?

30

Saya cukup baru untuk sistem embedded, dan saya terus melihat istilah ini digunakan sepanjang waktu, tetapi saya tidak begitu mengerti apa itu. Pencarian cepat online menghasilkan halaman Wikipedia ini: https://en.wikipedia.org/wiki/Joint_Test_Action_Group yang menggambarkannya sebagai semacam protokol untuk debugging. Tetapi dalam konteks lain itu digunakan seperti itu dapat memprogram memori chip seperti seorang programmer. Apa itu?

UnTraDe
sumber
4
Ada beberapa permata berguna yang tersembunyi di pertanyaan ini .
David
2
Saya memberi dwelch +1. Selain itu, JTAG kadang-kadang salah digunakan sebagai kata kerja yang berarti, secara umum, "men-debug / menguji" suatu hal. Seseorang "JTAG'ing something" mungkin sebenarnya menggunakan protokol yang berbeda yang produsen tumpang tindih dengan pin JTAG fisik (yaitu SWD). Anda dapat SWD, atau JTAG, tetapi tidak keduanya. Tidak ada yang SWD ("swoods"?) Perangkat mereka, meskipun.
Jon
Ya, Anda dapat memprogram dengan JTAG
Snoop

Jawaban:

21

Ini seperti USB, SPI, I2C, dan "bus" lainnya, dan ia memiliki sejumlah kegunaan populer, tidak terbatas pada:

  • Satu khususnya dalam pengujian silikon sebelum terlalu banyak diinvestasikan di setiap bagian, misalnya saat chip masih di wafer Anda dapat memeriksa sebagian besar bagian. Dicelupkan wafer dapat merusak sehingga Anda ingin menguji lagi tapi mungkin Anda melakukannya sebelum berkemas, mungkin setelah.

  • Anda dapat menggunakannya untuk melakukan pemindaian batas pada papan. Anda dapat menggunakan papan pada jalur produksi (asalkan papan harus dirancang dengan benar dan sebagian dari chip harus mendukung ini) tetapi Anda dapat melakukan tes konektivitas kecepatan rendah, merangsang pin pada satu ujung jejak dan memindai lainnya bagian untuk melihat apakah mereka terhubung atau tidak sesuai desain papan.

  • Karena chip sudah memiliki pin khusus ini, mengapa tidak, untuk prosesor, gunakan antarmuka yang sama sebagai cara untuk berbicara dengan debugger chip (OCD), desain sesuatu ke dalam prosesor dan biarkan itu untuk diajak bicara melalui jtag.

Ini adalah cara umum untuk memungkinkan Anda mengisolasi hal-hal pada rantai yang Anda inginkan untuk mengirim serangkaian bit atau mendapatkan serangkaian bit, sehingga setiap hal yang ingin Anda ajak bicara dapat dirancang untuk berbagai nomor bit dari sejumlah kecil ke sejumlah besar. Untuk debugger, Anda secara alami akan menulis atau membaca dari hal berukuran register di chip Anda - mungkin register 16 bit atau 32 bit. Tetapi untuk pengujian silikon atau papan rantai pemindaian Anda mungkin puluhan bit. Setiap hal yang Anda tangani dapat bervariasi ukurannya, jika Anda mau, dari hal lain, menjadikannya bus yang sangat fleksibel dengan jumlah pin yang relatif kecil yang menarik untuk jenis kasing ini.

Mungkin karena popularitas untuk debugging perangkat lunak mereka sekarang memiliki beberapa solusi dua pin untuk menghemat jumlah pin untuk mikrokontroler dan mungkin orang lain akan mengadopsi itu, mungkin tidak.

old_timer
sumber
Apakah ada aspek teknis JTAG yang mendukungnya, atau hanya karena alasan historis?
Owen
Bacalah artikel wikipedia dengan baik. Pendapat saya adalah karena sudah ada di sana dan disambungkan ke papan dan keripik, dan karena cukup fleksibel untuk mendukung penggunaan lain, dan setidaknya beberapa sudah memiliki alat di tempat, seseorang pasti mengatakan mengapa tidak menggunakannya untuk hal-hal lain ini. Saya pikir fleksibilitas vs jumlah pin membuatnya sangat menarik. Ada dan terus menjadi solusi lain untuk debugger atau dalam pemrograman sirkuit tetapi berkat instruksi MPSSE FTDI dan keberhasilan FTDI secara umum dengan semua USB, alat jtag murah sekarang tersedia secara luas.
old_timer
10

JTAG awalnya merupakan antarmuka yang digunakan untuk menguji PCB setelah perakitan. Garis IO pada chip dapat dikontrol dan dibaca melalui port JTAG yang memungkinkan urutan pengujian papan dilakukan. Kemudian itu juga mulai digunakan sebagai antarmuka pemrograman dan debug. Fungsionalitas apa yang tersedia di JTAG tergantung pada IC tertentu yang Anda hadapi.

Salah satu keunggulan JTAG dibandingkan kebanyakan antarmuka pemrograman lainnya adalah perangkat dapat dirangkai secara daisy. Jadi satu port JTAG dapat berfungsi untuk memprogram / debug / menguji beberapa perangkat (meskipun saya akan menyarankan merancang sistem Anda sehingga berbagai merek chip dapat dibagi ke rantai yang berbeda, sedangkan protokol JTAG tingkat rendah cukup standar, sayangnya alat yang Anda butuhkan untuk memprogram / men-debug chip tidak).

Peter Green
sumber
9

JTAG agak istilah yang aneh. Untuk memulai, istilah ini dapat menentukan konektor dan protokol tertentu, terdiri dari sinyal clock (TCK), mode-pilih (TMS), dan data masuk / keluar (TDI / TDO). Ini terdiri dari jaringan perangkat, di mana TDO masing-masing perangkat terhubung ke TDI perangkat berikutnya dalam rantai pemindaian yang disebut. TMS digunakan untuk menempatkan semua perangkat secara bersamaan ke berbagai mode .

Perangkat pada rantai pemindaian biasanya terhubung sebagai satu register shift besar yang terdiri dari register di setiap perangkat individu. Ketika perangkat berada dalam keadaan SHIFT_IR atau SHIFT_DR, mereka terhubung ke rantai pindai salah satu dari dua register sementara: Sebuah register instruksi, dan sebuah register data.

Setelah nilai dialihkan, mode UPDATE_IR atau UPDATE_DR dapat diaktifkan dengan mengatur TMS dengan tepat saat mengaktifkan TCK. Pada titik ini, nilai yang dialihkan ke register "mulai berlaku". Misalnya, memindahkan berbagai urutan ke IR dari FPGA dan beralih ke UPDATE_IR akan menyebabkan FPGA memasuki berbagai mode seperti konfigurasi, readback, runtime normal, atau mengakses register pengguna tertentu dan primitif khusus JTAG yang dipakai dalam desain.

Demikian juga, capture state dapat digunakan untuk "membaca" nilai dari perangkat dan memasukkannya ke IR atau DR, untuk dipindahkan melalui TDO dan akhirnya dibaca oleh programmer JTAG.

ζ--
sumber
4

JTAG mendefinisikan protokol serial, dan beberapa perintah, untuk memungkinkan akses ke register internal di dalam IC yang kompleks. Ini memungkinkan penguji untuk mendapatkan kemampuan pengamatan dan pengontrolan dalam cara standar menggunakan beberapa pin.

Penggunaan asli adalah untuk 'pemindaian batas', di mana semua pin I / O dapat dibaca dan didorong oleh register geser besar yang melingkari chip. Namun, itu cepat ditambah untuk menambah register shift lebih lanjut untuk mengakses internal chip, termasuk ingatan.

Anda jarang bit-bang JTAG, akses biasanya melalui perpustakaan, alias driver, disediakan oleh produsen IC, dan digunakan oleh sistem uji dan adaptor akses tes.

Neil_UK
sumber
Jadi chip sebenarnya perlu mendukung JTAG baik oleh perangkat keras dan perangkat lunak?
UnTraDe
@UnTraDe Tidak, chip mendukung JTAG dalam perangkat keras dan mungkin dalam perangkat lunak (misalnya FPGA dapat mengekspos beberapa antarmuka antara JTAG dan desain pengguna), tetapi tidak diharuskan memiliki dukungan perangkat lunak pada chip. Alat-alat yang akan digunakan seseorang untuk berinteraksi dengan perangkat melalui JTAG akan memiliki perangkat lunak dan dukungan perangkat keras (perangkat lunak pada komputer, dan perangkat keras dalam hal programmer JTAG yang terpasang pada komputer itu)
27--
3

Ada apa artinya 'JTAG' dan ada apa JTAG 'adalah'. Seperti orang lain telah menunjukkan JTAG 'adalah' standar antarmuka bus industri untuk manufaktur pengujian, seperti di J sendi T est A ksi G roup.

Apa artinya JTAG bagi pengembang perangkat lunak tertanam adalah antarmuka debug pada SoC / mikroprosesor untuk debug eksternal perangkat lunak tertanam yang dijalankan pada chip. Hampir setiap CPU / SoC di pasaran menggunakan antarmuka JTAG tidak hanya untuk pengujian pembuatan, tetapi untuk dukungan debug perangkat lunak. Anda akan menemukan antarmuka JTAG di segala hal mulai dari server kelas x86 CPU hingga router WiFi rumahan di bawah $ 50. Dengan perangkat keras antarmuka yang tepat, dan perangkat lunak yang tepat, antarmuka ini akan memberi Anda kemampuan untuk membaca / menulis memori, mengatur breakpoint, dan kode satu langkah.

Kuncinya tentu saja adalah mendapatkan perangkat keras dan perangkat lunak yang tepat. Meskipun antarmuka JTAG standar adalah standar, fasilitas debug perangkat lunak tertentu yang tersedia di perangkat mungkin tidak. JTAG seperti TCP / IP. Itu ada di tengah tumpukan aplikasi. Anda memerlukan lapisan fisik yang tepat untuk berkomunikasi dengan peralatan (yaitu, apa maksud Anda hal ini menggunakan 10-Base-2?!?!?), Dan Anda memerlukan perangkat lunak aplikasi yang tepat di atasnya (apa maksud Anda, saya memerlukan seorang Gopher klien?!?!?!). Namun kekuatan ekosistem ARM telah menyebabkan beberapa tingkat standardisasi di sana (lihat OpenOCD).

Anda juga bertanya tentang menggunakan JTAG untuk memprogram flash. Ya, beberapa perangkat lunak menggunakannya untuk tujuan itu juga. SoC dapat menyediakan fasilitas JTAG untuk membaca / menulis dari ruang alamat memori CPU, ia dapat memberikan akses langsung ke pengontrol flash, dan setidaknya JTAG menyediakan akses mentah tingkat rendah ke pin I / O di tepi chip (ini adalah tujuan asli JTAG, untuk memungkinkan pengujian kontinuitas chip ke chip interkoneksi selama pengujian manufaktur, yaitu 'pemindaian batas JTAG'). Salah satu dari fasilitas ini dapat digunakan oleh programmer yang pintar untuk menggerakkan sinyal yang diperlukan untuk memprogram ulang chip flash jika perangkat secara tidak sengaja 'diblok'.

Kesukuan
sumber