Bir arduino ile JTAG arayüzü yapmak mümkün mü?


14

Eğer öyleyse, beni bunun nasıl yapılacağını söyleyen bir siteye yönlendirebilir misiniz? Bir yol bulmuş olabileceğime inanıyorum , ancak henüz işe yarayıp yaramayacağından emin değilim (test etmek için bir şey bulmam gerekiyor).

Bu soru, burada bulunan bir önceki soru ile ilgilidir .

Daha fazla arka plan bilgisine ihtiyaç duyulması durumunda.


JBailey Az önce bir JTAG-USB dönüştürücü yapmak için arduino kullanma ile ilgili sorunuza rastladım ve nasıl çıkardığınızı merak ediyordum? \

Yanıtlar:


14

Evet, bir Arduino'yu ARM JTAG adaptörüne dönüştürmek mümkündür.

Üç sorun vardır: voltaj, hız ve sürücüler.

Arduino yerel olarak 5V'de çalışır. Çoğu ARM mikro denetleyicisi, JTAG pinlerinde 5V toleranslı değildir ve 3.3V gerektirir. En kolay çözüm Arduino'nuzu 3.3V'de çalıştırmaktır, bir tür seviye dönüşümüne ihtiyacınız olmayacaktır ( fikirler için I2C 3.3 ila 5.0 V dönüşüme bakınız ).

Arduino, bir seri bağlantı yoluyla bir PC'ye bağlanır. Mümkün olduğunca bir hata ayıklayıcıda kod adım atmak gibi interaktif faaliyetleri çok yavaş hale 115200bps daha hızlı gidebilir şüpheliyim. Ancak, kod yükleyebilir ve cihazları yeniden yükleyebilirsiniz.

JTAG, veri alışverişi için SPI benzeri bir arayüz kullanan her işlemci ailesine özgü yüksek seviyeli bir protokoldür. Çoğu JTAG dongle'ı USB üzerinden bir SPI arabirimi sağlar, daha sonra işin geri kalanını bir PC uygulamasına bırakır. OpenOCD ve URJTag popüler seçimlerdir. Arduino JTAG protokolünüz için bunlardan birinde bir sürücüye ihtiyacınız olacak.

Bus Pirate, Arduino'ya (düşük hızlı mikrodenetleyici + FTDI yongası) çok benzer. OpenOCD ile JTAG'ı destekler , bu yüzden kesinlikle mümkündür.

Teensy / Opendous veya başka bir AVR-USB kartı kullanıyorsanız, eStick-JTAG kullanabilirsiniz .

Ancak, kayıp maliyet JTAG için, FTDI2232 tabanlı dongle'lardan birini öneriyorum. Ucuz ve OpenOCD tarafından iyi destekleniyorlar.


5

Bu mümkün ama çok zor. FTDI tabanlı JTAG'ları sevmiyorum, çünkü FTDI yongaları hazır kara kutulardır ve bunları kullanarak gerçekten öğrenmezler.

AVR ile bir USB-JTAG oluşturmak istersem, çipte en az usb tam hız desteği olan bir tane alırım. Ardından AVR usb yığınını (c kaynak kodları) alın ve bir usb-seri örneğine bakın. Usb üzerinden bitbang kötü bir fikir (yüksek gecikme) olduğundan, MCU'ya bitbanging'in kendisini yapmasını (veya mümkünse SPI'yi kullanmasını) ve yüksek seviye sonucunu usb (tam bayt) olarak döndürmesini bildiren daha yüksek seviyeli komutlara dönüştürülmesi gerekir. ). Ancak daha sonra IDE'nin yeni JTAG cihazını hata ayıklaması için desteklemesi için sürücüler yazma ihtiyacı geliyor. OpenOCD ve URJTag, birçok jtag cihazı için sürücü kaynak koduna sahiptir, bu nedenle yeni icat edilen cihazınız için bir tane almanız ve yeniden çalışmanız gerekir. Bazı kişilerin benzer işleri nasıl yaptığını görün: http://code.google.com/p/estick-jtag/


1

Openocd'a bak. Arka uçlar çoğunlukla paralel port bit patlama yaklaşımına dayanıyor, sanırım bir seferde sadece bir bit değiştirmek için gidiyor. Onların kukla arka uç dediklerini almak oldukça basit bir örnek. Arduino'ya yazma biti komutunu gönderin ve bu biti ayarlamasını veya silmesini sağlayın. Giriş bitini okuması istendiğinde, arduino'ya bu görevi gerçekleştirmek ve sonuçları döndürmek için bir komut gönderin.

Bunu tam olarak başarıyla yaptım, ancak bir arduino ile değil, bir ana bilgisayardan bir hdl simülatöründe çalışan simüle edilmiş bir kol çekirdeğine openocd konuşması yaptım.

Bazı jtag spesifikasyonlarının kapalı olduğuna dikkat edin, korteks-m3, son baktığımda NDA olmadan mevcut olmayan bir çeşit serileştirilmiş azaltılmış pim jtag sayısıdır. bu önemli olmayabilir, çünkü openocd, openocd'un desteklediği bir jtag arayüzü kullandığınız sürece sizin için her şeyi halleder, bit çarpan arka uç, arduino'nuzun ve almak / almak için kullandığınız herhangi bir arayüzün oyuna geldiği yerdir. .

Zaten Joby tarafından belirtildiği gibi, voltajlara dikkat etmeniz gerekir (tüm arduino lezzetleri 5V değildir ve tüm kol kontrolörleri 3.3 volt değildir) ve sinyal koşullandırma ve topraklama ve tüm bu şeyler. Hedef kartınız, arduino'nuzu çalıştırdığınız güçle karşılaştırıldığında farklı bir seviyede olan bir güç kaynağıyla çalışıyorsa, ikisini bağladığınızda bir şeyi eritebilir.


Proxy bit vuruşu için bir seri (veya daha kötüsü, paketli aktarımı ile USB) arayüzünün son derece yavaş olabileceğini unutmayın . Mikrodenetleyicinin tam işlemler yapması ve onunla daha yüksek bir düzeyde iletişim kurması, yani bu kaydı okumasını, bir tane yazmasını veya hatta bu veri bloğunu programlamasını söylemek çok daha etkilidir.
Chris Stratton

1

Mümkün ve ben aslında bunu uyguladım ve hepsini burada açıkladım .

Github bir kütüphane mevcuttur burada iki bölümden oluşur: Program o arduino ve arduino için XSVF dosyaları gönderen bir piton senaryo üzerinde çalışır.

Çoğu FPGA ve CPLD bu voltaj seviyesini kullandığından, 5 V değerini 3,3 V'ye dönüştürmek için birkaç dirence ihtiyacınız olacaktır.

Ayrıca XSVF dosyaları için bir derleyici / sökücü yazma bazı deneyimler yaptım, kod aynı github kütüphanesinde ve burada bu yazıda açıklanmıştır .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.