กลับไปหน้ารวมไฟล์
arduino-nano-33-bleiot-custom-debugging-275db4.md

เวลาที่น้องเจอว่าต้องใช้ debugger จริงๆ แล้ว แต่ยังไม่รู้จะใช้ตัวไหนดี ก็มีทางเลือกนึงคือทำเองจากบอร์ดที่มีอยู่ก่อน อย่างน้อยก็ได้ลองดู...

ในที่นี้เราจะ debug Arduino Nano 33 BLE ด้วยบอร์ด STM32 Blue Pill ที่แปลงร่างเป็น Black Magic Probe ของเรา จากนั้นเราก็เพิ่ม custom entries ใน Visual Micro เพื่อตั้งค่า debugger นี้ก่อนที่มันจะมาเป็นตัวเลือกมาตรฐาน (เร็วๆ นี้)

อย่าเพิ่งกังวลว่าบอร์ด Blue Pill จะต้องเป็น debugger ตลอดไปนะ อ่านส่วน Undo ข้างล่างไว้ จะได้เปลี่ยนกลับเป็นปกติได้

หมายเหตุ - วิธีนี้ทำให้ debug ทำงานได้ แต่เราขอแนะนำให้ซื้อ Black Magic Probe ที่สร้างมาเพื่อจุดประสงค์นี้โดยเฉพาะ สำหรับงานสำคัญๆ ราคาก็ไม่แพงมาก

บัดกรี Nano 33

ก่อนจะเชื่อมต่อ Nano 33 BLE กับ debugger ภายนอกได้ เราต้องบัดกรีสายจัมเปอร์ลงไปบนแผ่นสัมผัสด้านหลังบอร์ดตามรูปนี้:

Location of the solder pads on the Nano 33 BLE (and IoT) board ตำแหน่งแผ่นบัดกรีบนบอร์ด Nano 33 BLE (และ IoT)

Jumper wires soldered onto the BLE debugging pads สายจัมเปอร์บัดกรีลงบนแผ่น debug ของ BLE แล้ว

สร้าง Debugger ภายนอกของเราเอง

ทีนี้เราก็ตั้งค่าบอร์ด STM32 ของเราให้เป็น debugger ได้แล้ว โดยใช้ STLink Flasher Tool ในการอัปโหลดเฟิร์มแวร์ลงบอร์ด

เราจะใช้ GUI นะ เพราะมันง่ายสุด และใช้ไฟล์ที่คอมไพล์ไว้แล้วเพื่อไม่ต้องเสียเวลาสร้างเอง

  1. ดาวน์โหลดไฟล์ BIN ที่คอมไพล์ไว้แล้วของ BMP STLink DFU จากลิงก์เหล่านี้:

  2. ตั้งค่า Jumper Boot 0 เป็น 1 (ใช้จัมเปอร์สีแดงในรูปเพื่อให้เห็นชัด)

BOOT0 Jumper set to 1 for flashing (red jumper) ตั้งค่า Jumper BOOT0 เป็น 1 สำหรับการอัปโหลดเฟิร์มแวร์ (จัมเปอร์สีแดง)

  1. เชื่อมต่อบอร์ดเข้ากับ PC โดยใช้ FTDI Adapter:

Blue Pill to FTDI Adapter Wiring การต่อสาย Blue Pill กับ FTDI Adapter

หมายเหตุ: ถ้าต้องการ 3.3v ให้เปลี่ยนไปใช้ขา 3.3 ที่อยู่ทางขวาของขา Gnd

  1. ติดตั้งและรัน Flash Tool แล้วเปิดแอปพลิเคชัน "STMFlashLoader Demo"
  • COM Port, Baud 115200
  • ตรวจสอบขนาด Flash ที่ตรวจจับได้เพื่อความปลอดภัย แล้วกด Next

ถ้าบอร์ดของน้องแสดงเป็น 64K อาจจะใช้ไม่ได้นะ!

(เพราะเรามีไฟล์ > 80KB ที่จะอัปโหลด) และอาจทำลายบอร์ดได้.

มีความเป็นไปได้ที่มันจะทำงานได้ (ของเราก็ใช้ได้ไม่มีปัญหา)

  • เลือก Flash Size 128K (ถ้ามีแค่ 64K อาจ ใช้ได้ หรือไม่ก็บอร์ดตาย!)
  • เลือก Download แล้วหาไฟล์ blackmagic_dfu-stlink.bin
  • ตั้งค่า start address เป็น 0x8000000
  • เลือก Verify
  • รัน

COM Port Settings - amend port for your board ตั้งค่า COM Port - แก้ไขพอร์ตให้ตรงกับบอร์ดของน้อง

Flash size detected as 64KB, but we continued anyway... ตรวจจับ Flash size ได้ 64KB แต่เราก็ทำต่อไป...

Flash Loader Target Selection !! READ WARNING ABOVE !! การเลือกเป้าหมายใน Flash Loader !! อ่านคำเตือนข้างบนด้วยนะ !!

Flash Download Settings for DFU Image ตั้งค่า Flash Download สำหรับไฟล์ DFU

Flashing in progress.... กำลัง Flashing อยู่นะน้อง...

Flashing and Verification Success! เฮ้ย! Flashing และ Verification สำเร็จแล้ววว!

ตัวเลือกเสริม: อยากเช็คให้ชัวร์ก็ย้าย Jumper BOOT0 กลับไปที่ตำแหน่ง 0 แล้วเสียบ USB ใหม่ ไปดูใน Device manager ว่ามันขึ้นเป็น Upgrade ไหม:

Optional check for DFU Flash success in device manager เช็คเสริมใน Device manager ว่าการ Flash แบบ DFU สำเร็จ

  1. อย่าลืมเช็คให้แน่ใจว่า Jumper BOOT0 กลับไปอยู่ที่ตำแหน่ง 1 แล้ว และกด Reset บอร์ดก่อนจะทำขั้นตอนเดิมซ้ำสำหรับไฟล์ภาพถัดไปนะ ใช้ไฟล์อื่นและ Start Address ใหม่:

ใช้ไฟล์ภาพ blackmagic-stlink.bin

Start Address 0x8002000

Secondary Black Magic Boot File Options ตั้งค่าสำหรับไฟล์ Black Magic Boot ตัวที่สอง

  1. ย้าย Jumper BOOT0 กลับไปที่ตำแหน่ง 0 (ตอนนี้ใช้ตัวเขียวให้เห็นชัดๆ)

BOOT0 Jumper in 0 position for flash boot Jumper BOOT0 อยู่ตำแหน่ง 0 สำหรับการบูตจาก Flash

  1. ถอด Adapter FTDI ออกจากบอร์ด Blue Pill

  2. เชื่อมต่อ Blue Pill เข้ากับ PC ด้วยสาย USB เท่านั้น โดยใช้พอร์ต USB-micro บนบอร์ด

ตอนนี้ควรจะเห็น COM Port ใหม่โผล่มา 2 พอร์ต (และอุปกรณ์เพิ่มอีก 2 ตัวใน Device manager):

หมายเหตุ - Debugger ตัวนี้ไม่ต้องลงไดรเวอร์เพิ่มเติมนะจ๊ะ เลยไม่ต้องไปยุ่งกับ Zadig

เชื่อมต่อ Debugger และ Target

เพราะว่า Nano33 BLE ใช้โปรโตคอล SWD ในการดีบั๊ก เราก็แค่ต้องต่อสาย 4 เส้นตามภาพด้านล่าง:

Connections between our Black Magic Blue Pill, and our Nano 33 BLE Target การต่อสายระหว่าง Black Magic Blue Pill ของเรา กับ Target Nano 33 BLE

เพิ่ม Custom Debugger ใน vMicro

ตอนนี้ฮาร์ดแวร์ต่อเรียบร้อยแล้ว ต่อไปก็เพิ่มรายการ Custom ใน Visual Micro เพื่อให้เราใช้ Debugger ตัวนี้ได้ ก่อนที่มันจะถูกเพิ่มเป็นตัวเลือกมาตรฐานในเมนู

เปิดโปรเจคของน้องขึ้นมา เลือกบอร์ด Arduino Nano 33 BLE และเลือก COM Port ของมัน

คลิกขวาที่โปรเจคแล้วเลือก "Add Custom GDB Debugger (Advanced)"

มันจะเพิ่มไฟล์ boards.txt และ ARDUINO_NANO33BLE.Debug.debugger_launch.json เข้าไปในโปรเจคโดยอัตโนมัติ ซึ่งไฟล์พวกนี้เอาไว้ปรับแต่งเครื่องมือดีบั๊กใน Visual Micro ได้อีก

แก้ไขไฟล์ Launch JSON

เปิดไฟล์ JSON จาก Solution Explorer

เพราะเราอยากปรับ Debugger ของเราให้ใช้ Black Magic GDB Setup เราต้องแก้ค่าสองค่า:

MIDebuggerPath

อันนี้ต้องอ้างอิงไปที่ไฟล์ GDB exe ของ Tool chain ที่น้องใช้ ซึ่งหาได้โดยเปิด vMicro>Compiler>Show Build Properties แล้ว Build โปรแกรมของน้อง

จากนั้นให้หาในหน้าต่าง Output ว่า "runtime.tools.arm-none-eabi-gcc.path" มันจะโชว์อะไรประมาณนี้:

runtime.tools.arm-none-eabi-gcc.path=C:\\Users\\Simon\\AppData\\Local\\arduino15\\packages\\arduino\\tools\\arm-none-eabi-gcc\\7-2017q4

เราต้องเอาตัวนี้ไปใส่ใน JSON ของเรา แต่ต้อง Escape พวก "\" ทั้งหมดให้เป็น "\\" และเพิ่ม "\\bin\\arm-none-eabi-gdb.exe" ต่อท้ายเข้าไป ผลลัพธ์ใน JSON ของเราจะได้เป็น:

"MIDebuggerPath": "C:\\\\Users\\\\Simon\\\\AppData\\\\Local\\\\arduino15\\\\packages\\\\arduino\\\\tools\\\\arm-none-eabi-gcc\\\\7-2017q4\\\\bin\\\\arm-none-eabi-gdb.exe",

โอเค ตอนนี้เราตั้งค่า Path ของ ARM GDB เรียบร้อยแล้ว ต่อไปก็พารามิเตอร์...

MIDebuggerArgs

บรรทัดนี้สามารถแทนที่ได้ตามด้านล่างเลย แค่เปลี่ยนเลข COM Port ตาม Interface 0 ของ Black Magic Probe ของน้อง

"MIDebuggerArgs": "-nh -b 115200 -ex \"target extended-remote \\\\.\\COM24\" -ex \"monitor swdp_scan\"  -ex \"attach 1\" ",
**แค่นี้แหละที่ต้องแก้ใน JSON ส่วนไฟล์ [board.txt](http://board.txt/) ไม่ต้องแตะต้องอะไรเพิ่ม** *(ตัวอย่าง JSON แบบเต็มแนบไว้ในไฟล์แล้ว)*

### ตั้งค่าการดีบัก

ตอนนี้ทุกอย่างพร้อมแล้ว เรามาเริ่มดีบักกันเลยดีกว่า

ตั้งค่า debugger เป็น "Hardware"

เลือกตัวเลือก Manual/Custom เพื่อใช้ Launch JSON ของเรา

ตรวจสอบให้แน่ใจว่า vMicro > Debugger > Optimisation ถูกตั้งค่าเป็น "No Project + Libraries"

เพิ่ม break point ตรงจุดที่อยากให้โปรแกรมหยุดรอไว้ก่อน มันย้ายตำแหน่งได้หลังจากเริ่มดีบักแล้วนะ และส่วนใหญ่จะจำกัด breakpoint พร้อมกันได้แค่ 6 จุด

ตอนนี้ Build & Upload โค้ดของคุณผ่านพอร์ต COM ของ Nano

จากนั้นเลือก Debug > Attach to process เพื่อเชื่อมต่อ debugger หรือจะทำทีเดียวเลยก็ได้โดยกด Debug > Start Debugging

<iframe frameborder="0" allowfullscreen="" src="https://www.youtube.com/embed/cszbvPZ43kE" style="width: 100%; height: 400px;"></iframe>
*วิดีโอที่สรุปทุกอย่างเกี่ยวกับซอฟต์แวร์ในบทเรียนนี้*

**ทิป: กระบวนการเดียวกันนี้ใช้ได้กับบอร์ดอื่นๆ ที่ใช้ Black Magic probe ได้ เช่น Arduino Nano 33 IoT เป็นต้น**

### การวินิจฉัยเฟิร์มแวร์ขั้นสูง

โปรเจกต์นี้ให้เฟรมเวิร์กสำหรับการดีบักระดับมืออาชีพสำหรับ **Arduino Nano 33 BLE** และซีรีส์ **IoT** ช่วยเชื่อมช่องว่างระหว่างการพัฒนาระดับฮ็อบบีกับระดับอุตสาหกรรม

*   **อินเทอร์เฟซ SWD (Serial Wire Debug)**: การตั้งค่านี้เน้นการใช้ Black Magic Probe (หรือฮาร์ดแวร์คล้ายๆ กันอย่าง ST-Link หรือ J-Link) ร่วมกับ Visual Studio และ Visual Micro ช่วยให้นักพัฒนาสามารถตั้ง "Breakpoints" และ "Step-Through" โค้ดแบบเรียลไทม์บนโปรเซสเซอร์ ARM Cortex-M4 ได้
*   **การตรวจสอบรีจิสเตอร์ระดับล่าง**: วิธีนี้ทำให้เราสามารถดูสถานะภายในของรีจิสเตอร์ในโมดูล NINA-B306 ได้ ซึ่งจำเป็นมากสำหรับการแก้ปัญหาที่ซับซ้อนเกี่ยวกับการเชื่อมต่อ BLE หรือบริการ GATT

#### การปรับแต่งสำหรับการผลิต
*   **การประเมินการใช้หน่วยความจำ**: สภาพแวดล้อมการดีบักนี้มีเครื่องมือสำหรับติดตามการใช้ "Stack และ Heap" ของ Mbed OS เพื่อให้แน่ใจว่า IoT deployment แบบยาวๆ จะไม่เจอปัญหา memory leak

### ย้อนกลับ

ถ้าน้องอยากได้ Blue Pill ของน้องกลับมาเป็นแบบเดิมล่ะก็ แค่ re-flash มันให้กลับไปเป็น Blue Pill มาตรฐานเหมือนเดิม ตามขั้นตอนที่เคยทำ หรือใช้กระบวนการ Flash Loader แบบเดียวกับในบทเรียนนี้ โดยเลือกเซกเตอร์ 0x8000000

### เรียนรู้เพิ่มเติม

[Black Magic](https://github.com/blacksphere/blackmagic)

[STM Loader Tool](https://www.st.com/en/development-tools/flasher-stm32.html)

[Pre-Configured Debugger Support List](https://www.visualmicro.com/page/DebuggerSupportList.aspx?source=3059ca)

[Further Custom Launch JSON Examples](https://www.visualmicro.com/page/Debugging-Using-Custom-Hardware.aspx?source=3059ca)

ข้อมูล Frontmatter ดั้งเดิม

apps:
  - "1x Arduino IDE"
  - "1x Visual Studio 2017"
  - "1x Visual Micro"
  - "1x STM32 Flasher"
author: "arduinocc"
category: "Lab Stuff"
components:
  - "3x Female/Female Jumper Wires"
  - "1x Soldering iron (generic)"
  - "1x Solder Wire, Lead Free"
  - "1x STM32F103CB Blue Pill Board"
  - "1x Nano 33 BLE Sense"
description: "มาเรียนวิธีดีบักบอร์ด Arduino Nano BLE กันแบบตึงๆ พร้อมกับลงมือสร้าง Debugger Module ราคาประหยัดด้วยตัวเอง งานนี้ทั้งเทพและประหยัด วัยรุ่นสายช่างต้องลอง!"
difficulty: "Intermediate"
documentationLinks: []
downloadableFiles: []
encryptedPayload: "U2FsdGVkX18+8aOPEju9yxoGlpHAN5eVX+rwdFEcBJihprKFWXQ6Gtrpb9/Dh5IiPwvF1G5tZD9FJyQQywawo8q+Q+4biaTDwbjoSGnFrKJ1a9/XuBByC8T3ukkF1A+DY77HIbW1jSM3OHkl6Tb876k7Kl3rkj81zayHCTq37AU="
heroImage: "https://cdn.jsdelivr.net/gh/bigboxthailand/arduino-assets@main/images/projects/arduino-nano-33-bleiot-custom-debugging-275db4_cover.jpg"
lang: "en"
likes: 3
passwordHash: "f811b68092a2acffa3304934a7b87e4e8f46d707dd544705990ec3bb71702656"
price: 1999
seoDescription: "Learn debugging on Arduino Nano 33 BLE and build your own low-cost Debugger Module with this step-by-step guide."
tags:
  - "gdb"
  - "debugging tools"
  - "visual micro"
title: "งานง่ายแต่หล่อ: ดีบัก Arduino Nano 33 BLE/IoT แบบจัดเต็ม"
tools: []
videoLinks:
  - "https://www.youtube.com/embed/cszbvPZ43kE"
views: 14389