Tools for Embedded Developers: USB CMSIS-DAP Debug Probe and Logic Analyzer

<rawat.s>
6 min readMar 4, 2021

บทความนี้เป็นการทดลองใช้งานอุปกรณ์สองประเภทที่ใช้ไมโครคอนโทรลเลอร์เป็นตัวประมวลผลหลัก และใช้งานเป็นเครื่องมือทางฮาร์ดแวร์ในการทดสอบการทำงานของระบบสมองกลฝังตัว ได้แก่ อุปกรณ์ CMSIS-DAP Debug Probe และอุปกรณ์ Digital Logic Analyzer ที่มีลักษณะแบบ Portable มีขนาดเล็ก เสียบใช้งานร่วมกับคอมพิวเตอร์ผ่านทางพอร์ต USB

โดยทั่วไปเมื่อพูดถึง เครื่องมือที่เป็นฮาร์ดแวร์สำหรับนักพัฒนาระบบอิเล็กทรอนิกส์หรือระบบสมองกลฝังตัว เราก็จะนึกอุปกรณ์ เช่น

  • มัลติมิเตอร์แบบดิจิทัล (DMM: Digital Multimeters) เช่น สำหรับวัดแรงดันไฟฟ้าหรือกระแสไฟฟ้า
  • เครื่องวัดสัญญาณหรือออสซิลโลสโปคแบบดิจิทัล (Digital Oscilloscope) เช่น สำหรับดูคลื่นสัญญาณไฟฟ้าที่มีการเปลี่ยนแปลงของแรงดันไฟฟ้าในเชิงเวลา
  • เครื่องกำเนิดสัญญาณเพื่อใช้ในการสร้างสัญญาณทดสอบ (Signal / Function Generator)
  • เครื่องวิเคราะห์สัญญาณดิจิทัล (Digital Logic Analyzer)
  • อุปกรณ์สำหรับโปรแกรมข้อมูลจากไฟล์เฟิร์มแวร์ไปยังหน่วยความจำแบบแฟลช (Flash Memory) ภายในชิปไมโครคอนโทรลเลอร์ หรือใช้สำหรับการดีบักโปรแกรมของไมโครคอนโทรลเลอร์

ในบทความนี้จะกล่าวถึงการทดลองใช้งานอุปกรณ์ 2 ชนิด และเป็น Open Source Hardware (OSHW) ได้แก่

  • Muse Lab’s nanoDLA v1.2 Logic Analyzer
  • Muse Lab’s nanoDAP STM32F103C8T8-based CMSIS-DAP Debug Probe

Portable USB Logic Analyzer: nanoDLA v1.2

อุปกรณ์นี้ใช้งานกับคอมพิวเตอร์ โดยเสียบเข้ากับพอร์ต USB ของคอมพิวเตอร์ผู้ใช้ ภายในมีไมโครคอนโทรลเลอร์ หรือชิปตระกูล Cypress EZ-USB FX2(LP) — CY7C68013A มีความสามารถรับส่งข้อมูลผ่านทาง USB 2.0 ได้ และผู้ผลิตอุปกรณ์ได้เลือกใช้เฟิร์มแวร์ที่มีชื่อว่า Sigrok’s Fx2lafw และเป็น Open Source เพื่อทำให้อุปกรณ์กลายเป็น USB Logic Analyzer แบบ 8 ช่องสัญญาณอินพุต และมีอัตราการสุ่มสัญญาณสูงสุด 24 MHz (Sampling Rate)

รูป: อุปกรณ์ nanoDLA v1. 2 Logic Analyzer

ระดับแรงดันไฟฟ้าในการแบ่งลอจิก (Logic Levels) Low หรือ High มีดังนี้

  • Low level: -0.5V ..0.8V
  • High level: 2.0V .. 5.25V

ข้อมูลของอุปกรณ์โดยผู้ผลิต สามารถดูได้จาก https://github.com/wuxx/nanoDLA/blob/master/README_en.md

Schematic: https://github.com/wuxx/nanoDLA/blob/master/hardware/v1.1/nanoDLA.pdf

ในส่วนของซอฟต์แวร์สำหรับผู้ใช้ ก็มีซอฟต์แวร์ประเภท Open Source เช่น sigrok’s PulseWave (สำหรับระบบปฏิบัติการ Windows, Linux, Mac OSX) สำหรับตั้งค่าการใช้งาน รับข้อมูลที่ได้จากอุปกรณ์ และนำมาแสดงผลเป็นรูปคลื่นสัญญาณ รวมถึงความสามารถในการวิเคราะห์รูปแบบการสื่อสารข้อมูลแบบต่าง ๆ (Protocol Decoder / Analyzer) เช่น การสื่อสารข้อมูลแบบ UART, I2C, SPI, I2S, CAN, Modbus, JTAG เป็นต้น

ผู้ที่ใช้ระบบปฏิบัติการ Windows สามารถดาวน์โหลดโปรแกรม PulseWave ได้จากเว็บไซต์ต่อไปนี้ https://sigrok.org/wiki/Downloads เช่น ไฟล์สำหรับติดตั้งใช้งาน (32 บิต หรือ 64 บิต)

สำหรับระบบปฏิบัติการ Windows (เช่น Windows 10) เมื่อได้ติดตั้งโปรแกรมดังกล่าวแล้ว ในครั้งแรกของการใช้งานจะต้องเรียกใช้โปรแกรม Zadig (PulseView) ที่มาพร้อมกับโปรแกรม PulseView เพื่อเลือกใช้ USB Driver สำหรับอุปกรณ์ดังกล่าว (fx2lafw) ให้เป็น WinUSB ตามรูปตัวอย่าง แล้วกดปุ่ม Install Driver

จากมาลองใช้งาน PulseView (Windows) ร่วมกับอุปกรณ์ nanoDLA v1.2

เมื่อเปิดโปรแกรมใช้งาน จะเห็นหน้าต่างหลัก (Main Window) ตามรูปตัวอย่าง และสังเกตว่า มีชื่อ “sigrok FX2LA (8ch)” เป็นอุปกรณ์ที่เชื่อมต่ออยู่

ตัวอย่างแรกเป็นการวัดสัญญาณ TRIG และ ECHO ของโมดูล Ultrasonic Sensor โดยใช้บอร์ด Raspberry Pi Pico สร้างสัญญาณพัลส์ที่ขา TRIG แล้ววัดความกว้างของพัลส์ที่ขา ECHO เพื่อนำไปคำนวณระหว่างจากวัตถุกีดขวาง

ในตัวอย่างนี้ใช้ช่องสัญญาณ D0 และ D1 สำหรับสัญญาณ TRIG และ ECHO ตามลำดับ

แนะนำให้ตั้งค่าเพื่อกำหนดเงื่อนไขเริ่มต้นการชักตัวอย่าง (Signal Sampling) ในกรณีนี้คือ เมื่อเกิดเหตุการณ์ที่เป็นการเปลี่ยนแปลงของสัญญาณจาก Low เป็น High ที่ช่องสัญญาณ D0 จึงจะเริ่มบันทึกข้อมูล และให้ตั้งค่า Sampling Rate เท่ากับ 1 MHz (1 microsecond resolution)

เมื่อกดปุ่มรัน และเมื่อมีเหตุการณ์ตามที่ได้กำหนดไว้เกิดขึ้น ก็จะเริ่มบันทึกข้อมูลและส่งมายังคอมพิวเตอร์เพื่อแสดงผล ตามรูปตัวอย่าง และเราก็สามารถวัดความกว้างของพัลส์ที่ขา TRIG ได้ โดยใช้เคอร์เซอร์ (A และ B ในรูป)

หรือจะวัดความกว้างของพัลส์ที่ขา ECHO (D1) ก็ทำในลักษณะเดียวกัน (จากรูปตัวอย่าง วัดความกว้างได้เท่ากับ 1119 usec)

อีกตัวอย่างหนึ่งเป็นการวัดสัญญาณบัสที่เรียกว่า I2C ซึ่งใช้สัญญาณ 2 เส้น คือ SDA และ SCL ในตัวอย่างนี้ เราเลือกใช้ช่องอินพุต D0 สำหรับ SDA และ D1 สำหรับ SCL ตามลำดับ

รูปคลื่นสัญญาณที่ได้เกิดจากการเชื่อมต่อระหว่างบอร์ด Raspberry Pi Pico สื่อสารข้อมูลด้วยบัส I2C กับโมดูลเซ็นเซอร์แสง BH1750 (I2C address = 0x23) และจะเห็นได้ว่า เราสามารถใช้ PulseView ในีการวิเคราะห์ข้อมูลตามรูปแบบของ I2C ได้

รูป: การต่อวงจรเพื่อทดลองวัดสัญญาณ I2C

การทดลองใช้งาน PulseView สำหรับ Raspberry Pi

ถัดไปมาลองใช้อุปกรณ์ nanoDLA Logic Analyzer ร่วมกับซอฟต์แวร์ PulseView สำหรับบอร์ด Raspberry Pi 4 (Raspbian OS)

ทำคำสั่งเพื่อติดตั้ง sigrok-firmware-fx2lafw และโปรแกรม pulseview

$ sudo apt install sigrok-firmware-fx2lafw pulseview

จากนั้นให้เสียบอุปกรณ์เข้าที่พอร์ต USB ของบอร์ด Raspberry Pi (คอมพิวเตอร์ของผู้ใช้) แล้วลองทำคำสั่ง lsusb เพื่อดูว่า มองเห็นอุปกรณ์หรือไม่ (ซึ่งจะตรงกับ idVendor=1d50, idProduct=608c)

$ lsusb | grep "1d50:608c"
Bus 001 Device 079: ID 1d50:608c OpenMoko, Inc. Fx2lafw

สร้างไฟล์ใหม่สำหรับ udev เช่น 55-fx2lafw.rules ภายใต้ไดเรกทอรี /etc/udev/rules.d/ โดยใช้คำสั่ง nano

$ sudo nano /etc/udev/rules.d/55-fx2lafw.rules

แล้วใส่ข้อความดังนี้ และบันทึกการแก้ไขลงไฟล์ (Ctrl+S, Ctrl+X)

# sigrok FX2 8ch
SUBSYSTEM=="usb", ATTR{idVendor}=="1d50", ATTR{idProduct}=="608c", MODE="0664", GROUP="plugdev"

จากนั้นทำคำสั่งเพื่อให้ udev อัปเดตและใช้งานไฟล์ดังกล่าว

$ sudo udevadm control --reload-rules && sudo udevadm trigger

เปิดโปรแกรม pulseview โดยทำคำสั่ง

$ pulseview &

เข้าสู่หน้าต่างหลักของโปรแกรม

เวอร์ชันที่ติดตั้งและได้ทดลองใช้งานคือ PulseView 0.4.1 สำหรับ Raspberry Pi OS

ถัดไปเป็นการเลือกใช้อุปกรณ์ ให้คลิก Dropdown Menu จะมีรายการอุปกรณ์ปรากฏ ให้เลือกตามตัวอย่างในรูป แล้วกดปุ่ม OK

รูป: การเลือกอุปกรณ์ fx2lafw

ถ้าเริ่มต้นการทำงานของอุปกรณ์ Logic Analyzer ให้กดปุ่ม Run หรือถ้าจะกำหนดจำนวนข้อมูล (Samples) และอัตราการชักตัวอย่าง (Sampling Rate) ก็สามารถเลือกได้

ยกตัวอย่างเช่น ถ้าต้องการดูสัญญาณจากวงจรปุ่มกด เมื่อมีการกดปุ่มแล้วปล่อยในช่วงเวลาสัญญาณ สถานะลอจิกปรกติเป็น High และเมื่อกดปุ่มเป็น Low

รูป: คลื่นสัญญาณ (ตั้งค่า Sampling Rate 400kHz)

ถัดไปเป็นตัวอย่างการวิเคราะห์สัญญาณ TX/RX ที่มีการส่งข้อมูลแบบ UART โดยขาสัญญาณ TX และ RX ต่อกับขาอินพุตช่อง D0 และ D1 ของอุปกรณ์ Logic Analyzer

จากรูปตัวอย่างจะต้องมีการตั้งค่าการใช้งานสำหรับ UART Protocol Decoder เช่น การเลือกขาอินพุต อัตราการส่งข้อมูล Baudrate จำนวนบิตต่อหนึ่งเฟรม เป็นต้น

เมื่อลองส่งข้อมูลจากคอมพิวเตอร์และใช้โมดูล USB-to-Serial และวัดสัญญาณด้วย Logic Analyzer ก็จะสามารถมองเห็นลำดับของบิตข้อมูลที่ถูกส่งออกไป ในตัวอย่างนี้เป็นการส่งข้อความ “Hello”

รูป: สัญญาณ TX ที่ได้จากการส่งข้อมูลแบบ UART

การลองใช้งาน PulseView กับ RIGOL DS1054Z

เมื่อได้ลองใช้ซอฟต์แวร์ PulseView ก็เห็นว่า มีรายการอุปกรณ์ประเภทอื่นที่สามารถใช้งานได้ จึงได้ลองใช้งานซอฟต์แวร์นี้กับอุปกรณ์ DS1054Z ซึ่งเป็นเครื่องออสซิลโลสโคปแบบดิจิทัลและมี 4 ช่องอินพุต (4-Channel Digital Oscilloscope) สามารถเชื่อมต่อกับคอมพิวเตอร์ได้สองแบบคือ ทางพอร์ต USB และพอร์ต RJ45 (Ethernet) (ดูตัวอย่างการเชื่อมต่อกับ DS1054Z ในรูปแบบต่าง ๆ ได้จาก http://wiki.yobi.be/wiki/Rigol)

ถ้าลองเสียบสาย USB เชื่อมต่อกับ DS1054Z แล้วลองพิมพ์คำสั่งตรวจสอบดูอุปกรณ์ดังนี้ จะเห็นว่ามีอุปกรณ์ Rigol เชื่อมต่ออยู่

$ lsusb | grep "1ab1:04ce"
Bus 001 Device 022: ID 1ab1:04ce Rigol Technologies

ถัดไปก็สามารถเชื่อมต่อกับอุปกรณ์นี้โดยใช้ PulseView โดยจะต้องเลือกอุปกรณ์ให้ตรงกับ Rigol DS (rigol-ds) แล้วคลิก “Scan for devices using driver above

เมื่อเชื่อมต่อได้แล้ว เลือกช่องสัญญาณ CH1 (ดูได้ทีละช่อง) แล้วกดปุ่ม Run ก็จะได้รูปคลื่นสัญญาณตามตัวอย่าง

รูป: ตัวอย่างสัญญาณทดสอบที่เป็นแบบ Rectangular Waveform (1kHz, 3Vpp)

อุปกรณ์ nanoDAP Debug Probe

บริษัท ARM ได้กำหนดมาตรฐานที่เรียกว่า CMSIS CoreSight Debug Access Port (CMSIS-DAP) สำหรับการโปรแกรมและดีบักการทำงานของไมโครคอนโทรลเลอร์ที่ใช้ซีพียูตระกูล ARM Cortex-M Series

โดยทั่วไปแล้ว จะต้องมีไมโครคอนโทรลเลอร์หนึ่งตัว (เรียกว่า Interface MCU) ที่ทำหน้าที่เชื่อมต่อกับคอมพิวเตอร์ผ่านทางพอร์ต USB และอีกด้านหนึ่งเชื่อมต่อกับไมโครคอนโทรลเลอร์เป้าหมาย (Target MCU) ซึ่งมีสองรูปแบบให้เลือกใช้ได้คือ JTAG และ SWD (Serial Wire Debug) แต่โดยทั่วไปแล้ว ก็มักจะใช้ SWD Interface เพราะใช้สายสัญญาณเพียงสองเส้นคือ SWD-CLK และ SWD-DIO

เฟิร์มแวร์ที่ใช้สำหรับ Interface MCU นั้น เรียกว่า DAPLink Interface Firmware และทางบริษัท Arm ได้แชร์โค้ดเป็น Open Source ไว้ใน Github (https://github.com/ARMmbed/DAPLink)

Arm Mbed DAPLink is an open-source software project that enables programming and debugging application software on running on Arm Cortex CPUs. Commonly referred to as interface firmware, DAPLink runs on a secondary MCU that is attached to the SWD or JTAG port of the application MCU.
[Ref. https://armmbed.github.io/DAPLink/]

การทำงานของ DAPLink มีหลายแบบ เช่น

  • MSC — USB mass storage device ทำให้มองเห็นเป็น Virtual Flash Drive และสามารถลากและวาง (Drag & Drop) ไฟล์เฟิรม์แวร์ไปยังบอร์ดไมโครคอนโทรลเลอร์ได้ง่าย
  • CDC — serial pass-through from the target MCU to the PC เป็นการสร้างช่องทางการสื่อสารข้อมูลสำหรับ Virtual COM port (USB-to-Serial)
  • HID — CMSIS-DAP compliant debug channel ใช้สำหรับการดีบักโค้ดในฮาร์ดแวร์โดยใช้งานกับซอฟต์แวร์ เช่น Arm Keil MDK / uVision หรือ OpenOCD / GDB Debugger
  • WebUSB ช่วยให้เว็บเบราว์เซอร์สามารถเชื่อมต่อกับอุปกรณ์ผ่านทาง USB ได้

ตัวอย่างบอร์ดไมโครคอนโทรลเลอร์ที่ใช้ Arm DAPLink คือ บอร์ด BBC Micro:bit v1.x & v2 ซึ่งทำให้ผู้ใช้สามารถอัปโหลดเฟิร์มแวร์ไปยังไมโครคอนโทรลเลอร์เป้าหมายได้ง่าย (อ้างอิง: https://tech.microbit.org/software/daplink-interface/)

  • บอร์ดไมโครบิต v1.3 / v1.5 ใช้ Freescale KL26Z เป็น Interface MCU และใช้ Nordic Semiconductor nRF51822 (Arm Cortex M0+) เป็น Target MCU
  • บอร์ดไมโครบิต v2 ใช้ Freescale KL27 เป็น Interface MCU และใช้ Nordic Semiconductor nRF52833 (Arm Cortex M4) เป็น Target MCU
https://tech.microbit.org/software/daplink-interface/

ถ้าลองสืบค้นดูในอินเทอร์เน็ต เช่น ใน Github ก็มีโปรเจกต์ที่แชร์โค้ดสำหรับ Arm Mbed DAPLink (เรียกว่า Interface Firmware) เพื่อนำไปใช้กับไมโครคอนโทรลเลอร์ STM32F103C8T6 หรือ STM32F4x1CEU6 เช่น

ดังนั้นถ้ามีบอร์ดไมโครคอนโทรลเลอร์ BluePill STM32F103C8 หรือ BlackPill STM32F4x1CEU6 ซึ่งมีราคาถูก ก็สามารถใช้ได้เช่นกัน

อุปกรณ์ CMSIS-DAP Debug Probe ที่ได้เลือกมาลองใช้คือ nanoDAP ของ Muse Lab ซึ่งภายในมี้ไมโครคอนโทรลเลอร์ STM32F103C8T6-compatible

รูป: nanoDAP (STM32F103-based)

Schematic: https://github.com/wuxx/nanoDAP/blob/master/hardware/V2.3/nanoDAP.pdf

รูป: nanoDAP Schematic

Firmware Sourcecode: https://github.com/wuxx/nanoDAP/tree/master/software

ในบทความนี้ เราจะมาลองใช้งานอุปกรณ์นี้ในขั้นตอนดีบักหรือรันโค้ดโดยใช้บอร์ดไมโครคอนโทรลเลอร์ Arduino ZERO compatible (ATSAMD21) และใช้ร่วมกับซอฟต์แวร์ Arduino IDE 2.0 (beta)

รูป: ตัวอย่างการรันโค้ดในโหมด Debug โดยใช้ Arduino IDE 2.0 (beta)
รูป: อุปกรณ์ที่ได้นำมาทดลองใช้งาน

กล่าวสรุป

บทความนี้ได้นำเสนอการใช้งานอุปกรณ์สองชนิดที่นำมาเสียบใช้งานกับคอมพิวเตอร์ทางพอร์ต USB และใช้เป็นเครื่องมือในการพัฒนาระบบสมองกลฝังตัว ได้แก่ MCU-based 8-Channel Logic Analyzer และ MCU-based CMSIS DAP (DAPLink) Debug Probe ของบริษัท Muse Lab ในประเทศจีน และอุปกรณ์ทั้งสองก็เป็น Open Source Hardware (OSHW)

--

--