Kata Pengantar
Dalam
artikel sebelumnya, mekanisme perlindungan programmer XELTEK SuperPro 6100 terhadap kloning dipertimbangkan.
Artikel ini akan menjelaskan pembuatan modul perangkat lunaknya sendiri untuk pemrogram ini, yang, dengan modifikasi kode tertentu, dapat diadaptasi untuk bekerja dengan semua jenis sirkuit mikro lainnya - saat ini tidak didukung atau, seperti dalam kasus kami, hanya dinyatakan secara formal.
Latar belakang
Sekali lagi, kami memiliki tugas yang sekilas diselesaikan dengan cukup sederhana - perlu membuat salinan dari satu chip memori flash khusus - mDOC H3 SDED5-512M.
Chip ini dikembangkan lebih dari sepuluh tahun yang lalu. Inilah pdf
(1) dengan uraiannya. Di bawah ini adalah kutipan singkat dari pengumuman berbahasa Rusia:
... msystems telah menyiapkan keluarga mDOC untuk digunakan sebagai solid state drive ...
Perangkat lunak TrueFFS bawaan, yang bertugas mengelola memori flash mDOC H3, menjalankan modul pengontrolnya sendiri, yang mengubahnya menjadi unit lengkap yang berdiri sendiri, mudah ditambahkan ke berbagai perangkat genggam ....Dalam daftar SuperPro 6100 yang didukung oleh programmer, chip tersebut terdaftar dan untuk itu bahkan menemukan adaptor DX5057 yang sesuai. Tetapi setelah merakit seluruh desainer dan memilih chip ini, program menunjukkan gambar berikut dengan item misterius "DimageMain", deskripsi yang tidak ditemukan baik dalam dokumentasi atau di situs web pengembang.
Setelah mencoba melakukan operasi "DimageMain" tanpa chip di adaptor, sebuah peringatan diterima tentang ketidakhadirannya, dan setelah mengkonfirmasi fakta ini, program menampilkan informasi berikut:
Dilihat oleh tulisan "mDOC H3 Write Image", "Image" adalah gambar yang dapat ditulis ke dalam chip menggunakan programmer ini. Tetapi bagaimana cara membaca gambar ini dari microcircuit yang sudah direkam, bagaimana cara menghapusnya, dll?
Beberapa saat kemudian di Internet saya menemukan file
(2) dari perusahaan Dataman, yang secara parsial memperlihatkan struktur gambar di atas dan menyebutkan perangkat lunak untuk pembuatannya.
Dengan demikian, upaya lebih lanjut ditujukan untuk mencari utilitas dari M-Systems yang dijelaskan dalam dokumen Software Utilities for TrueFFS 7.1
(3) .
Permintaan untuk dukungan teknis dari "M-Systems", yang sekarang "SanDisk", tidak memberikan hasil - tidak ada jawaban.
Di Internet, adalah mungkin untuk menemukan hanya utilitas lama yang tidak mendukung versi chip H3. SDK lengkap dari SanDisk juga tidak ditemukan, hanya "fragmen" -nya
(5) dalam hal mengimplementasikan driver untuk Linux.
Saat kami mempelajari informasi yang terakumulasi, baris berikut menarik perhatian file Dataman: "File gambar dapat dibuat dengan utilitas SanDisk Docshell atau PG4UW."
Utilitas SanDisk Docshell tidak menemukan diri mereka dengan cara apa pun, jadi saya harus mencari tahu bagaimana PG4UW
(4) bekerja dengan chip ini. Mereka tidak menanamkan seluruh SanDisk SDK dalam perangkat lunak mereka, tetapi menciptakan plug-in dengan metode yang diekspor yang diperlukan agar utilitas TrueFFS berfungsi, yang kemudian dipanggil dari program mereka.
Kami akan pergi dengan cara yang sama.
Membuat modul perangkat lunak Anda sendiri
Berikut ini adalah penafian tanggung jawab, yaitu bahwa penulis tidak memikul tanggung jawab apa pun atas penggunaan materi oleh Anda oleh artikel ini.
Dengan kata lain - hanya Anda sendiri yang akan bertanggung jawab atas tindakan Anda, yang Anda dapat didorong untuk membiasakan diri dengan materi ini.
Kami setuju, seperti dalam artikel sebelumnya, untuk memanggil pemrogram programmer dari SuperPro 6100 hanya "perangkat lunak", dan komputer tempat program ini bekerja adalah "host". Sekarang kami memiliki program lain yang berfungsi dalam programmer itu sendiri. Kami akan menyebutnya "modul perangkat lunak".Manual Perangkat Lunak untuk TrueFFS 7.1 manual
(3) menjelaskan fungsi yang diterapkan oleh utilitas DOCSHELL, yang termasuk dalam empat kategori berikut:
- DFORMAT - utilitas untuk memformat perangkat mDOC.
- DINFO - utilitas untuk mendapatkan berbagai informasi tentang perangkat mDOC dan bagian yang ada di dalamnya.
- DIMAGE - utilitas untuk membaca, menulis, dan membandingkan perangkat mDOC gambar.
- SPLITIMAGE - utilitas untuk membagi gambar perangkat mDOC menjadi beberapa bagian.
Utilitas DOCSHELL dimaksudkan untuk baris perintah, oleh karena itu, antarmuka untuk berkomunikasi dengan plugin DOCSHELL.dll diimplementasikan menggunakan mekanisme perintah teks yang sama.
Sebelum memulai komunikasi dengan "DOCSHELL.dll", perlu untuk memanggil masing-masing metode yang diekspor dan meneruskannya ke fungsi yang diimplementasikan dalam perangkat lunak untuk pertukaran fisik dengan chip mDOC. Ini adalah menulis dan membaca (dalam beberapa modifikasi), serta metode untuk menerima pesan teks tentang kemajuan operasi saat ini dan metode untuk bekerja dengan file gambar.
Salah satu metode mainEntry yang diekspor sebagai argumen input
menerima string ASCIIZ - perintah yang dijelaskan dalam manual Software Utilities for TrueFFS 7.1
(3) .
Parser di dalam "DOCSHELL.dll" memproses perintah yang diterima dan, tergantung pada perintah dan argumennya, memanggil satu atau beberapa metode lain dari perangkat lunak pemrogram utama menggunakan pointer yang diterima selama inisialisasi awal.
Perangkat lunak untuk programmer, kami memutuskan untuk menulis sendiri. Pendekatan ini, di satu sisi, menyelamatkan kita dari "penggalian" dalam file asli untuk mematuhi perjanjian pertukaran informasi antara host dan programmer, dan di sisi lain, itu sangat memudahkan proses debugging, yang, jika modul diintegrasikan ke dalam perangkat lunak asli, membuatnya tidak mungkin dalam beberapa aspek atau sangat sulit.
Antarmuka pengguna asli untuk programmer ditulis dalam C # di Visual Studio 2017. Sumber
(6) disertakan.
Tentu saja, fungsional ada di tempat pertama, jadi tidak ada pertanyaan tentang gertakan penampilan, serta teks dari kode sumber itu sendiri. Oleh karena itu, "desain" minimalis program adalah sebagai berikut.
Di bagian atas jendela utama (dan satu-satunya) adalah menu untuk tombol-tombol yang dapat Anda tetapkan fungsi sewenang-wenang. Item menu "XILINX" akan dijelaskan nanti.
Di bawah ini adalah dua jendela. Bagian atas menampilkan pesan yang dikirim dari program ke plugin "DOCSHELL.dll" dan diterima darinya.
Di jendela bawah, Anda dapat mengetik perintah yang Anda butuhkan dan klik dua kali pada baris yang sesuai.
Ketika program dimulai, beberapa perintah akan ditampilkan di dalamnya.
Jika Anda tiba-tiba mulai bekerja dengan chip nyata - hati-hati, karena tidak ada peringatan bahwa Anda mungkin kehilangan semua data saat memformat, dll. Program tidak diimplementasikan.File "DOCSHELL.dll" ditemukan di direktori dengan program PG4UW
(4) yang diinstal dari "Dataman" (dimungkinkan dari "Elnec").
Untuk dapat menggunakan DLL pihak ketiga dalam program Anda, Anda memerlukan file header dengan deskripsi metode yang diekspor dan argumen mereka. Karena ketidakhadirannya, saya harus memulihkan informasi ini sendiri. Metode untuk pemulihan tersebut berada di luar cakupan artikel ini, sehingga argumen dari metode yang diekspor dapat ditemukan di sumber terlampir.
Dengan antarmuka pengguna dalam hal interaksinya dengan plugin, masalahnya menjadi agak lebih jelas. Sekarang Anda dapat melanjutkan ke implementasi komunikasi dengan sirkuit mikro di tingkat fisik agar dapat menjalankan perintah baca / tulis dari / ke mDOC yang diterima dari plugin.
Modul program untuk programmer ditulis dalam bahasa C dalam IDE "IAR Embedded Workbench for ARM". Sumber
(7) terlampir.
Proses debug dilakukan dengan menggunakan JTAG J-Link debugger, yang terhubung ke programmer melalui konektor JTAG yang dipasang di sisi case dan dihubungkan ke motherboard dengan kabel datar.
JTAG debugger J-Link v9 dibeli di Aliexpress. Driver yang diinstal dengan "IAR Embedded Workbench for ARM" bekerja sangat baik dengannya, dan bahkan memperbarui firmware asli dari SEGGER berhasil.Secara struktural, programmer dibuat dalam bentuk delapan papan yang terletak satu di atas yang lain dan dihubungkan bersama oleh konektor.
Konverter DC-DC yang dapat diatur terletak di papan terendah untuk menghasilkan beberapa voltase yang diperlukan untuk bekerja dengan berbagai sirkuit memori.
Di atasnya adalah motherboard tempat mikrokontroler ARM ATMEL AT91SAM9G20, SDRAM, SPI FLASH dengan firmware, ID chip AE801 dengan model programmer dan nomor seri, chip USB ISP1582, konverter digital-to-analog TLC7226 untuk manajemen tegangan konverter DC-DC, sejumlah chip lain dan konektor eksternal untuk menghubungkan catu daya dan kabel USB untuk menghubungkan ke host.
Pada papan bawah ketiga adalah chip XILINX XC2S50E, yang mengontrol kaki-kaki chip pada adaptor yang terhubung ke programmer selama prosedur baca / tulis, dll.
Pada lima papan lainnya, register dan rakitan yang dimuat secara berurutan terhubung ke outputnya dengan kunci transistor, yang memungkinkan untuk menerapkan sirkuit mikro ke satu atau beberapa kaki chip yang dibentuk oleh konverter tegangan DC-DC,
termasuk "bumi". Karena register yang mengendalikan kunci transistor dimuat secara berurutan, dan jumlah kaki yang dikontrol dalam adaptor dapat mencapai 144, dibutuhkan waktu yang cukup lama untuk memuat semua blok kunci. Oleh karena itu, dengan bantuan sakelar transistor, hanya level statis yang diumpankan ke sirkuit mikro: ground, power, dll. Dan dengan XILINX - dinamis: alamat, data, CS, OE, RD, WR, dll.
Untuk memajukan lebih lanjut, diperlukan, setidaknya, untuk memiliki sarana untuk membuat firmware untuk mikrokontroler XILINX XC2S50E dan diagram sirkuit, jika bukan dari keseluruhan pemrogram, maka setidaknya sebagian dari CPU - FPGA - adaptor - soket.
Sedangkan untuk IDE untuk XILINX Spartan-IIE, saya harus menggunakan versi lama dari ISE 10.1, karena semua IDE berikutnya tidak mendukung model FPGA Spartan-II.
Situasi dengan diagram rangkaian ternyata lebih rumit. Untuk mengidentifikasi senyawa yang menarik bagi kami, kami harus "menghapus" prosesor U4 dan XILINX U12 dari papan untuk mendapatkan akses ke bantalan di bawah kasus BGA mereka, karena tidak semuanya memiliki saklar ke sisi sebaliknya.
Tuan rumah berkomunikasi dengan programmer melalui USB melalui beberapa titik akhir (Endpoint). Tuan rumah selalu bertindak sebagai tuan rumah. Melalui salah satu titik akhir, tuan rumah mengirimkan perintah ke pemrogram dan melalui itu menerima konfirmasi,
melalui yang lain mereka saling bertukar data.
Perintah parsing dari host dalam modul program dilakukan dalam metode USB_ReceiveBuf_EP1RX_Parse ().
Paket perintah dijelaskan oleh struktur CMD_PROG dan terdiri dari beberapa bidang. Jika bidang Cmd berisi 1, maka ini adalah perintah untuk bekerja dengan sirkuit mikro dan bidang ProgProcNum dalam kasus ini adalah indeks dalam larik _progProcedures dari struktur PROG_PROC, di mana salah satu bidang penunjuk ke perintah yang akan dieksekusi disimpan.
Dalam direktori dengan program yang diinstal "SUPERPRO 6100N" ada subdirektori "\ lib". Itu dengan ekstensi "* .bin" menyimpan file firmware XILINX untuk semua jenis chip yang didukung oleh programmer. Di antara mereka ada dua firmware universal untuk memeriksa kontak kaki-kaki sirkuit mikro dengan kontak soket pada adaptor.
Ini adalah "GENERAL ~ .BIN" dengan pull-up internal untuk semua kaki pull-up XILINX dan "GENERAL_.BIN" dengan pull-down pull internal.
Memeriksa kontak kaki mikrosirkuit dilakukan dalam metode SOCKET_CkeckInsertIC () pada modul perangkat lunak sebagai berikut.
Pertama, firmware βGENERAL_.BINβ dimuat ke XILINX dan dengan bantuannya semua kaki FPGA yang terhubung ke soket dikonfigurasikan untuk output dan logis β1β disediakan untuk mereka. Kemudian, pada gilirannya, setiap leg FPGA dikonfigurasi ulang untuk input, tingkat logis dibaca dari itu, dan kemudian "1" lagi output ke leg ini.
Jika kaki mikrosirkuit memiliki kontak listrik dengan kaki soket yang sesuai, maka "1" harus dibaca darinya (melalui dioda pelindung internal mikrosirkuit dari semua kaki lainnya). Dan dengan tidak adanya kontak, karena fakta bahwa semua pin FPGA ditarik ke tanah, "0" akan dibaca dari input ini. Setelah itu, berbagai level logis yang dibaca dengan cara ini dikirim ke host dan diproses di sana. Selanjutnya, pelaksanaan operasi yang ditentukan berlanjut, atau sebuah pesan ditampilkan tentang non-VKontakte dari kaki-kaki yang sesuai dari rangkaian mikro dalam soket.
Setelah berhasil melewati tes ini, tuan rumah mengirimkan firmware untuk XILINX yang sesuai dengan chip yang dipasang di adaptor ke programmer.
Mengkompilasi program untuk FPGA dalam ISE 10.1 (eksekusi berurutan dari prosedur sintesis (Synthesize), implementasi desain (Implement Design) dan pembuatan file pemrograman (Generate Programming File)) menciptakan file konfigurasi biner "xeltek.bin" dari 78756 byte di direktori proyek.
Untuk ini, dalam properti dari proses "Hasilkan File Pemrograman" di jendela "Proses" dalam kategori "Opsi Umum", dua opsi harus ditetapkan: "Buat File Bit" dan "Buat File Konfigurasi Bibary".Tidak diketahui karena alasan apa, tetapi programmer XELTEK memutuskan untuk memodifikasi file yang diperoleh dengan memantulkan semua bit dalam setiap byte.
Jika karena alasan tertentu Anda perlu "mirror" file Anda sendiri dengan cara ini, atau "mirror" file dari direktori "\ lib" kembali ke tampilan normal, dalam perangkat lunak dalam menu "XILINX" ada untuk tujuan ini item "Bitstream Converter" (di akhir nama file yang dihasilkan digarisbawahi).
Untuk bekerja dengan chip SDED5 pada level fisik, empat metode berikut diimplementasikan dalam modul perangkat lunak:
- PROGPROC_FLWRITE_IO_WORD () - merekam kata (16 bit) di alamat yang ditentukan
- PROGPROC_FLREAD_IO_WORD () - baca kata (16 bit) di alamat yang ditentukan
- PROGPROC_hal_blk_write_nor () - tulis satu atau lebih sektor (masing-masing 512 byte) di alamat yang ditentukan
- PROGPROC_hal_blk_read_nor () - baca satu atau lebih sektor (masing-masing 512 byte) di alamat yang ditentukan
Untuk berinteraksi dengan FPGA XILINX dalam firmware kami, kami mengidentifikasi empat register (port I / O, dijelaskan dalam file common.h untuk sumber ARM).
- _IC_ADDR (0x30000010)
- _IC_DATA (0x30000012)
- _IC_CTRL (0x30000014) // Keluar: 0 - KAMI, 1 - 0E, 2 - CE, 3 - RSTIN; Dalam: 0 - SIBUK
- _IC_ENABLE (0x30000016) // In: 7 - Izin kerja (0 - aktif, 1 - semua kaki pada soket di Z)
_IC_ADDR dan _IC_DATA adalah alamat 16-bit dan register data untuk chip yang dapat diprogram SDED5;
_IC_CTRL - register kontrol 8-bit melalui mana sinyal WE, OE, CE dan RSTIN diatur dan sinyal BUSY dibaca dari SDED5.
Modul perangkat lunak asli menggunakan alamat dari 0x30000000 hingga 0x3000000E untuk berkomunikasi dengan FPGA. CPLD dengan prasasti XELTEK dipasang sebagai decoder alamat di programmer, dan karena kami tidak tahu firmware-nya, kami menggunakan alamat dari 0x30000010 untuk berjaga-jaga jika ada kemungkinan konsekuensi yang tidak diharapkan dari memanifestasikan logika perilaku orang lain ketika menggunakan alamat "standar".
Setelah memuat firmware-nya ke dalam FPGA, semua output FPGA yang terhubung ke kaki-kaki sirkuit mikro dalam soket berada dalam status Z dan untuk mulai bekerja dengannya, Anda harus mengaktifkan resolusi dengan menulis nol hingga bit ketujuh dari register _IC_ENABLE.
Algoritma dari keseluruhan sistem dapat terlihat sebagai berikut.
- Setelah memulai perangkat lunak pada host, ia memeriksa apakah ada koneksi ke programmer melalui USB dan menampilkan pesan yang sesuai di bilah status di bagian bawah jendela utama
(programmer dapat dihubungkan setelah dimulainya program). - Pengguna memilih jenis chip yang akan digunakannya untuk bekerja.
- Dalam database (dalam kasus paling sederhana, hanya dalam file), rangkaian mikro yang dipilih cocok dengan jenis adaptor yang diperlukan dan permintaan dikirim ke programmer untuk jenis adaptor yang dipasang di dalamnya.
- Programmer menanyakan jenis adaptor dan mengirimkan informasi ini kembali ke tuan rumah, di mana informasi ini dibandingkan dengan yang ditemukan dalam database, dan jika jenis adaptor cocok, pekerjaan berlanjut.
- Untuk setiap jenis sirkuit mikro yang dipilih dalam perangkat lunak, menu yang sesuai harus ditampilkan dengan perintah yang tersedia untuk sirkuit mikro tersebut (baca, tulis, periksa kebersihan, perbandingan, dll.).
- Ketika Anda memilih item menu untuk bekerja dengan sirkuit mikro, perintah yang sesuai dikirim ke programmer, setelah itu programmer terlebih dahulu memeriksa kontak listrik dari kontak soket dengan kaki sirkuit mikro, dan kemudian, jika berhasil, jalankan perintah ini.
Dalam kode sumber yang dilampirkan pada artikel, untuk menyederhanakan tugas, poin dari inklusif kedua ke kelima tidak diterapkan.Ringkasan
Kami tidak dihadapkan dengan tugas mengintegrasikan modul perangkat lunak ke dalam perangkat lunak asli,
Oleh karena itu, materi yang dijelaskan dalam artikel ini tidak mengklaim sebagai solusi lengkap.
Kami berharap bahwa informasi yang disajikan di sini akan berguna untuk kategori pembaca tertentu, dan sejauh kemampuan kami dan ketersediaan waktu luang, kami akan mencoba menjawab pertanyaan Anda.
Terima kasih atas minat Anda!
Sumber daya
1.
PDF - mDOC H3 Embedded Flash Drive (EFD) menampilkan Perangkat Lunak Manajemen Flash TrueFFS Tertanam2.
PDF - Memprogram Memories Flash H3 mDOC Menggunakan Pemrogram Perangkat Dataman3.
PDF - Software_Utilities_TrueFFS_7.14.
Perangkat Lunak Kontrol Dataman - PG4UW5.
Implementasi driver mDOC H3 untuk Linux (kinerja tidak diuji)6.
Host file sumber programmer (Visual Studio 2017).7.
Sumber file dari modul perangkat lunak (IAR Embedded Workbench for ARM v8.30.1).8.
Sumber file untuk FPGA XILINX XC2S50E (XILINX ISE 10.1).