Apakah mungkin membuat antarmuka JTAG dengan arduino?


14

Jika demikian, dapatkah seseorang mengarahkan saya ke situs yang memberi tahu cara melakukan ini? Saya percaya saya mungkin telah menemukan cara , tetapi saya tidak yakin apakah itu akan berhasil atau belum (perlu menemukan sesuatu untuk mengujinya).

Pertanyaan ini terkait dengan pertanyaan saya sebelumnya yang berlokasi di sini.

Jika diperlukan informasi latar belakang lebih lanjut.


JBailey Saya baru saja menemukan Pertanyaan Anda tentang menggunakan Arduino untuk membuat konverter JTAG-USB dan saya bertanya-tanya bagaimana Anda bisa tahu? \

Jawaban:


14

Ya, dimungkinkan untuk mengubah Arduino menjadi adaptor ARM JTAG.

Ada tiga masalah, tegangan, kecepatan dan driver.

Arduino asli berjalan pada 5V. Kebanyakan mikrokontroler ARM tidak toleran 5V pada pin JTAG mereka dan membutuhkan 3.3V. Solusi termudah adalah menjalankan Arduino Anda di 3.3V, gagal Anda membutuhkan semacam konversi level (lihat konversi I2C 3.3 hingga 5.0 V untuk ide-ide).

Arduino terhubung ke PC melalui tautan serial. Saya ragu itu bisa berjalan lebih cepat dari 115200bps, yang akan membuat kegiatan interaktif seperti melangkah melalui kode dalam debugger sangat lambat. Namun, Anda dapat mengunggah kode dan perangkat reflash.

JTAG adalah protokol tingkat tinggi, khusus untuk setiap keluarga prosesor, yang menggunakan antarmuka seperti SPI untuk bertukar data. Sebagian besar dongle JTAG hanya menyediakan antarmuka SPI melalui USB, lalu menyerahkan sisanya ke aplikasi PC. OpenOCD dan URJTag adalah pilihan populer. Anda akan memerlukan driver di salah satunya untuk protokol Arduino JTAG Anda.

Bajak Laut Bus sangat mirip dengan Arduino (mikrokontroler kecepatan rendah + chip FTDI). Ini mendukung JTAG dengan OpenOCD, jadi tentu saja mungkin.

Jika Anda menggunakan papan USB / Opendous atau AVR-USB lainnya, Anda dapat menggunakan eStick-JTAG .

Tapi, untuk kehilangan biaya JTAG, saya akan merekomendasikan salah satu dongle berbasis FTDI2232. Mereka murah dan didukung oleh OpenOCD.


5

Itu mungkin tetapi sangat sulit. Saya tidak suka JTAG berbasis FTDI, karena chip FTDI sudah siap dibuat kotak hitam dan orang tidak benar-benar belajar dengan menggunakannya.

Jika saya ingin membangun USB-JTAG dengan AVR, saya akan mendapatkannya dengan setidaknya dukungan usb kecepatan penuh dalam chip. Kemudian dapatkan tumpukan usb AVR (kode sumber c) dan lihat contoh serial usb-to. Karena bitbanging over usb adalah ide yang buruk (latensi tinggi), itu perlu dikonversi ke perintah tingkat yang lebih tinggi yang akan menginstruksikan MCU untuk melakukan bitbanging itu sendiri (atau menggunakan SPI jika mungkin) & mengembalikan hasil tingkat tinggi melalui usb (menyelesaikan byte ). Tetapi kemudian muncul kebutuhan untuk menulis driver untuk IDE untuk mendukung perangkat JTAG baru untuk debug di atasnya. OpenOCD dan URJTag memiliki kode sumber driver untuk banyak perangkat jtag, jadi Anda harus mendapatkan dan mengerjakan ulang satu untuk perangkat Anda yang baru diciptakan. Lihat bagaimana beberapa orang melakukan pekerjaan yang serupa: http://code.google.com/p/estick-jtag/


1

Lihatlah openocd. Backend sebagian besar didasarkan pada pendekatan port bit bang paralel, saya pikir itu sejauh mengubah hanya satu bit pada suatu waktu. Cukup sederhana untuk mengambil apa yang saya pikir mereka sebut backend dummy yang merupakan contoh. Kirim perintah tulis bit apa pun ke Arduino, dan atur atau hapus bit itu. Ketika diminta untuk membaca bit input kemudian mengirim perintah ke Arduino untuk melakukan tugas itu dan mengembalikan hasilnya.

Saya telah melakukan hal ini dengan sukses, tetapi tidak dengan arduino, saya melakukan pembicaraan openocd dari host ke inti lengan simulasi yang berjalan dalam simulator hdl.

Perhatikan bahwa beberapa spesifikasi jtag ditutup, korteks-m3 misalnya adalah semacam pengurangan jumlah pin jtag yang terakhir kali saya lihat tidak tersedia tanpa NDA. itu mungkin tidak masalah karena openocd mengurus semua itu untuk Anda selama Anda menggunakan antarmuka jtag yang didukung openocd, bit menggedor bagian belakang adalah tempat arduino Anda dan antarmuka apa pun yang Anda gunakan untuk / dari sana masuk untuk bermain .

Seperti yang sudah dicatat oleh Joby, Anda harus berhati-hati dengan voltase (tidak semua rasa Arduino 5V dan tidak semua pengontrol arm 3,3 volt) dan pengkondisian sinyal dan pentanahan dan semua hal itu. Jika papan target Anda ditenagai oleh pasokan yang berada pada tingkat yang berbeda dibandingkan dengan apa yang Anda berikan daya arduino dengan Anda, Anda dapat mencairkan sesuatu saat Anda menghubungkan keduanya.


Perhatikan bahwa menggunakan antarmuka serial (atau lebih buruk, USB dengan paket transportnya) ke pro-bit-banging bisa sangat lambat. Jauh lebih efisien untuk membuat mikrokontroler melakukan operasi lengkap dan berkomunikasi dengannya pada level yang lebih tinggi, yaitu, suruh ia membaca register ini, menulis yang itu, atau bahkan memprogram blok data ini.
Chris Stratton

1

Itu mungkin, dan saya benar-benar mengimplementasikannya dan menjelaskan semuanya di sini .

Ada perpustakaan di github di sini yang terdiri dari dua bagian: program yang berjalan pada arduino dan skrip python yang mengirimkan file XSVF ke arduino.

Anda kemungkinan besar memerlukan beberapa resistor untuk mengkonversi 5 V menjadi 3,3 V, karena kebanyakan FPGA dan CPLD menggunakan level tegangan ini.

Saya juga melakukan beberapa pengalaman menulis assembler / disassembler untuk file XSVF, kodenya di perpustakaan github yang sama dan dijelaskan dalam posting ini di sini .

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.