jtag programlayıcıyı kullanma talimatları. AVR programcıları. USB arabirimli tüm ChipProg serisi evrensel programcılar, diğer birçok protokol desteğiyle birlikte JTAG programlamayı destekler

  • 04.11.2019

Sizi bilmem ama ben programcıyı cihaz geliştirirken bir sarf malzemesi olarak görüyorum. 1.5 yıl boyunca toplamda 3 programcıyı yaktık. Şaşırtıcı bir şekilde, AVR için JTAG hata ayıklayıcıları pahalıdır. Ve üreticinin neredeyse 100 doları ne için istediği tam olarak belli değil. Sonuç olarak, birkaç ev yapımı hata ayıklayıcı yaptım, endüstriyel üretim için sipariş ettim ve şimdi onları kullanıyorum.

Şema, çok sayıda bulunan ağdaki şablonlara göre kendi başına yetiştirildi. Ancak devre bir katmana sığmadı, bu yüzden tekrar seyreltmek mantıklı, LUT'u tek katmanda yaparsanız 4 kabloya ihtiyacınız olacak.

Şimdi, bellenim konusunda, AVR Studio, bir önyükleyici aracılığıyla flaş yapma özelliğini içerir. Markalı programcılar, bellenimi güncelleme yeteneği için gemide bir önyükleyiciye sahiptir. Ancak, bir önyükleyici kullanmadan denetleyiciyi doğrudan bellenim ile flaşlayacağız, bu nedenle önce bir devre içi programlayıcıya veya başka bir hata ayıklayıcıya ihtiyacınız var. Aynı zamanda, mikrodenetleyicinin başka bir kartta yanıp sönmesi gerekir, çünkü bunun bir ISP konektörü yoktur, ancak bu durumda, özellikle pahalı değildir. Proje içindeki MiniIce.hex ürün yazılımı dosyası.

Şematik diyagram:

ATmega mikrodenetleyicileri kabaca iki kategoriye ayrılabilir: sadece ISP aracılığıyla programlananlar (MISO, MOSI, SCK + sıfırlama kontrolü kabloları) ve buna ek olarak bir JTAG arayüzüne sahip olanlar.

"Sevgili" Arduino kontrolörleri setinden ATmega ilk kategoriye aittir. 8 , ATmega 168 , ATmega 328P... Ancak ikinci kategoride de bir örnek var: ATmega2560 Arduino / Freeduino MEGA 2560'ta kullanılır.

JTAG- Bu, PCB montajının kalitesini otomatik olarak kontrol etmenizi sağlayan bir mekanizmadır: bir şeyin kısa devre olup olmadığı veya tam tersine kötü lehimlenmiş olup olmadığı. Endüstriyel ölçekte çok faydalı bir şey, özellikle farklı şirketlerden gelen çipler aynı kartta "mutlu bir şekilde" bir arada bulunduğunda (JTAG'in dayandığı IEEE 1149.1 standardı açıktır). Pek çok çip üreticisinin çiplerini aynı JTAG üzerinden programlama ve hata ayıklama yeteneği eklemesi daha mantıklı.

Günlük yaşamınızda neden JTAG'a ihtiyacınız olabilir?

ATMEL'den markalı bir cihaz çok pahalı (ve onu zaten satın aldım, ondan sonra sıfır negatif para kaldı):

Ne yapalım? Standardın açık olduğunu ve JTAG üzerinden programlama sürecinin iyi belgelendiğini zaten söyledim - bir ATMEL mikro denetleyicisinde herhangi bir veri sayfasını JTAG arayüzü ile açmak yeterlidir.

Bu arada, bir kez, ATMEL mikrodenetleyicilerinin ortaya çıkışının şafağında, rakip Microchip, ATMEL ile alay etti, ATMEL mikrodenetleyici programlarının geliştiricisi için bir tür enstrümantal cihazı açık bir şekilde demonte etti ve üretiminin mikrodenetleyicilerine monte edildiğini gösterdi - yani, PIC'lerde. Ancak, inanılmaz uzun zaman önceydi, dünya şimdi tamamen farklı (c).

İnternette, markalı AVR JTAG ICE'nin ev yapımı kopyaları için birçok seçenek var. Tam bir rezalet için basitleştirilmiş bunlardan biri, örneğin bulunabilir. En komik şey nedir - İşler, neredeyse bir MK'den oluşmasına rağmen: ATmega16. Orijinal programcı, ATmega16 ile tamamen uyumlu bir çip kullanır; bu, tescilli programcıdan kendi kendine yapılan bir programcıya ürün yazılımı yüklemeyi mümkün kılar (ancak, AVR JTAG ICE'nin üretimi durdurulduğundan, yenilerinin ortaya çıkması olası değildir).

İlk önce ana bileşeni almanız gerekir - bir mikrodenetleyici ATmega16-16PU ve kuvars 7.3728 MHz, ardından minimum programlama devresini devre tahtasına monte edin:

Şema - klasik ATmega'yı çalıştırmak için gerekli. Bu durumda genellikle ne yaptıklarını hatırlatmama izin verin:

  • gücü bağlayın - tüm GND ve VCC (genellikle en az iki GND pini);
  • GND ve VCC arasına ATmega'nın bacaklarına yakın bir 100 nF gürültü filtreleme kondansatörü koyun (veya 0,1 μF - hangisini tercih ederseniz);
  • XTAL1 ve XTAL2 kuvars arasında bağlanın ve bunları iki aynısı kapasitörden toprağa (değer aralığı belgelerde belirtilmiştir, kullanılması gerekli değildir) 22 pF, örneğin yapabilirsiniz ve 33 pF);
  • sıfırlama hattını bir direnç üzerinden VCC'ye çekin 10K ve kondansatörü kapatın 100 nF güç uygulandıktan sonra sıfırlama hattında hafif bir gecikme sağlamak için toprağa.
Bunun gibi görünecek (her şey 300 + 100 düzenine güvenli bir şekilde uyuyor):

Devreyi ISS fişi üzerinden programlayıcı ile bağlarız ve ondan güç alırız, ardından bellenimi dikeriz ve sigorta bitlerini ayarlarız:

avrdude -C avrdude.conf -c usbasp -p m16 -U hfuse: w: 0x1f: m -U lfuse: w: 0xcf: m

avrdude -C avrdude.conf -c usbasp -p m16 -U flash: w: miniICE.hex

Operasyon başarılı olursa, savaşın yarısı yapılır. temiz olabilir silmek ISP konektörü ve devreyi aşağıdakine dönüştürün:

Bir breadboard üzerinde şöyle görünür:

Muhtemelen devrede bir USB seri port çipi - FT232RL kullandığımı fark etmişsinizdir. Birçok nedenden dolayı bir COM bağlantı noktasından çok daha uygundur. Ancak SSOP'yi bir devre tahtasına yapıştıramazsınız, bu yüzden kendi yapımı bir adaptör kullanıyorum:

Klasik versiyonda, şemadakinden biraz daha fazla JTAG satırı vardır:

Zorunlu sinyaller TCK, TDO, TDI ve TMS'dir (saat, veri çıkışı, veri girişi ve test modu kontrolü).

NSRST ve NTRST, JTAG veri yolu sıfırlama kontrolleridir. Bizim durumumuzda bunlar gerekli değildir, çünkü MC sıfırlaması, zorunlu sinyal hatlarındaki bir komut dizisi ile başlatılabilir.

Şimdi beslenme ile ilgilenelim. Devre içi programlayıcıya programlanabilir bir devre tarafından güç verilmesi arzu edilir. Bu, programlanabilir devre ve programlayıcının seviyelerini birleştirme sorununu hemen çözer. Öte yandan, programlayıcının bir sinyal seviye dönüştürücüsü varsa, VCC programcısı ile hedef arasındaki fark artık bir sorun olmaktan çıkar (programlayıcı devresinin karmaşıklığı dışında).

Zorunlu satırdan VTref cihazın besleme gerilimi uygulanmalıdır. Teorik olarak, programlayıcının içinde yukarıdaki seviye dönüştürücü çipin buna ihtiyacı vardır. Ancak JTAG ICE hedeften güç almayı planlıyorsa, hat kullanılır Vsupply... Basitlik için birleştirilebilirler, ancak bu gerekli değildir.

SV2 atlama telinin şemadaki konumuna bağlı olarak, ATmega16 ya USB'den ya da hedeften güç alacaktır. Anahtarlama atlama telini devre tahtasına koyamayacak kadar tembeldim çünkü yalnızca hedeften güç alması gerekiyordu. Ama açmadan önce, bunu üç kez kontrol ettim. USB gücü sağlanmıyor ... Güvenilirlik için yerleşik USB-TTL güç kaynağı atlama telini açtı. Daha fazla iletişim M8RX MK RX ayağı ile bağlanır, M8TX- TX ile.

Programcıya AVR Studio üzerinden bağlanıyoruz ve her şey doğru bir şekilde bağlanırsa imza ve bellenimi okumak mümkün olacaktır.

(Sağdaki cihazı daha sonra kesinlikle değerlendireceğim, şimdilik sadece içinde ATmega128 olduğunu tekrar edebilirim)

AVR JTAG ICE klonunun tek dezavantajı, desteklenen MCU'ların nispeten küçük listesidir:

  • ATmega128
  • ATmega128A
  • ATmega16
  • ATmega162
  • ATmega165
  • ATmega169
  • ATmega16A
  • ATmega32
  • ATmega323
  • ATmega32A
  • ATmega64
  • ATmega64A
Ayrıca AT90CAN128'in desteklendiğini söylüyorlar ama bunu kontrol etmenin bir yolu yok :(

JTAG programcısı (jarg.) - JTAG arayüzü üzerinden bir mikro devre ile çalışan bir programcı.
JTAG (Ortak Test Eylem Grubu), IEEE 1149.1 standardı olan özel bir hata ayıklama arabirimidir.
Kelimenin tam anlamıyla, bir JTAG programcısı, aşağıdaki türlerden birine atfedilebilen bir cihazdır:

  • Seri üretimde programlama ve test için tasarlanmış özel JTAG programcıları. Bu tür JTAG programlayıcıları, 1 geçişte mikro devreyi doğrudan kullanıcının cihazında programlamanıza ve gerekirse cihazın performansını test etmenize izin vermeleri açısından uygundur;
  • Bir JTAG öykünücüsünün ve bir JTAG programlayıcısının işlevlerini birleştiren özel hata ayıklayıcılar. Aynı zamanda, hem öykünücü hem de programlayıcı, servis verilen mikro devrenin JTAG bağlantı noktasını kullanır. Örneğin, JEM-ARM (JTAG öykünücü programcısı), JTAG protokolünün tüm özelliklerini kullanır ve yalnızca programlamayı değil, aynı zamanda ARM, Cortex ailesinin mikro denetleyicilerinin tam hata ayıklamasını da sağlar. ;
  • Paralel programlama modu desteğiyle birlikte JTAG arabirimi aracılığıyla seri modu da destekleyen evrensel programcılar;
  • JTAG portu üzerinden 1 veya daha fazla mikro devre tipini programlamak için tasarlanmış çok sayıda amatör radyo devresi. (PIC programcıları olarak adlandırılanlara benzer şekilde).

USB arabirimli tüm ChipProg serisi evrensel programcılar, JTAG programlamayı ve diğer birçok protokolü destekler.

NAND Flash, mikro denetleyiciler, FLASH, E (E) PROM, NVRAM, FPGA, PLD'nin yüksek hızlı programlanması için optimize edilmiş evrensel USB programlayıcı. programcı açıklaması

Evrensel USB programlayıcı. Mikrodenetleyicilerin hızlı programlanması, FLASH, NAND, EEPROM, EPROM, NVRAM, FPGA, PLD. Programcı özellikleri

Bütçe, USB arabirimli evrensel programlayıcı. Mikrodenetleyicilerin programlanması, FLASH, EPROM, EEPROM, NVRAM. programcı açıklaması

Devre içi ISS programcısı. Kullanıcının cihazındaki mikrodenetleyicilerin ve bellek yongalarının programlanması. programcı açıklaması

ChipProg-G41 Endüstriyel programcı fotokopi makinesi. En hızlı programlama, mikrodenetleyicilerin replikasyonu, FLASH, NAND, E (E) PROM, NVRAM, FPGA, PLD.

Üretim açısından karmaşık olmayan bir başka şey de bir COM programcısıdır. Bitbang'in COM bağlantı noktasının alternatif modunu kullanırsanız, RS232 COM bağlantı noktası arabirimini programlama için gerekli olan SPI'ye dönüştürmeye gerek yoktur. Sadece COM bağlantı noktası sinyal seviyelerini (-12V, + 12V) gerekli (0, + 5V) değerine getirmek için kalır. Bu yapar
AVR mikro denetleyicileri için COM programlayıcı devresi:

Bu programlayıcı devresi oldukça yaygındır ve Gromov programcısı olarak bilinir. Adı, böyle bir plan öneren programın yazarı Gennady Gromov'dan geldi.

Gromov'un programlayıcısını bir araya getirmek için aşağıdakilere ihtiyacımız var:

Diyotlar KD522, KD510, 1N4148 veya benzerleri. Bulduğunuz dirençleri kullanabilirsiniz. Döngü olarak bir IDE döngüsü kullanabilirsiniz. Bir döngü bağlarken, programlayıcının daha kararlı çalışması için her "sinyal" kablosu bir "toprak" kablosuyla değişmelidir. Bu, hatlarda indüklenen gürültü seviyesini azaltacak ve böylece programlama kablosunun uzunluğunu artıracaktır. Döngünün uzunluğu 50 cm içinde olmalıdır.Ayrıca programlanabilir bir cihaza bağlanmak için bir konektöre ihtiyacınız vardır.
Devre içi programlama için Atmel standart konektörleri önerir:


Mikrodenetleyiciler konusunda ciddi olmayı planlıyorsanız, konektörleri standart hale getirin. Cihazın bir kerelik programlanması için, programlayıcıda (bilgisayar kasasının düğmeleri ve LED'leri bu tür konektörlerle ana karta bağlı - bunu aldım) ve karttaki PLS pinlerinde kullanmanızı öneririm. Bu, programlayıcı pinleri mikrodenetleyici bacaklarının hemen yakınına monte edildiğinden, cihaz kartının yerleşimini mümkün olduğunca basitleştirmeyi mümkün kılar. AVR mikro denetleyicilerinin MOSI, MISO, SCK pinleri her zaman birlikte bulunur, bu nedenle onlar için üçlü bir konektör kullanılabilir. "Toprak" -GND ve "reset" -Reset için ayrı bir bağlantı yapıyoruz.

Bir COM programlayıcısını bir araya getirmek zor değildir:

Bu programcı için kasıtlı olarak bir baskılı devre kartı vermiyorum, çünkü devre basit ve tahtanın düzeni ve aşındırma ile uğraşması kendini haklı çıkarmaz.

COM programlayıcımızın çalışması için programlayıcıyı ve mikrodenetleyiciyi bağlayacağımız gereklidir.

- Bitbang modu bilgisayarın COM portu için standart olmadığı için, arızalar mümkündür (buna sahip olmasam da). Bu özellikle dizüstü bilgisayarlar için geçerlidir. Bu soruna çözüm olarak COM port ayarlarıyla (hız, veri bitleri, akış kontrol seçenekleri, arabellek değerleri...) oynamayı önerebilirsiniz.
- Programlanabilir cihazın ve bilgisayarın "toprak" potansiyellerini eşitlemek için önce "toprak" için ayrı bir konektör bağlanması tavsiye edilir. Bilmeyenler için, bilgisayarınız topraklama kontağı olmadan normal bir prize takılıysa, bilgisayarın güç kaynağı filtresinin özellikleri göz önüne alındığında, bilgisayar kasasında her zaman 110V'luk bir potansiyel vardır.

Çözüm:

- Gromov'un COM programcısı basit ve güvenilirdir. Bir USB programlayıcı kurduktan sonra bile kullanmayı bırakmadım (eğer herhangi bir mikro denetleyici bir USB programlayıcı tarafından programlanmayı durdurursa, kesinlikle Gromov'un programlayıcısında iki kez kontrol edeceğim).
- Gromov'un programcısı pasif elemanlar üzerine monte edildiğinden kendisi için güç gerektirmez. Ayrıca, parazitik güç kaynağı nedeniyle, mikrodenetleyici, ona herhangi bir güç kaynağı bağlamadan programlanabilir! Bu şekilde programlamayı önermesem de, gerçeğin kendisi ilginç.
- Algoritma Oluşturucu kullanıcıları için güzel bir bonus var! Bu programlayıcı, devre içi çip hata ayıklaması için kullanılabilir (yazılım JTAG).