Jeffrey Cross
Jeffrey Cross

Bermula dengan Debugging Dalam Sirkuit

Jika anda membuat (atau membongkar) apa-apa yang rumit, anda mungkin merindukan pandangan yang lebih baik di dalamnya. Satu osiloskop atau penganalisis logik boleh menjadi alat penting untuk elektronik digital, dan juga menghairankan berguna untuk perisian terbenam. Kod anda juga boleh membantu, melalui mesej yang dilog masuk ke fail atau port siri. Tetapi kadang-kadang anda benar-benar memerlukan pandangan interaktif dalaman anda, dan pada sistem tertanam ini bermakna anda memerlukan debugger dalam litar (ICD).

Sesetengah daripada anda sudah mengetahui tentang debugging tahap sumber dari konteks lain, seperti debugging aplikasi desktop dalam Xcode atau Visual Studio, menggunakan titik putus dan fungsi satu langkah untuk skrip dalam konsol pelayar web, atau menggunakan debugger mandiri seperti GNU Debugger, WinDbg , atau LLDB. Sekiranya anda lebih banyak digunakan untuk Arduino, bagaimanapun, alat semacam ini mungkin baru kepada anda.

Debugger umumnya merujuk kepada sistem yang terdiri daripada perisian debugging pada PC anda, mungkin perisian pada cip yang anda uji, dan biasanya beberapa perkakasan di dalam dan di luar cip. Banyak mikrokontroler mempunyai debugger atas (OCD) yang dibakar ke dalam silikon.

Debugger boleh melangkau kod satu baris atau arahan pada satu masa sambil menunjukkan kandungan pembolehubah, dan boleh melihat atau mengedit memori. Anda boleh menjalankan program anda pada kelajuan penuh sehingga ia mencapai titik pemecahan - jeda yang disengajakan di dalam kod anda - di mana ia berhenti dan penghapus debugger. Dengan debugger yang dilampirkan, anda juga boleh berinteraksi dengan periferal pemproses, program beban ke memori flash, dan membaca kandungan flash (kecuali perlindungan telah disediakan untuk mengelakkan ini!).

Apakah Pelayan Debug?

Aplikasi debugger pada PC anda menyimpan peta memori terperinci untuk kod anda, tetapi anda juga memerlukan beberapa perkakasan - atau perisian - pada mikrokontroler anda untuk menyediakan untuk membaca dan menulis memori, menjebak titik putus, dan menjalankan arahan dengan cara yang terkawal. Satu penyelesaian adalah pelayan debug.

Debugger GNU (GDB) mendefinisikan protokol pelayan yang mudah untuk digunakan melalui port atau rangkaian siri, termasuk localhost. Pelaksanaan gdbserver ini wujud untuk sistem operasi yang berbeza. Secara tradisional ini adalah komponen perisian sahaja, tetapi protokol kini lazimnya digunakan sebagai pintu masuk ke peranti perkakasan atau emulator.

Begitu juga pilihan IDE anda sekarang jauh melebihi baris arahan GDB asas, dengan alat seperti Eclipse, Visual Studio Code, dan IDA Pro yang menyokong protokol GDB yang sama.

Pelabuhan Debug Perkakasan

Ia akan mudah jika ciri debug yang dibina ke dalam silikon secara langsung serasi dengan protokol GDB, tetapi OCD dioptimumkan untuk kos dan impak minimum pada reka bentuk pemproses keseluruhan. Biasanya debug akan disediakan melalui port yang sama yang digunakan untuk ingatan flash pengaturcaraan. Sesetengah cip menggunakan protokol khusus vendor, tetapi dua piawaian industri bernilai mengetahui: JTAG dan SWD.

Apapun protokol, beberapa perkakasan diperlukan untuk menukar kembali ke USB. Pelbagai penyesuai boleh digunakan sebagai pelayan debug melalui perisian OpenOCD sumber terbuka, walaupun dengan hookups anda mungkin sudah seperti GPIOs Raspberry Pi atau pelarian serial FTDI. Dan Black Magic Probe (lihat "Squashers Bug") adalah peranti perkakasan terbuka yang mengimplementasikan pelayan debug dalam firmware, menyediakan port bersiri maya yang dilampirkan terus ke GDB.

JTAG: Standard asal - Ia bukan nama yang baik. Seperti JPEG, ia tidak menyatakan apa piawaian itu, hanya yang merancangnya: Kumpulan Tindakan Ujian Bersama. Ia direka pada pertengahan hingga akhir 1980-an dan diseragamkan pada tahun 1990, sebagai tindak balas kepada perhimpunan papan litar kompleks terlalu sukar untuk diuji secara automatik.

Secara elektrik, standard JTAG (IEEE 1149.1) adalah satu siri daftar anjakan yang boleh anda rantai daisy antara peranti. Anda boleh melampirkan debugger anda terus ke satu peranti, atau ke rantaian peranti dalam cip tunggal atau merentasi beberapa cip. JTAG kelihatan dengan hebat seperti SPI, dengan jam yang dikongsi dan input data dan pin output satu hala. Tetapi kemudian anda melihat PIN Ujian Mod Pilih (TMS). Adakah ia cip-pilih? Tidak. Di sinilah JTAG mula mendapat terutamanya tahap rendah. Ia sebenarnya corak sedikit yang memacu mesin negara yang ditentukan oleh piawaian, yang pembuat cip membina untuk membuat mesin negara JTAG mereka sendiri.

Piawaian JTAG menentukan keadaan untuk memilih peranti dan membaca kod ID 32-bitnya; dan protokol imbasan sempadan JTAG alamat pin pada IC untuk ujian elektrik yang dipasang PCB. Di luar ini, ia mendapat peranti khusus: FPGA dan pemproses dan kenangan masing-masing mempunyai protokol mereka sendiri. Pemecahan ini mencerminkan pemecahan yang anda lihat dalam keseluruhan ruang alat tertanam!

Dengan pemproses ARM moden, sekurang-kurangnya, piawaian memberi kami sokongan. Spesifikasi Antara Muka Debug ARM menerangkan Port JTAG Debug piawai dengan cara untuk mengakses memori, periferal, dan keadaan CPU. Dari sana, daftar memori dipetakan dapat mengubah titik putus dan mengawal CPU.

SWD: Pendatang baru - Apabila ARM menyeragamkan cara mengakses memori dan ciri debug CPU di atas JTAG, mereka juga mengambil peluang untuk membangunkan protokol alternatif baru: Serial Wire Debug (SWD), yang menggunakan pin data dwiarah tunggal dan paket moden struktur. Perkiraan pin yang dikurangkan membuat SWD ideal untuk pemproses terbenam yang lebih kecil seperti siri ARM Cortex-M yang popular, dan ia boleh berkongsi pin dengan JTAG apabila pemproses menyokong kedua-dua pilihan.

Itu mengenai semua yang anda perlu tahu tentang SWD itu sendiri, jika anda hanya merancang untuk menghidupkan port debug pada pemproses dan menjalankan alat peringkat tinggi seperti GDB. Butiran untuk mengkonfigurasi OpenOCD, GDB, dan penyesuai debug spesifik anda akan berbeza dengan platform, jadi anda perlu mencari fail konfigurasi yang disertakan dengan OpenOCD yang paling sesuai dengan keadaan anda sebagai titik permulaan.

Sekiranya anda ingin memahami cara penyahpepijatan dan bagaimana pemproses berfungsi pada tahap yang lebih mendalam, port debug adalah tempat yang sangat baik untuk mula menggali!

  • »Untuk maklumat lanjut mengenai penyahpepijatan ARM:
  • »Saya menulis pelayar memori SWD berasaskan web mudah untuk ESP8266 dan artikel dalam PoC || GTFO 10.5.
  • »Mencari pelaksanaan sumber terbuka yang lebih lengkap SWD, cuba Black Magic Probe atau Free-DAP.

Kongsi

Meninggalkan Komen