Bus Blaster - antarmuka bit-bang universal cepat untuk penggemar pasien



Saya sudah lama ingin memiliki beberapa jenis antarmuka perangkat keras yang universal dan universal dengan beberapa sinyal input dan output, fungsi yang ditentukan secara eksklusif oleh perangkat lunak, seperti programmer PonyProg yang mengesankan . Dan sehingga dapat digunakan tidak hanya sebagai firmware baca / tulis, tetapi juga untuk debugging program melalui JTAG. Pada saat yang sama, membeli sesuatu industri, dengan kemewahan saya yang sesekali dengan elektronik, adalah berlebihan dan tidak menguntungkan - diperlukan sesuatu dari serangkaian "produk setengah jadi" berdasarkan bit-bang .

Apa itu bit bang dan mengapa itu dibutuhkan
- , Windows 9x (COM) (LPT) . , , . , , . bit-bang, — «», «» ..

2k/XP /, giveio. NT, - .

Seperti yang Anda tahu, komputer modern, terutama laptop, dengan port perangkat keras tidak ramai, karena sebagian besar pengguna tidak membutuhkannya. Adaptor USB untuk menghubungkan perangkat dengan antarmuka RS232 dan Centronics (bahasa sehari-hari - COM / LPT) bekerja dengan baik hanya dalam kerangka tujuan utama, dan bermasalah untuk melakukan "menyentak" pada mereka karena sejumlah alasan. Pertama, sebagian besar adapter ini hanya dapat memproses sinyal data (Tx / Rx yang sama) dengan kecepatan yang baik, dan memproses sinyal kontrol dengan penundaan besar. Kedua, adaptor dari berbagai produsen tidak kompatibel dengan perangkat keras, dan kemungkinan kontrol non-standar melalui driver pabrikan sangat terbatas. Ketiga, hampir semua driver menggunakan paket USB terpisah untuk mengirim perintah ke adaptor, yang membatasi frekuensi perubahan status menjadi hanya seribu kali per detik,yang bagi banyak aplikasi kecilnya sangat kecil.

Untungnya, FTDI telah lama menawarkan berbagai solusi USB yang berfokus secara khusus pada pertukaran sinyal sewenang-wenang berkecepatan tinggi. Sebuah studi cepat dari masalah ini menunjukkan bahwa yang paling populer dalam hal ini adalah antarmuka pada mikrosirkuit FT232H / FT2232H .

Solusi sederhana


Awalnya, FTDI diimplementasikan dalam antarmuka USB FT232BM, FT232R dan sejenisnya dua mode tambahan - bit-bang asinkron dan sinkron. Untuk ini, delapan atau lebih jalur sinyal tambahan ditambahkan, masing-masing dapat dikonfigurasi untuk input atau output. Data buffer yang ditransmisikan ke antarmuka dari komputer diatur pada garis output oleh sinyal clock, data input dibaca dari garis, buffered dan dikirim ke komputer. Mengikat I / O ke jam menyediakan akurasi interval yang baik - aplikasi tidak perlu lagi merawatnya secara terprogram.

Jadi, alih-alih siklus tradisional tipe “atur level aktif pada jalur output; jeda; baca status jalur input; atur level pasif pada garis keluaran ”, aplikasi menghasilkan urutan byte, yang masing-masing mengatur keadaan garis keluaran untuk satu periode jam. Urutan dikirim ke antarmuka, dan dari sana urutan yang sama dibaca, mencerminkan keadaan jalur input. Dalam mode asinkron, input dan output terjadi secara independen satu sama lain. Pembacaan input secara sinkron dilakukan segera sebelum mengatur sinyal pada output, yang memungkinkan kerja yang lebih andal dengan sinyal yang berubah dengan cepat.

Pengontrol MPSSE


Dalam versi H chip FTDI, multi-protokol sinkron serial controller ( MPSSE ) ditambahkan , yang perangkat keras mengimplementasikan berbagai jam dan mode pertukaran data. Pembentukan sinyal dari protokol yang diinginkan dilakukan dengan mentransmisikan ke controller serangkaian perintah internal yang menentukan metode clocking, waktu pengaturan / membaca sinyal (di bagian depan atau bawah dari pulsa jam), urutan transmisi bit (LSB / MSB). Pengontrol mengirim kembali urutan "snapshots" dari jalur input. Kecepatan transfer data dapat mencapai 30 Mbps.

Melalui MPSSE, protokol JTAG , I2C, dan SPI diimplementasikan secara alami.Namun, hampir semua "jerkiness" dapat dengan mudah diimplementasikan dalam kemampuan perangkat keras controller.

FTDI menawarkan dokumentasi yang luas tentang menghubungkan dan memprogram antarmuka, pustaka dan program sampel untuk bekerja melalui MPSSE untuk Windows, Linux dan MacOS , driver D2XX untuk interaksi langsung dengan antarmuka.

Antarmuka FTDI didukung oleh program-program populer OpenOCD , UrJTAG , flashrom , avrdude , HappyJTAG2 , zJTAG , dll.

Masalah konektivitas


Setelah mengetahui semua hal di atas secara terperinci tahun lalu, saya terinspirasi, tetapi segera menemukan bahwa FT232H / FT2232H, dengan segala fleksibilitasnya, tidak selalu dapat dihubungkan langsung ke perangkat akhir. Pertama, garis eksternal rangkaian dirancang untuk level 3,3 V, dan dalam banyak perangkat modern digunakan level 2,5 / 1,8 / 1,5 V. Kedua, jalur output tidak dapat beralih ke status impedansi tinggi dan sebaliknya dengan frekuensi tinggi - ini hanya mungkin dilakukan pada awal mengatur garis dengan memilih mode "input" atau "output". Yaitu, untuk menghubungkan sebuah chip dengan MPSSE ke perangkat target, diperlukan rangkaian penyangga yang cocok dengan level sinyal dan menyediakan penghentian operasional beberapa jalur output (misalnya, dengan level sinyal TMS pasif/ Cs ).

Googling pada opsi untuk sirkuit buffer, saya menemukan bahwa sejumlah besar adaptor telah dibuat di dunia yang berbeda satu sama lain hanya dalam buffer ini. Beberapa program (tetapi tidak semua) memungkinkan penggunaan berbagai jenis buffer. Jadi, memilih model adaptor tertentu, pada saat yang sama Anda membatasi rentang program yang akan bekerja dengannya. Dan untuk memutuskan jenis di muka, perlu lagi untuk serius google dan membaca diskusi di forum, yang saya tidak ingin lakukan sama sekali. Beberapa adapter diizinkan untuk mengatur konfigurasi buffer dengan jumper, tetapi ini penuh dengan kesalahan, dan mereka tidak murah.

Bus Blaster - klaim fleksibilitas


Gagasan pria tentang Dangerous Prototypes adalah asli dua kali: yang pertama - sebagai penyangga yang terhubung dengan chip FT2232H PLD (CPLD) Xilinx XC2C32A , yang dapat diprogram ulang dengan cepat di bawah konfigurasi apa pun, dan yang kedua - untuk penggunaannya memprogram ulang saluran kedua FT2232H. Selain menerapkan logika buffer, FPGA melakukan pencocokan level - garis eksternalnya beroperasi di kisaran 1,5-3,3 V.

Sebagai hasilnya, papan Bus Blaster ternyata. Sejak dimulainya proyek, empat versi papan telah diganti. Versi 3 dianggap yang paling stabil dan tersebar luas, Versi 4 berisi FPGA besar yang tidak sepenuhnya dikembangkan dan digunakan jauh lebih jarang. Versi berikutnya, tampaknya, tidak akan lagi, karena pengembangan proyek dihentikan beberapa tahun yang lalu. Saya mendapat kesan bahwa beberapa orang benar-benar mencoba papan - dengan potensi yang tinggi, itu tidak terlalu mudah digunakan. Bagian dari forum telah dibuat untuk dewan , tetapi sejak tahun lalu hampir tidak ada yang ditulis di sana.

Setelah refleksi, saya memesan versi AliExpress 3c , sebagai yang paling berkembang, seharga $ 34. Kemudian mereka dijual di sana oleh toko dari produsen - Seeed , dan sekarang hanya dealer dari $ 52 yang menjualnya.Langsung di Seeed (bersama dengan pengiriman) akan dikenakan biaya $ 37.

Kesan pertama


Papan terlihat persis sama seperti pada gambar - indah, rapi, dibuat dengan kualitas tinggi. Di forum tersebut, seseorang mengeluh tentang kurangnya output dari sirkuit mikro, jadi saya memeriksa dengan hati-hati di bawah kaca pembesar - saya tidak menemukan cacat. Saya sudah menginstal

driver D2XX sebelumnya, jadi boardnya diakui saat dalam perjalanan. Langkah pertama adalah berurusan dengan logika penyangga pemrograman dalam FPGA. Ini dilakukan dengan menggunakan program UrJTAG , tetapi secara khusus disetel untuk Bus Blaster untuk akses yang tepat ke saluran FT2232H kedua.

Pertama, Anda perlu mengunduh dan menginstal versi dasar UrJTAG . Maka Anda perlu menambahkan file EXE yang dimodifikasi dan deskripsi FPGA (BSDL) dari paket ini. Untuk memprogram FPGA tertanam, Anda perlu menjalankan EXE yang dimodifikasi, untuk bekerja dengan perangkat eksternal - yang utama. Prosedur pemrograman FPGA dijelaskan di sini . Untuk kenyamanan, Anda dapat membuat skrip untuk UrJTAG untuk setiap versi buffer, dan file CMD dengan baris perintah untuk menjalankannya.

Kumpulan firmware FPGA yang menjelaskan buffer yang kompatibel dengan adaptor JTAGkey , KT-Link, dan PicoTap tersedia di sini , tetapi untuk BBv3 hanya ada satu file untuk JTAGkey dengan dukungan untuk pengujian sendiri (BBV3-JTAGkey-selftest-v1.1.svf). Sebagian besar sudah cukup, tetapi tidak berhasil bagi saya dengan flashrom , yang akan dibahas di bawah.

Setelah menulis firmware ini ke dalam FPGA, saya meletakkan jumper di konektor untuk pengujian sendiri, seperti yang dijelaskan dalam dokumentasi , menutup garis P28 (IO09) ke tanah - LED di papan menyala. Saya mengunduh dan meluncurkan program pengujian - ini menunjukkan bahwa semuanya beres.

Sungguh aneh, omong-omong, bahwa program swa-uji disebut "BusPiratev2Test", karena Bus Pirate adalah proyek yang sama sekali berbeda, tidak kompatibel dengan BB .

Pada awalnya, saya umumnya percaya bahwa firmware ini dimaksudkan hanya untuk pengujian sendiri, dan untuk aplikasi "militer" diperlukan beberapa jenis lain, karena deskripsi mengatakan sesuatu yang tidak terdengar. Lalu saya menemukan bahwa firmware itu universal, hanya mode tes di dalamnya dihidupkan oleh korslet P28 ke tanah.

Upaya Penargetan


Setelah Anda mengunduh dari sini (sekarang ada, sayangnya, 404) flashrom v0.9.6.1-r1704 / the Win32, dan ditutup dengan semacam chip motherboard yang mati MX25L8005 (SPI), mencoba membacanya di baris perintah " -p ft2232_spi: type = busblaster ". Namun, flashrom mengatakan tidak dapat menemukan FT2232. Membaca dokumentasi menunjukkan bahwa itu hanya berfungsi melalui libusb - perpustakaan antarmuka universal, awalnya ditulis di Linux, dan kemudian porting di Windows.

Melalui libusb, ia menemukan antarmuka, tetapi dengan keras kepala menyatakan bahwa ia tidak melihat sirkuit mikro. Ditemukan dalam kotak dengan buah necrophilia beberapa chip SPI lainnya - juga tidak melihat. Dimainkan oleh osiloskop - TMSmengaduk, TCK adalah, TDO aktif, dan diam di TDI . Secara umum, tidak ada lonjakan tunggal. Saya menghubungkan saluran osiloskop secara bersamaan ke TCK dan TDO - sinyal berubah secara sinkron, jelas. Belum ada ide tentang apa yang bisa diverifikasi.

Untuk sementara menghentikan percobaan dengan flashrom, terhubung ke antarmuka ATTiny13 . Mengunduh di sini beberapa versi avrdude yang berbeda , dengan versi 5.11-Patch7610 / Win32 dan jenis pemrograman 2232HIOakhirnya mendapat identifikasi, pembacaan, dan penulisan controller yang jelas. Setelah bersukacita, ia menghubungkan kembali chip SPI, tetapi flashrom dengan keras kepala menolak untuk mengenali mereka.

Karena curiga kedua sirkuit mikro itu mati, ia mengeluarkan USBASP 2.0 , yang dipertukarkan untuk AsProg - ia membaca keduanya tanpa masalah (walaupun sangat lambat). Ngomong-ngomong, saya membeli tiga USBASPs secara umum untuk peran papan prototyping yang nyaman di ATMega8, tetapi perangkat itu ternyata multifungsi multifungsi.

Saya menghubungkan sirkuit mikro ke BB lagi dan mulai mencoba flashrom dalam mode yang berbeda (Bus Blaster dan JTAGKey), dengan nilai pembagi yang berbeda ( -p ft2232_spi: type = busblaster, pembagi = n) Tiba-tiba, di salah satu kombinasinya, microcircuit dikenali, tetapi sudah menolak untuk membaca. Setelah beberapa upaya lagi, identifikasi juga menghilang. Kemudian beberapa kali dimungkinkan untuk mendapatkan beberapa identifikasi yang berhasil secara berturut-turut, tetapi membaca tidak pernah tercapai.

Diposting di forum, tetapi tidak menerima tanggapan yang masuk akal. Setelah mencari-cari di dalam pencarian, saya menemukan beberapa keluhan orang tentang firmware FPGA universal (dengan swa-uji), saya menemukan tiga versi firmware lagi di sana, mencobanya dalam kombinasi yang berbeda dengan parameter lain, tetapi tidak berhasil. Setelah kehabisan semua pilihan, ia meninggalkan percobaan sampai kedatangan penganalisa logika memesan sedikit kemudian BB.

Menguji dengan analisa


Setelah menerima tiruan dari penganalisis logika Saleae Logic 16 yang populer , ia menghubungkannya ke keempat baris SPI . Program ini, tersedia secara gratis di situs web Saleae , dapat mendekripsi I2C, SPI, dan beberapa lainnya, sehingga segera menunjukkan dekripsi semua paket - baik yang dikirim maupun yang diterima. Segera menjadi jelas bahwa paket-paket itu "mengambang" - urutan bit yang sama dikelompokkan oleh program ke dalam paket-paket pada batas yang berbeda berulang-ulang.

Membandingkan diagram sinyal pada lembar data dari sirkuit mikro dengan yang direkam, di beberapa titik saya perhatikan bahwa sinyal TMS (terhubung ke pin CS) pada awal setiap sesi pertukaran, ia pergi ke level rendah (aktif), di mana ia tetap, meskipun menurut protokol itu harus kembali ke level (pasif) tinggi pada akhir setiap operasi. Saya mengubah firmware "resmi" dari FPGA menjadi salah satu yang alternatif - TMS mulai bergerak lebih aktif, batas-batas paket selaras di atasnya, dan setelah memilih pembagi frekuensi jam di baris perintah flashrom (berhenti di 8), microcircuit akhirnya mulai menanggapi dengan jelas setiap permintaan, membaca dan menimpa .

Terkejut bahwa saya tidak segera memperhatikan perilaku TMS , saya menyadari bahwa saya bingung dengan keberhasilan bekerja dengan AVR pada firmware FPGA yang sama. Melihat lembar data ATTiny13, saya menemukan bahwa sinyal RESET , yang memulai TMSmungkin rendah selama seluruh waktu pertukaran, kenaikannya untuk sinkronisasi tidak diperlukan. Dan SPI-chip perlu dinaikkan untuk sinkronisasi.

Sebagai hasil pengujian, saya mengumpulkan informasi tentang tiga firmware FPGA yang terkenal dalam satu posting forum .

Batas penulisan ulang FPGA


Dalam salah satu diskusi saya menemukan peringatan bahwa jumlah siklus dijamin untuk menulis ulang firmware FPGA ini hanya sekitar seribu. Awalnya saya kesal, karena selama percobaan saya berhasil mengubah firmware sekitar seratus kali, dan sudah membayangkan kematian chip yang akan terjadi. Harganya tidak apa-apa, tapi saya tidak ingin mengacaukan solder. Kemudian dia menyadari bahwa dengan pendekatan yang memadai, sisa sembilan ratus siklus akan cukup untuk beberapa tahun lagi.

In-circuit flashing ROM di router


Setelah beberapa saat, saya membentuk router mini yang baru dipanggang pada RT5350F dengan nama kode "ZLMNet H-G5 / P8201" (sebutan yang diambil dari antarmuka web). Sekitar waktu yang sama, klip untuk SOIC8 / SOP8 tiba juga - saya memutuskan untuk mencoba pekerjaan di-sirkuit dengan ROM.

Pada awalnya, flashrom tidak melihat EPROM melalui BB sama sekali. Osiloskop menunjukkan bahwa prosesor selalu mengalahkan perjuangan antara FPGA dan prosesor router untuk level sinyal CS dan CLK . Apa yang tidak mengejutkan - di BB antara terminal FPGA dan konektor ada resistor membatasi arus yang menyimpan kunci FPGA arus rendah dari kejenuhan.

Saya menghubungkan USBASP dengan AsProg - yang ini membaca / menulis secara normal, tetapi sekali lagi sangat lambat (9 menit untuk membaca, 25 menit ke siklus hapus-tulis-periksa). Untuk satu revitalisasi batu bata, itu masih dapat diterima, tetapi untuk percobaan dengan firmware yang tidak stabil itu tidak ada lagi. Selain itu, AsProg tidak tahu cara bekerja dengan halaman individual - hanya dengan seluruh sirkuit mikro.

Saya menyolder antara output TMS / TCK di BB dan input CS / CLK dari EPROM untuk pengikut emitor - sinyal segera mengarah ke tingkat yang hampir benar, chip flashrom yang diakui, mulai membaca / menulis dengan percaya diri. Dengan pembagi 8, pembacaan lengkap membutuhkan waktu kurang dari satu menit, menulis ulang membutuhkan waktu sekitar dua menit.

Ternyata komunikasi programmer dengan EPROM sama sekali tidak mengganggu prosesor - router bekerja dengan sempurna. Jelas, jalur CS / CLK hanya dialokasikan untuk EPROM, yang dibaca sekali saat boot, setelah itu prosesor tidak mengaksesnya, kecuali jika Anda mulai mem-flashnya dengan cara biasa.

Kekurangan program BB


Program yang diuji (zJTAG, flashrom, avrdude, UrJtag, OpenOCD) yang dapat bekerja dengan MPSSE membuat kesan yang sangat menyedihkan. Pertama, di sebagian besar program ini, dengan semua jenis adaptor FTDI, tidak ada indikasi eksplisit VID / PID - pengidentifikasi dari adaptor yang dikenal dikode dalam kode. Tetapi untuk JTAGkey, yang mengemulasi BB, PID diatur ke CFF8, dan untuk "bersih" FT2232H diatur ke 6010. Tentu saja, Anda dapat mengubah pengidentifikasi dalam BB menggunakan FT_Prog , atau menambal tabel dalam program, tetapi kedua opsi sama-sama bengkok. Yah, saya berhasil menemukan versi flashrom dengan dukungan BB yang dikompilasi untuk Windows (kalau tidak saya harus menginstal CygWin), dan avrdude berfungsi dengan baik ketika menentukan jenis programmer 2232HIO .

Kedua, beberapa program bekerja dengan adaptor hanya melalui perpustakaan libusb , yang, pada gilirannya, bekerja melalui drivernya sendiri, yang tidak kompatibel dengan driver FTDI. Adalah baik bahwa di Windows, untuk beralih di antara driver, Anda tidak perlu menghapus satu sama sekali dan menginstal yang lain - Anda hanya perlu "memperbaruinya" dengan secara paksa memilih driver yang tepat untuk perangkat yang diberikan (saluran A atau B).

temuan


Sekarang, mengingat jumlah waktu dan saraf kumulatif yang dihabiskan untuk semua percobaan yang dijelaskan, saya mengerti bahwa harga keanggunan eksternal dan universalitas yang tampak dari solusi ternyata menjadi penghalang. Saya menghabiskan waktu ini sebagai tambahan pada pekerjaan utama - saya akan mendapatkan beberapa programmer industri dan penipu yang serius. Tetapi plus yang tidak diragukan lagi adalah bahwa latihan semacam itu setidaknya entah bagaimana memungkinkan Anda untuk menahan diri dari slide terakhir ke dalam konsumsi bersih dari modul-modul khusus yang sudah jadi, yang ditawarkan orang Cina dengan berlimpah. Dalam hal ini, adalah mungkin untuk membuat iri para insinyur kuno dan abad pertengahan - selama beberapa dekade mereka dapat dengan antusias memecahkan masalah yang sudah lama diselesaikan dalam beberapa ribu kilometer di lingkungan tersebut, hanya saja tidak mengetahuinya.

Kita harus mencoba OpenOCD dan JTAG pada beberapa router yang tersedia, tetapi semua orang tidak mendapatkannya.

Prototipe Berbahaya juga memiliki proyek Bajak Laut Bus yang lebih tua . Ada papan PIC dan antarmuka sederhana FT232BL dalam mode serial tradisional. Untuk berkomunikasi dengan controller, terminal biasa dan perintah teks digunakan, jawabannya juga ditampilkan dalam bentuk teks. avrdude, flashrom dan sejumlah program lain juga dapat bekerja melalui BP, namun, untuk alasan yang jelas, kecepatannya beberapa kali lebih rendah. Kecepatan rendah dikompensasi oleh luasnya aplikasi - ada banyak pilihan untuk menggunakan BP untuk meniru berbagai protokol.

Berpikir bahwa dalam hidup ini Anda perlu mencoba segalanya, saya memesan BP v3.6dengan kabel. Ya, ya, saya ingat tentang tikus di kaktus, dan tentang "besok saya akan pergi ke sana lagi."

Source: https://habr.com/ru/post/id380531/


All Articles