การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

การทำความเข้าใจ SWD ช่วยให้เข้าใจวิธีที่นักพัฒนาระบบสมองกลฝังตัวใช้ในการโปรแกรมและแก้ไขปัญหาไมโครคอนโทรลเลอร์

การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

อินเทอร์เฟซ SWD คืออะไรและทำงานอย่างไร

ทีมที่จัดส่งผลิตภัณฑ์ระบบฝังตัวที่ใช้ ARM มักพบกับสถานการณ์ที่คุ้นเคยระหว่างการเริ่มต้นใช้งาน: เฟิร์มแวร์โหลดเสร็จ บอร์ดเปิดทำงาน แล้วก็ไม่มีอะไรเกิดขึ้น ไม่มีเอาต์พุต ไม่มีการตอบสนอง และไม่มีข้อผิดพลาดที่เห็นได้ชัดเจน บันทึก UART เงียบสนิท ไฟ LED ดับสนิท หากไม่มีวิธีหยุดโปรเซสเซอร์และตรวจสอบสถานะของรีจิสเตอร์ การตรวจสอบปัญหาก็จะหยุดชะงักทันที

นี่คือสถานการณ์ที่อินเทอร์เฟซ SWD ถูกออกแบบมาเพื่อแก้ไขโดยเฉพาะ โดยช่วยให้วิศวกรเข้าถึงโปรเซสเซอร์ได้โดยตรง ไม่ว่าจะเป็นการหยุดการทำงาน การอ่านหน่วยความจำ การตั้งเบรกพอยต์ และการเขียนโปรแกรมใหม่ โดยใช้เพียงสองสายสัญญาณบนแผงวงจรพิมพ์ (PCB) การผสมผสานระหว่างการใช้พินเพียงเล็กน้อยและการเข้าถึงในระดับลึกนี้เองที่ทำให้ SWD กลายเป็นอินเทอร์เฟซมาตรฐานสำหรับการดีบักและการเขียนโปรแกรมในงานออกแบบระบบฝังตัวที่ใช้ ARM Cortex

โปรโตคอลการดีบักแบบสายอนุกรม — สถาปัตยกรรมสัญญาณและบทบาทของขาพิน

SWD ใช้สัญญาณหลักสองสัญญาณ ได้แก่ SWDIO และ SWDCLK โดย SWDCLK ทำหน้าที่ส่งสัญญาณนาฬิกาจากโพรบดีบักไปยัง MCU เป้าหมาย ส่วน SWDIO เป็นสัญญาณแบบสองทิศทาง ซึ่งใช้ส่งทั้งคำสั่งจากโฮสต์และคำตอบจากเป้าหมายผ่านสายเพียงเส้นเดียว โดยใช้เฟรมแบบฮาล์ฟดูเพล็กซ์ (half-duplex)

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

สัญญาณเสริมอีกสองสัญญาณช่วยขยายความสามารถของอินเทอร์เฟซ สาย nRESET ช่วยให้โพรบสามารถสั่งรีเซ็ตฮาร์ดแวร์ของเป้าหมายได้ ซึ่งมีประโยชน์เมื่อโปรเซสเซอร์ค้างและไม่สามารถรีเซ็ตด้วยซอฟต์แวร์ผ่านพอร์ตดีบักได้อย่างน่าเชื่อถือ ส่วนขา SWO (Serial Wire Output) ใช้ส่งข้อมูลการติดตามจากเป้าหมายไปยังโพรบ การบันทึกข้อมูล printf ผ่าน ITM และการติดตามคำสั่งผ่าน ETM ต่างก็สามารถใช้ SWO เป็นเส้นทางเอาต์พุตได้

สายสัญญาณสองเส้นช่วยให้สามารถหยุดการทำงาน เข้าถึงหน่วยความจำ เขียนโปรแกรมแฟลช และกำหนดเบรกพอยต์ได้ การเพิ่ม SWO เป็นพินที่สามจะช่วยให้สามารถติดตามการทำงานแบบเรียลไทม์ได้โดยไม่ต้องใช้พอร์ตติดตาม JTAG แบบเต็มรูปแบบ

อินเทอร์เฟซทางไฟฟ้าไม่ซับซ้อน SWDIO ต้องใช้ตัวต้านทานแบบดึงขึ้น (pull-up resistor) ซึ่งโดยทั่วไปมีค่า 10 kΩ เพื่อรักษาระดับสัญญาณให้สูงเมื่อไม่มีอุปกรณ์ใดกำลังขับสัญญาณอยู่ ส่วน SWDCLK สามารถปล่อยลอยหรือใช้ตัวต้านทานดึงลงได้ ค่าของตัวต้านทานดึงขึ้นมีความสำคัญ หากมีค่ามากเกินไป สัญญาณจะเปลี่ยนระดับได้ช้าเมื่อใช้ความถี่สัญญาณนาฬิกาสูง แต่หากมีค่าน้อยเกินไป ก็จะเพิ่มภาระต่อไดรเวอร์ของโพรบในช่วงการเปลี่ยนสถานะ

SWD เทียบกับ JTAG — เมื่อใดที่แต่ละโปรโตคอลเหมาะสมที่สุด

ทั้ง SWD และ JTAG มาจากข้อกำหนด ARM Debug Interface (ADI) เดียวกัน ทั้งสองใช้สถาปัตยกรรมพอร์ตดีบักและพอร์ตเข้าถึงพื้นฐานเดียวกัน ความแตกต่างหลักอยู่ที่โครงสร้างทางกายภาพและจำนวนสัญญาณ ไม่ใช่ความสามารถพื้นฐานในการดีบัก

JTAG ใช้สัญญาณห้าสัญญาณ ได้แก่ TCK, TMS, TDI, TDO และ TRST (ถ้ามี) อุปกรณ์หลายตัวสามารถใช้ JTAG chain เดียวกันได้ โดยแต่ละอุปกรณ์จะส่งข้อมูลจาก TDI ไปยัง TDO ทำให้เกิดการเชื่อมต่อแบบลูกโซ่ ในขณะที่ SWD เป็นการเชื่อมต่อแบบจุดต่อจุด โดยโพรบหนึ่งตัวเชื่อมต่อกับเป้าหมายหนึ่งตัว นี่คือข้อแลกเปลี่ยนหลักระหว่างสองอินเทอร์เฟซ

ปัจจุบัน ARM Cortex-M ส่วนใหญ่ใช้ SWD เป็นอินเทอร์เฟซหลัก เนื่องจากข้อจำกัดด้านจำนวนพินบนแผงวงจรขนาดเล็ก การออกแบบแบบสองสายจึงเป็นทางเลือกที่เหมาะสมกว่า ในขณะที่ JTAG ใช้พินจำนวนมากกว่า สำหรับ SoC แบบดูอัลคอร์ หรือบอร์ดที่มีอุปกรณ์ที่สามารถตั้งโปรแกรมได้หลายตัว โครงสร้างแบบลูกโซ่ของ JTAG ยังคงเป็นตัวเลือกที่ดีกว่า

การสลับระหว่าง JTAG และ SWD บนขั้วต่อทางกายภาพเดียวกันนั้นเป็นไปได้ในอุปกรณ์ ARM หลายรุ่น ลำดับการเลือกจาก JTAG เป็น SWD เกี่ยวข้องกับการส่งลำดับบิตเฉพาะขนาด 16 บิตผ่าน TMS/SWDIO ขณะที่สัญญาณนาฬิกา TCK/SWDCLK ทำงาน โพรบดีบักส่วนใหญ่จัดการขั้นตอนนี้โดยอัตโนมัติ ขั้วต่อดีบัก ARM Cortex แบบ 10 พินและ 20 พินรองรับทั้งสองโปรโตคอลในพื้นที่เดียวกัน ดังนั้นการออกแบบ PCB จึงไม่จำเป็นต้องเปลี่ยนแปลงเมื่อสลับระหว่างสองโปรโตคอลนี้

สำหรับเป้าหมาย ARM แบบแกนเดี่ยวที่มีพื้นที่บนแผงวงจรจำกัด SWD เป็นตัวเลือกที่เหมาะสมที่สุด ควรสงวน JTAG ไว้สำหรับงานออกแบบที่ต้องการการเชื่อมต่ออุปกรณ์หลายตัวผ่าน chain หรือจำเป็นต้องใช้ความสามารถเฉพาะของ JTAG

ขั้วต่อ SWD, แผนผังขา และความเข้ากันได้ทางไฟฟ้า

ขั้วต่อ ARM Cortex Debug มีสองขนาดมาตรฐาน แบบ 20 พิน (ระยะห่าง 0.1 นิ้ว) เป็นรูปแบบคลาสสิกที่ใช้ในบอร์ดประเมินผลและอะแดปเตอร์ดีบักส่วนใหญ่ ส่วนแบบ 10 พิน (ระยะห่าง 0.05 นิ้ว, 2×5) พบได้ทั่วไปในฮาร์ดแวร์ที่ใช้งานจริงซึ่งมีพื้นที่บนบอร์ดจำกัด ทั้งสองแบบมีสัญญาณ SWDIO, SWDCLK, nRESET, SWO, VTref (การตรวจจับแรงดันไฟฟ้าของเป้าหมาย) และ GND

Tag-Connect เป็นทางเลือกยอดนิยมสำหรับ PCB ที่ผลิตในปริมาณมาก โดยช่วยขจัดความจำเป็นในการติดตั้งขั้วต่อบนบอร์ดโดยใช้หัววัดแบบสปริงสัมผัสกับแผ่นโลหะขนาดเล็กบน PCB รุ่น TC2030-IDC ใช้แผ่นสัมผัสหกแผ่นสำหรับการเชื่อมต่อ SWD และถูกนำไปใช้อย่างแพร่หลายในอุปกรณ์ที่ผลิตจำนวนมาก ช่วยลดต้นทุนของขั้วต่อบนแผงวงจรและมีขนาดเล็กพอสำหรับพื้นที่ติดตั้งที่จำกัด

ความเข้ากันได้ของแรงดันไฟฟ้าเป็นสิ่งสำคัญที่ต้องใส่ใจ โพรบต้องรองรับระดับแรงดันไฟฟ้าที่เหมาะสมกับแรงดันไฟฟ้า I/O ของอุปกรณ์เป้าหมาย โพรบสมัยใหม่ส่วนใหญ่จะตรวจจับ VTref และปรับระดับสัญญาณขับตามแรงดันดังกล่าว โดยรองรับอุปกรณ์เป้าหมายที่ 1.8 V, 3.3 V และ 5 V การเชื่อมต่อโพรบ 3.3 V เข้ากับอุปกรณ์เป้าหมาย 1.8 V โดยตรงโดยไม่ใช้การปรับระดับแรงดันไฟฟ้าอาจทำให้เซลล์ I/O ของอุปกรณ์เป้าหมายเสียหายได้ แม้ว่าการสื่อสารจะดูเหมือนทำงานได้ในตอนแรกก็ตาม

ตัวต้านทานดึงขึ้น (pull-up) ของ SWDIO: 10 kΩ ต่อกับ VCC เป็นค่าเริ่มต้นทั่วไป และอาจลดลงเป็น 4.7 kΩ หากเวลาขอบสัญญาณช้าเกินไปเมื่อใช้ SWDCLK ที่ความถี่สูง

ความยาวของเส้นทางสัญญาณ: ควรทำให้เส้นทางสัญญาณ SWDIO และ SWDCLK สั้นและมีความยาวใกล้เคียงกัน เส้นทางสัญญาณที่ยาวเกินไปสำหรับสัญญาณที่มีการเปลี่ยนสถานะอย่างรวดเร็วอาจทำให้เกิดการสะท้อนของสัญญาณและส่งผลเสียต่อความสมบูรณ์ของสัญญาณ

การแยกสัญญาณรบกวน: วางตัวเก็บประจุสำหรับดีคัปปลิงขนาด 100 nF ไว้ใกล้กับขา VDD ของ MCU เพื่อช่วยรักษาความสมบูรณ์ของแหล่งจ่ายไฟและลดผลกระทบจากการเปลี่ยนแปลงกระแสของระบบ

ความขัดแย้งของ GPIO: ตรวจสอบให้แน่ใจว่าพิน SWDIO และ SWDCLK ไม่ได้ถูกกำหนดให้ใช้งานโดยอุปกรณ์ต่อพ่วงอื่นในเฟิร์มแวร์ก่อนที่จะพยายามเชื่อมต่อ

สำหรับข้อมูลอ้างอิงเกี่ยวกับการจัดเรียงขาคอนเนคเตอร์แบบสมบูรณ์ แผนภาพการเดินสายระดับแรงดันไฟฟ้า และคำแนะนำเกี่ยวกับการจัดวาง PCB โปรดดูข้อมูลอ้างอิงเกี่ยวกับการจัดเรียงขาคอนเนคเตอร์และการเดินสาย SWD

อินเทอร์เฟซ SWD ในระบบฝังตัว — การดีบัก การเขียนโปรแกรม และการใช้งานจริง

การเข้าใจโปรโตคอลเป็นพื้นฐานสำคัญ แต่คำถามที่สำคัญกว่าสำหรับทีมพัฒนาอุปกรณ์ฝังตัวส่วนใหญ่คือ SWD จะเข้ากับวงจรชีวิตของผลิตภัณฑ์ได้อย่างไร ตั้งแต่การเริ่มต้นใช้งานไปจนถึงการเขียนโปรแกรมเพื่อการผลิตและการบำรุงรักษาภาคสนาม แต่ละขั้นตอนมีข้อกำหนดที่แตกต่างกัน และ SWD สามารถรองรับข้อกำหนดเหล่านั้นทั้งหมดผ่านอินเทอร์เฟซแบบสองสายเดียวกัน

การแฟลชเฟิร์มแวร์และการเขียนโปรแกรมแบบ In-Circuit ผ่าน SWD

SWD เป็นเส้นทางหลักสำหรับการเขียนโปรแกรมแบบ in-circuit สำหรับเป้าหมาย ARM Cortex-M และอุปกรณ์บางประเภทที่ใช้ Cortex-A โดยไม่จำเป็นต้องมีบูตโหลดเดอร์อยู่แล้วในเป้าหมาย โพรบดีบักจะเชื่อมต่อโดยตรงกับพอร์ตดีบักของโปรเซสเซอร์ หยุดการทำงานของคอร์ และเขียนข้อมูลลงในแฟลชผ่านตัวควบคุมแฟลชที่แมปอยู่ในหน่วยความจำ

ลำดับการเขียนโปรแกรมโดยทั่วไปมีขั้นตอนดังต่อไปนี้:

  • เชื่อมต่อ: โพรบดีบักจะเริ่มการสื่อสาร SWD และอ่าน IDCODE ของอุปกรณ์เป้าหมายเพื่อยืนยันตัวตนของอุปกรณ์
  • หยุด: โพรบจะหยุดการทำงานของคอร์ Cortex ผ่านพอร์ตดีบัก
  • ลบ: โพรบจะลบเซกเตอร์แฟลชของเป้าหมายโดยใช้อัลกอริทึมแฟลชที่โหลดไว้ใน RAM ของเป้าหมาย
  • โปรแกรม: ข้อมูลไบนารีจะถูกเขียนลงในแต่ละหน้า โดยใช้อัลกอริทึมแฟลชที่ทำงานบนเป้าหมายเพื่อดำเนินการเขียนแต่ละครั้ง
  • ตรวจสอบ: โพรบจะอ่านข้อมูลที่เขียนกลับมาและเปรียบเทียบกับไฟล์ไบนารีต้นฉบับ
  • รีเซ็ต: โพรบจะปล่อยคอร์ และเฟิร์มแวร์จะเริ่มทำงาน

อัลกอริทึมแฟลชนั้นขึ้นอยู่กับผู้ผลิต MCU แต่ละราย OpenOCD, pyOCD และ IDE ของผู้ผลิตแต่ละรายจะมีไลบรารีของอัลกอริทึมเหล่านี้ เมื่อ MCU รุ่นใหม่ยังไม่อยู่ในฐานข้อมูลของเครื่องมือ จะต้องเพิ่มอัลกอริทึมเข้าไปด้วยตนเอง ซึ่งเป็นปัญหาที่พบได้บ่อยเมื่อนำซิลิคอนรุ่นใหม่มาใช้ในระหว่างการผลิต

มีวิธีหลักสองวิธีในการเขียนโปรแกรมผ่าน SWD จากฝั่งโฮสต์ วิธีแรกคือการเขียนโปรแกรมแบบลากและวาง (ใช้โดยโพรบที่รองรับ CMSIS-DAP และ DAPLink) โดยโพรบจะถูกมองเป็นอุปกรณ์จัดเก็บข้อมูลแบบ USB การลากไฟล์ไบนารีลงไปจะทำให้ลำดับการแฟลชทำงานโดยอัตโนมัติ วิธีนี้รวดเร็วสำหรับช่างเทคนิคภาคสนามและไม่จำเป็นต้องติดตั้งซอฟต์แวร์ ส่วนวิธีที่สองคือการเขียนโปรแกรมโดยควบคุมจากโฮสต์ผ่าน GDB ร่วมกับ OpenOCD หรือเครื่องมือ CLI ของผู้ผลิต เช่น STM32CubeProgrammer หรือ nrfjprog ซึ่งให้การควบคุมมากกว่า โดยรองรับการเขียนสคริปต์ การบันทึกผลว่าผ่านหรือไม่ผ่าน และการทำงานร่วมกับระบบทดสอบอัตโนมัติ

สำหรับคำแนะนำเกี่ยวกับการเลือกโพรบและการตั้งค่าชุดเครื่องมือฝั่งโฮสต์ โปรดดูข้อมูลเกี่ยวกับการเลือกและการกำหนดค่าโพรบดีบัก SWD

ความถี่ SWDCLK เป็นตัวกำหนดความเร็วในการเขียนโปรแกรมที่ใช้งานได้จริง อุปกรณ์ประมวลผล Cortex-M ส่วนใหญ่รองรับ SWDCLK ได้ถึง 10 MHz ภายใต้สภาวะที่เสถียร แต่เครื่องมือที่ใช้ในงานผลิตจำนวนมากมักทำงานที่ 4–8 MHz เพื่อรักษาระยะเผื่อสำหรับความผันแปรของอุณหภูมิและความยาวสายเคเบิล ที่ความถี่ 4 MHz การเขียนโปรแกรมภาพข้อมูลขนาด 256 KB โดยทั่วไปจะใช้เวลาน้อยกว่า 10 วินาที รวมขั้นตอนการลบและการตรวจสอบ เครื่องเขียนโปรแกรมแบบกลุ่ม (gang programming fixture) ซึ่งโฮสต์หนึ่งตัวเขียนโปรแกรมให้กับบอร์ดสี่หรือแปดบอร์ดพร้อมกัน เป็นเรื่องปกติในการผลิตจำนวนมากเพื่อให้บรรลุเป้าหมายด้านเวลารอบการผลิต

ตำแหน่งของจุดทดสอบมีความสำคัญ จุดทดสอบ SWDIO, SWDCLK, GND และ VCC ต้องสามารถเข้าถึงได้จากด้านของอุปกรณ์จับยึดบนแผงวงจร การวางจุดทดสอบเหล่านี้ไว้ด้านเดียวกับชิ้นส่วนอิเล็กทรอนิกส์อาจทำให้ต้องใช้อุปกรณ์จับยึดแบบสองด้าน ซึ่งเพิ่มต้นทุนและความซับซ้อน การจัดกลุ่มจุดทดสอบเหล่านี้ไว้ในตำแหน่งที่สม่ำเสมอในผลิตภัณฑ์รุ่นต่างๆ จะทำให้สามารถนำอุปกรณ์จับยึดกลับมาใช้ใหม่ได้อย่างมีประสิทธิภาพ

การดีบักแบบเรียลไทม์ การติดตาม และการผสานรวม CoreSight

SWD เป็นเลเยอร์การขนส่งสำหรับสถาปัตยกรรมดีบัก CoreSight ของ ARM การทำความเข้าใจสถาปัตยกรรมนี้จะช่วยอธิบายว่าโพรบสามารถทำอะไรได้บ้างเมื่อเชื่อมต่อกับเป้าหมายแล้ว

CoreSight จัดการการเข้าถึงการดีบักผ่านพอร์ตสองประเภท พอร์ตดีบัก (Debug Port หรือ DP) คืออินเทอร์เฟซ SWD เอง ซึ่งทำหน้าที่จัดการการเชื่อมต่อ การตรวจสอบสิทธิ์ และการควบคุมในระดับพอร์ต ส่วนพอร์ตเข้าถึง (Access Port หรือ AP) อยู่ด้านหลัง DP และให้การเข้าถึงทรัพยากรเฉพาะ AHB-AP ให้สิทธิ์การอ่านและเขียนไปยังแผนที่หน่วยความจำ และรีจิสเตอร์ดีบักของคอร์ก็อยู่ภายในพื้นที่ดังกล่าว ผ่าน AHB-AP โพรบสามารถอ่านและเขียนไปยังที่อยู่หน่วยความจำ รีจิสเตอร์ของอุปกรณ์ต่อพ่วง หรือรีจิสเตอร์ของ CPU ได้ในขณะที่คอร์หยุดทำงาน

เบรกพอยต์และวอชพอยต์ทำงานผ่านหน่วย FPB และ DWT ในคอร์ Cortex-M โดยเบรกพอยต์แบบฮาร์ดแวร์จะหยุดการทำงานของโปรเซสเซอร์เมื่อการประมวลผลไปถึงที่อยู่ที่กำหนด ส่วนวอชพอยต์จะหยุดการทำงานเมื่อมีการเข้าถึงหน่วยความจำ ไม่ว่าจะเป็นการอ่าน การเขียน หรือทั้งสองอย่าง ไปยังที่อยู่หรือช่วงที่อยู่ที่กำหนด โดยทั่วไป Cortex-M4 จะมีเบรกพอยต์แบบฮาร์ดแวร์หกตัวและวอชพอยต์สี่ตัว หากต้องการใช้งานเกินจำนวนดังกล่าว จะต้องใช้เบรกพอยต์แบบซอฟต์แวร์ ซึ่งจะแก้ไขคำสั่งในแฟลชและมีข้อจำกัดของตัวเอง

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

การติดตามข้อมูลผ่าน SWO ช่วยแก้ปัญหานี้ได้ พิน Serial Wire Output (SWO) ส่งข้อมูลจาก Instrumentation Trace Macrocell (ITM) และในคอร์ที่มี ETM ก็สามารถส่งข้อมูลการติดตามคำสั่งได้ การติดตามข้อมูลผ่าน ITM ช่วยให้เฟิร์มแวร์เขียนข้อความบันทึกไปยัง FIFO ซอฟต์แวร์ 32 ช่อง โพรบจะอ่านข้อมูลเหล่านั้นแบบเรียลไทม์โดยไม่ต้องหยุดการทำงานของคอร์ วิธีนี้เทียบได้กับการดีบักด้วย printf ในระบบฝังตัว แต่มีค่าใช้จ่ายด้านประสิทธิภาพต่ำมากเมื่อเทียบกับการส่งข้อมูลผ่าน UART การเขียนข้อมูลไปยัง ITM โดยทั่วไปใช้เวลาเพียงไม่กี่รอบสัญญาณนาฬิกา และข้อมูลจะถูกส่งออกผ่าน SWO ด้วยอัตราความเร็วสูงถึงหลายเมกะบิตต่อวินาที

RTT (Real-Time Transfer) เป็นทางเลือกเมื่อ SWO ไม่พร้อมใช้งานหรือเมื่อโพรบไม่รองรับการติดตาม RTT ใช้บัฟเฟอร์แบบวงแหวนขนาดเล็กใน RAM ของเป้าหมาย โพรบจะอ่านบัฟเฟอร์ผ่านพอร์ตดีบักในขณะที่คอร์ยังทำงานอยู่ โดยไม่จำเป็นต้องใช้พินเพิ่มเติม ข้อเสียคือใช้ RAM มากขึ้น โดยบัฟเฟอร์ RTT ทั่วไปใช้พื้นที่ประมาณ 512 ไบต์ถึง 4 KB ขึ้นอยู่กับปริมาณข้อมูลบันทึก และมีความหน่วงเล็กน้อยเมื่อเทียบกับ SWO

สำหรับวิธีการตั้งค่าเบรกพอยต์ การกำหนดค่าการติดตาม SWO และ RTT ด้วยตนเอง โปรดดูขั้นตอนการตั้งค่าสภาพแวดล้อมการดีบัก SWD แบบทีละขั้นตอน

SWD ในด้าน HMI อุตสาหกรรม, IoT และระบบฝังตัวสำหรับการผลิต

ในอุปกรณ์ควบคุม HMI อุตสาหกรรมที่ใช้ ARM โหนด IoT ไมโครคอนโทรลเลอร์สำหรับขับมอเตอร์ และอุปกรณ์ระบบอัตโนมัติในอาคาร SWD มีบทบาทที่แตกต่างกันสามประการในวงจรชีวิตของผลิตภัณฑ์ ได้แก่ การดีบักระหว่างการพัฒนา การเขียนโปรแกรมเพื่อการผลิต และการบำรุงรักษาภาคสนาม แต่ละบทบาทมีข้อกำหนดที่แตกต่างกัน และอินเทอร์เฟซนี้สามารถรองรับทั้งสามบทบาทผ่านการเชื่อมต่อทางกายภาพเดียวกัน

HMI ในภาคอุตสาหกรรมและตัวควบคุมระบบอัตโนมัติใช้ SWD เป็นหลักสำหรับการเขียนโปรแกรมในสายการผลิตและการอัปเดตเฟิร์มแวร์ภาคสนาม โดยทั่วไป อุปกรณ์ทดสอบในสายการผลิต HMI จะใช้ขั้วต่อแบบ pogo-pin บนจุดทดสอบ SWDIO, SWDCLK, GND และ VCC โฮสต์จะเรียกใช้ลำดับการแฟลชตามสคริปต์ บันทึกผลลัพธ์พร้อมหมายเลขซีเรียลของบอร์ด และแจ้งเตือนความล้มเหลวเพื่อดำเนินการแก้ไข เวลาต่อบอร์ดโดยทั่วไปอยู่ที่ 15–30 วินาที รวมขั้นตอนการทดสอบการทำงาน โดยอินเทอร์เฟซ SWD เองใช้เวลาเพิ่มขึ้นไม่ถึง 10 วินาทีจากเวลาทั้งหมดนั้น

โหนด IoT อุตสาหกรรมที่ทำงานบนขอบเครือข่ายมักใช้เป้าหมาย Cortex-M33 หรือ Cortex-M4 โดยเปิดใช้งาน TrustZone หรือกลไกป้องกันการอ่านข้อมูลระหว่างการผลิต ในระหว่างการพัฒนา SWD จะให้สิทธิ์การเข้าถึงการดีบักอย่างเต็มที่ ก่อนการจัดส่ง เฟิร์มแวร์จะเปิดใช้งานการป้องกันการอ่านข้อมูล ซึ่งอาจทำได้โดยการเขียนค่าลงในไบต์ตัวเลือกหรือรีจิสเตอร์ฟิวส์ เพื่อปิดใช้งานการเข้าถึงการดีบักผ่าน SWD และป้องกันการอ่านข้อมูลจากหน่วยความจำ เนื้อหาของแฟลชจะไม่สามารถอ่านได้ผ่านพอร์ตดีบัก นี่คือกลไกมาตรฐานสำหรับการปกป้องทรัพย์สินทางปัญญาของเฟิร์มแวร์ในผลิตภัณฑ์ที่จัดส่ง

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

ไมโครคอนโทรลเลอร์ (MCU) สำหรับขับมอเตอร์และอุปกรณ์อิเล็กทรอนิกส์กำลังเพิ่มข้อจำกัดด้านเวลา การออกแบบเหล่านี้จำนวนมากใช้ขา SWD เป็น GPIO ในการทำงานปกติ โดย MCU จะทำการแมป SWDIO และ SWDCLK ไปยังฟังก์ชันอื่นหลังจากบูตเครื่อง การเชื่อมต่อโพรบหลังจากทำการแมปใหม่อาจล้มเหลวโดยไม่มีการแจ้งเตือนใดๆ วิธีแก้ปัญหาคือหน้าต่างดีบัก ซึ่งเป็นช่วงเวลาสั้นๆ ระหว่างการเริ่มต้นระบบที่ถูกกระตุ้นโดย GPIO หรือเงื่อนไขการบูตเฉพาะ โดยเฟิร์มแวร์จะคง SWD ให้ทำงานอยู่ก่อนที่จะทำการแมปพินใหม่ วิธีนี้ช่วยให้โพรบสามารถเชื่อมต่อได้ในระหว่างหน้าต่างดังกล่าวและหยุดการทำงานของคอร์ก่อนที่จะทำการแมปใหม่

ชิป SoC แบบดูอัลคอร์ ซึ่งพบได้บ่อยขึ้นในไมโครคอนโทรลเลอร์ระดับอุตสาหกรรม เช่น ซีรีส์ STM32H7 หรือ NXP i.MX RT อาจจำเป็นต้องใช้ SWD multidrop หรือขั้วต่อดีบักแยกต่างหากสำหรับแต่ละคอร์ SWD multidrop จะกำหนดรหัสเป้าหมายที่ไม่ซ้ำกันให้กับแต่ละคอร์บนสาย SWDCLK/SWDIO เดียวกัน อย่างไรก็ตาม โพรบบางตัวอาจไม่รองรับฟังก์ชันนี้ โปรดตรวจสอบเวอร์ชันเฟิร์มแวร์ของโพรบและการรองรับ multidrop ก่อนนำสถาปัตยกรรมดีบัก SWD แบบดูอัลคอร์ไปใช้ในการออกแบบใหม่

การผสานรวม CI/CD เป็นแนวทางปฏิบัติมาตรฐานในทีมพัฒนาอุปกรณ์ฝังตัวที่ส่งมอบผลิตภัณฑ์ที่เชื่อมต่ออินเทอร์เน็ต OpenOCD, pyOCD และเครื่องมือ CLI ของผู้จำหน่ายส่วนใหญ่มีอินเทอร์เฟซบรรทัดคำสั่งที่ไปป์ไลน์การสร้างสามารถเรียกใช้ได้โดยตรง ขั้นตอนการทดสอบอัตโนมัติทั่วไปจะทำการแฟลชเฟิร์มแวร์ เรียกใช้การทดสอบตัวเองเมื่อเปิดเครื่องผ่านพอร์ตดีบัก อ่านผลลัพธ์ว่าผ่านหรือไม่ผ่านจากที่อยู่หน่วยความจำที่ทราบ และบันทึกผลลัพธ์ วิธีนี้ช่วยตรวจจับความล้มเหลวในการเขียนแฟลชและข้อผิดพลาดพื้นฐานของเฟิร์มแวร์ในทุกการสร้าง ไม่ใช่เฉพาะในช่วงรอบการทดสอบด้วยตนเองเท่านั้น

STONE HMI ใช้กระบวนการพัฒนาเฟิร์มแวร์ที่มีโครงสร้างในโครงการระบบอัตโนมัติต่างๆ

สำหรับทีมพัฒนาผลิตภัณฑ์ฝังตัว ระเบียบวินัยในกระบวนการทำงานเช่นนี้มีความสำคัญมากกว่าแค่ในห้องปฏิบัติการพัฒนา เมื่อขั้นตอนการเขียนโปรแกรมสำหรับการผลิต การทดสอบอัตโนมัติ และการแก้ไขปัญหาในภาคสนามได้รับการกำหนดและทดสอบก่อนการผลิตครั้งแรก ความเสี่ยงในการส่งมอบจะลดลงอย่างมาก บทบาทของ SWD ในขั้นตอนการทำงานนั้นไม่ใช่เพียงเครื่องมือช่วยในการดีบักเท่านั้น แต่ยังเป็นกลไกที่ทำให้การเขียนโปรแกรมสำหรับการผลิตที่ทำซ้ำได้และตรวจสอบได้เป็นไปได้บนฮาร์ดแวร์ที่ใช้ ARM

คำถามที่พบบ่อยเกี่ยวกับอินเทอร์เฟซ SWD

อินเทอร์เฟซ SWD ใช้สำหรับอะไร?

SWD ให้สิทธิ์การเข้าถึงการดีบัก การแฟลชเฟิร์มแวร์ และการติดตามแบบเรียลไทม์สำหรับโปรเซสเซอร์ ARM Cortex ครอบคลุมวงจรชีวิตของผลิตภัณฑ์อย่างครบถ้วน ได้แก่ การดีบักในช่วงเริ่มต้นการพัฒนา การเขียนโปรแกรมสำหรับการผลิต และการอัปเดตเฟิร์มแวร์ภาคสนาม สถาปัตยกรรมและขั้นตอนการเขียนโปรแกรมได้อธิบายไว้โดยละเอียดในหัวข้อด้านบนแล้ว

SWD ต้องการพินกี่ตัว?

SWD ต้องการพินสองพิน ได้แก่ SWDIO และ SWDCLK พินที่สามคือ nRESET ซึ่งเป็นพินเสริม แต่แนะนำให้ใช้เพื่อให้สามารถเชื่อมต่อโพรบได้อย่างน่าเชื่อถือเมื่อเป้าหมายอาจอยู่ในสถานะที่ไม่แน่นอน พินที่สี่คือ SWO ซึ่งเพิ่มความสามารถในการส่งออกข้อมูลการติดตาม ดูรายละเอียดสัญญาณทั้งหมดได้ใน H3 1.1

SWD สามารถนำไปใช้ในการเขียนโปรแกรมเพื่อการผลิตได้หรือไม่ ไม่ใช่แค่สำหรับการดีบักในระหว่างการพัฒนาเท่านั้น?

ใช่ การเขียนโปรแกรมสำหรับการผลิตผ่าน SWD เป็นวิธีมาตรฐานสำหรับผลิตภัณฑ์ระบบฝังตัวที่ใช้ ARM อุปกรณ์จับยึดแบบ pogo-pin เครื่องเขียนโปรแกรมแบบกลุ่ม และเครื่องมือ CLI แบบสคริปต์ ล้วนใช้ส่วนต่อประสาน SWD สำหรับการเขียนโปรแกรมแฟลชในปริมาณมาก ลำดับการเขียนโปรแกรม ข้อจำกัดด้านความเร็ว และปัจจัยด้านการออกแบบอุปกรณ์จับยึดจะกล่าวถึงใน H3 2.1

SWD และ UART แตกต่างกันอย่างไรในการแฟลชเฟิร์มแวร์?

การแฟลชเฟิร์มแวร์ผ่าน UART ใช้บูตโหลดเดอร์ที่มีอยู่แล้วใน ROM หรือหน่วยความจำแฟลชของ MCU โปรเซสเซอร์ต้องทำงานและบูตโหลดเดอร์ต้องอยู่ในสถานะทำงาน ส่วน SWD จะข้ามขั้นตอนการทำงานของโปรเซสเซอร์ไปโดยสิ้นเชิง โดยเขียนข้อมูลลงในหน่วยความจำแฟลชโดยตรงผ่านพอร์ตดีบัก SWD สามารถทำงานได้แม้ว่าเป้าหมายจะไม่มีเฟิร์มแวร์ อิมเมจเฟิร์มแวร์เสียหาย หรือโปรเซสเซอร์ค้างอยู่ก็ตาม

SWD รองรับการใช้งานบนโปรเซสเซอร์ ARM Cortex ทุกรุ่นหรือไม่?

SWD รองรับการใช้งานบนโปรเซสเซอร์ ARM Cortex-M และอุปกรณ์ ARM บางประเภทที่ใช้ Cortex-A โดยเป็นส่วนหนึ่งของข้อกำหนด ARM Debug Interface (ADI) และถูกรวมอยู่ในซิลิคอน Cortex-M ตั้งแต่ Cortex-M0 เป็นต้นมา โปรเซสเซอร์ Cortex-A รุ่นเก่าหรือรุ่นฝังตัวบางรุ่นอาจมีเพียง JTAG เท่านั้น แต่รุ่นเหล่านั้นพบได้น้อยกว่าในงานออกแบบปัจจุบัน

ฉันจะปิดใช้งาน SWD ในผลิตภัณฑ์ที่จัดส่งแล้วเพื่อป้องกันเฟิร์มแวร์ได้อย่างไร?

ไมโครคอนโทรลเลอร์ ARM Cortex-M ส่วนใหญ่มีกลไกป้องกันการอ่านข้อมูล เช่น การเขียนค่าลงในไบต์ตัวเลือก หรือการใช้ฟิวส์รักษาความปลอดภัย เพื่อปิดใช้งานการเข้าถึงพอร์ตดีบักและป้องกันการอ่านข้อมูลจากหน่วยความจำ การเปิดใช้งานอีกครั้งอาจต้องลบข้อมูลทั้งหมด ซึ่งจะทำลายเฟิร์มแวร์ ขั้นตอนการรักษาความปลอดภัยและข้อควรพิจารณาในการแก้ไขงานจะกล่าวถึงใน H3 2.3

การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

การทำความเข้าใจ SWD ช่วยให้เข้าใจวิธีที่นักพัฒนาระบบสมองกลฝังตัวใช้ในการโปรแกรมและแก้ไขปัญหาไมโครคอนโทรลเลอร์

นักเขียนบทความ
by 
นักเขียนบทความ
การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

การทำความเข้าใจ SWD ช่วยให้เข้าใจวิธีที่นักพัฒนาระบบสมองกลฝังตัวใช้ในการโปรแกรมและแก้ไขปัญหาไมโครคอนโทรลเลอร์

อินเทอร์เฟซ SWD คืออะไรและทำงานอย่างไร

ทีมที่จัดส่งผลิตภัณฑ์ระบบฝังตัวที่ใช้ ARM มักพบกับสถานการณ์ที่คุ้นเคยระหว่างการเริ่มต้นใช้งาน: เฟิร์มแวร์โหลดเสร็จ บอร์ดเปิดทำงาน แล้วก็ไม่มีอะไรเกิดขึ้น ไม่มีเอาต์พุต ไม่มีการตอบสนอง และไม่มีข้อผิดพลาดที่เห็นได้ชัดเจน บันทึก UART เงียบสนิท ไฟ LED ดับสนิท หากไม่มีวิธีหยุดโปรเซสเซอร์และตรวจสอบสถานะของรีจิสเตอร์ การตรวจสอบปัญหาก็จะหยุดชะงักทันที

นี่คือสถานการณ์ที่อินเทอร์เฟซ SWD ถูกออกแบบมาเพื่อแก้ไขโดยเฉพาะ โดยช่วยให้วิศวกรเข้าถึงโปรเซสเซอร์ได้โดยตรง ไม่ว่าจะเป็นการหยุดการทำงาน การอ่านหน่วยความจำ การตั้งเบรกพอยต์ และการเขียนโปรแกรมใหม่ โดยใช้เพียงสองสายสัญญาณบนแผงวงจรพิมพ์ (PCB) การผสมผสานระหว่างการใช้พินเพียงเล็กน้อยและการเข้าถึงในระดับลึกนี้เองที่ทำให้ SWD กลายเป็นอินเทอร์เฟซมาตรฐานสำหรับการดีบักและการเขียนโปรแกรมในงานออกแบบระบบฝังตัวที่ใช้ ARM Cortex

โปรโตคอลการดีบักแบบสายอนุกรม — สถาปัตยกรรมสัญญาณและบทบาทของขาพิน

SWD ใช้สัญญาณหลักสองสัญญาณ ได้แก่ SWDIO และ SWDCLK โดย SWDCLK ทำหน้าที่ส่งสัญญาณนาฬิกาจากโพรบดีบักไปยัง MCU เป้าหมาย ส่วน SWDIO เป็นสัญญาณแบบสองทิศทาง ซึ่งใช้ส่งทั้งคำสั่งจากโฮสต์และคำตอบจากเป้าหมายผ่านสายเพียงเส้นเดียว โดยใช้เฟรมแบบฮาล์ฟดูเพล็กซ์ (half-duplex)

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

สัญญาณเสริมอีกสองสัญญาณช่วยขยายความสามารถของอินเทอร์เฟซ สาย nRESET ช่วยให้โพรบสามารถสั่งรีเซ็ตฮาร์ดแวร์ของเป้าหมายได้ ซึ่งมีประโยชน์เมื่อโปรเซสเซอร์ค้างและไม่สามารถรีเซ็ตด้วยซอฟต์แวร์ผ่านพอร์ตดีบักได้อย่างน่าเชื่อถือ ส่วนขา SWO (Serial Wire Output) ใช้ส่งข้อมูลการติดตามจากเป้าหมายไปยังโพรบ การบันทึกข้อมูล printf ผ่าน ITM และการติดตามคำสั่งผ่าน ETM ต่างก็สามารถใช้ SWO เป็นเส้นทางเอาต์พุตได้

สายสัญญาณสองเส้นช่วยให้สามารถหยุดการทำงาน เข้าถึงหน่วยความจำ เขียนโปรแกรมแฟลช และกำหนดเบรกพอยต์ได้ การเพิ่ม SWO เป็นพินที่สามจะช่วยให้สามารถติดตามการทำงานแบบเรียลไทม์ได้โดยไม่ต้องใช้พอร์ตติดตาม JTAG แบบเต็มรูปแบบ

อินเทอร์เฟซทางไฟฟ้าไม่ซับซ้อน SWDIO ต้องใช้ตัวต้านทานแบบดึงขึ้น (pull-up resistor) ซึ่งโดยทั่วไปมีค่า 10 kΩ เพื่อรักษาระดับสัญญาณให้สูงเมื่อไม่มีอุปกรณ์ใดกำลังขับสัญญาณอยู่ ส่วน SWDCLK สามารถปล่อยลอยหรือใช้ตัวต้านทานดึงลงได้ ค่าของตัวต้านทานดึงขึ้นมีความสำคัญ หากมีค่ามากเกินไป สัญญาณจะเปลี่ยนระดับได้ช้าเมื่อใช้ความถี่สัญญาณนาฬิกาสูง แต่หากมีค่าน้อยเกินไป ก็จะเพิ่มภาระต่อไดรเวอร์ของโพรบในช่วงการเปลี่ยนสถานะ

SWD เทียบกับ JTAG — เมื่อใดที่แต่ละโปรโตคอลเหมาะสมที่สุด

ทั้ง SWD และ JTAG มาจากข้อกำหนด ARM Debug Interface (ADI) เดียวกัน ทั้งสองใช้สถาปัตยกรรมพอร์ตดีบักและพอร์ตเข้าถึงพื้นฐานเดียวกัน ความแตกต่างหลักอยู่ที่โครงสร้างทางกายภาพและจำนวนสัญญาณ ไม่ใช่ความสามารถพื้นฐานในการดีบัก

JTAG ใช้สัญญาณห้าสัญญาณ ได้แก่ TCK, TMS, TDI, TDO และ TRST (ถ้ามี) อุปกรณ์หลายตัวสามารถใช้ JTAG chain เดียวกันได้ โดยแต่ละอุปกรณ์จะส่งข้อมูลจาก TDI ไปยัง TDO ทำให้เกิดการเชื่อมต่อแบบลูกโซ่ ในขณะที่ SWD เป็นการเชื่อมต่อแบบจุดต่อจุด โดยโพรบหนึ่งตัวเชื่อมต่อกับเป้าหมายหนึ่งตัว นี่คือข้อแลกเปลี่ยนหลักระหว่างสองอินเทอร์เฟซ

ปัจจุบัน ARM Cortex-M ส่วนใหญ่ใช้ SWD เป็นอินเทอร์เฟซหลัก เนื่องจากข้อจำกัดด้านจำนวนพินบนแผงวงจรขนาดเล็ก การออกแบบแบบสองสายจึงเป็นทางเลือกที่เหมาะสมกว่า ในขณะที่ JTAG ใช้พินจำนวนมากกว่า สำหรับ SoC แบบดูอัลคอร์ หรือบอร์ดที่มีอุปกรณ์ที่สามารถตั้งโปรแกรมได้หลายตัว โครงสร้างแบบลูกโซ่ของ JTAG ยังคงเป็นตัวเลือกที่ดีกว่า

การสลับระหว่าง JTAG และ SWD บนขั้วต่อทางกายภาพเดียวกันนั้นเป็นไปได้ในอุปกรณ์ ARM หลายรุ่น ลำดับการเลือกจาก JTAG เป็น SWD เกี่ยวข้องกับการส่งลำดับบิตเฉพาะขนาด 16 บิตผ่าน TMS/SWDIO ขณะที่สัญญาณนาฬิกา TCK/SWDCLK ทำงาน โพรบดีบักส่วนใหญ่จัดการขั้นตอนนี้โดยอัตโนมัติ ขั้วต่อดีบัก ARM Cortex แบบ 10 พินและ 20 พินรองรับทั้งสองโปรโตคอลในพื้นที่เดียวกัน ดังนั้นการออกแบบ PCB จึงไม่จำเป็นต้องเปลี่ยนแปลงเมื่อสลับระหว่างสองโปรโตคอลนี้

สำหรับเป้าหมาย ARM แบบแกนเดี่ยวที่มีพื้นที่บนแผงวงจรจำกัด SWD เป็นตัวเลือกที่เหมาะสมที่สุด ควรสงวน JTAG ไว้สำหรับงานออกแบบที่ต้องการการเชื่อมต่ออุปกรณ์หลายตัวผ่าน chain หรือจำเป็นต้องใช้ความสามารถเฉพาะของ JTAG

ขั้วต่อ SWD, แผนผังขา และความเข้ากันได้ทางไฟฟ้า

ขั้วต่อ ARM Cortex Debug มีสองขนาดมาตรฐาน แบบ 20 พิน (ระยะห่าง 0.1 นิ้ว) เป็นรูปแบบคลาสสิกที่ใช้ในบอร์ดประเมินผลและอะแดปเตอร์ดีบักส่วนใหญ่ ส่วนแบบ 10 พิน (ระยะห่าง 0.05 นิ้ว, 2×5) พบได้ทั่วไปในฮาร์ดแวร์ที่ใช้งานจริงซึ่งมีพื้นที่บนบอร์ดจำกัด ทั้งสองแบบมีสัญญาณ SWDIO, SWDCLK, nRESET, SWO, VTref (การตรวจจับแรงดันไฟฟ้าของเป้าหมาย) และ GND

Tag-Connect เป็นทางเลือกยอดนิยมสำหรับ PCB ที่ผลิตในปริมาณมาก โดยช่วยขจัดความจำเป็นในการติดตั้งขั้วต่อบนบอร์ดโดยใช้หัววัดแบบสปริงสัมผัสกับแผ่นโลหะขนาดเล็กบน PCB รุ่น TC2030-IDC ใช้แผ่นสัมผัสหกแผ่นสำหรับการเชื่อมต่อ SWD และถูกนำไปใช้อย่างแพร่หลายในอุปกรณ์ที่ผลิตจำนวนมาก ช่วยลดต้นทุนของขั้วต่อบนแผงวงจรและมีขนาดเล็กพอสำหรับพื้นที่ติดตั้งที่จำกัด

ความเข้ากันได้ของแรงดันไฟฟ้าเป็นสิ่งสำคัญที่ต้องใส่ใจ โพรบต้องรองรับระดับแรงดันไฟฟ้าที่เหมาะสมกับแรงดันไฟฟ้า I/O ของอุปกรณ์เป้าหมาย โพรบสมัยใหม่ส่วนใหญ่จะตรวจจับ VTref และปรับระดับสัญญาณขับตามแรงดันดังกล่าว โดยรองรับอุปกรณ์เป้าหมายที่ 1.8 V, 3.3 V และ 5 V การเชื่อมต่อโพรบ 3.3 V เข้ากับอุปกรณ์เป้าหมาย 1.8 V โดยตรงโดยไม่ใช้การปรับระดับแรงดันไฟฟ้าอาจทำให้เซลล์ I/O ของอุปกรณ์เป้าหมายเสียหายได้ แม้ว่าการสื่อสารจะดูเหมือนทำงานได้ในตอนแรกก็ตาม

ตัวต้านทานดึงขึ้น (pull-up) ของ SWDIO: 10 kΩ ต่อกับ VCC เป็นค่าเริ่มต้นทั่วไป และอาจลดลงเป็น 4.7 kΩ หากเวลาขอบสัญญาณช้าเกินไปเมื่อใช้ SWDCLK ที่ความถี่สูง

ความยาวของเส้นทางสัญญาณ: ควรทำให้เส้นทางสัญญาณ SWDIO และ SWDCLK สั้นและมีความยาวใกล้เคียงกัน เส้นทางสัญญาณที่ยาวเกินไปสำหรับสัญญาณที่มีการเปลี่ยนสถานะอย่างรวดเร็วอาจทำให้เกิดการสะท้อนของสัญญาณและส่งผลเสียต่อความสมบูรณ์ของสัญญาณ

การแยกสัญญาณรบกวน: วางตัวเก็บประจุสำหรับดีคัปปลิงขนาด 100 nF ไว้ใกล้กับขา VDD ของ MCU เพื่อช่วยรักษาความสมบูรณ์ของแหล่งจ่ายไฟและลดผลกระทบจากการเปลี่ยนแปลงกระแสของระบบ

ความขัดแย้งของ GPIO: ตรวจสอบให้แน่ใจว่าพิน SWDIO และ SWDCLK ไม่ได้ถูกกำหนดให้ใช้งานโดยอุปกรณ์ต่อพ่วงอื่นในเฟิร์มแวร์ก่อนที่จะพยายามเชื่อมต่อ

สำหรับข้อมูลอ้างอิงเกี่ยวกับการจัดเรียงขาคอนเนคเตอร์แบบสมบูรณ์ แผนภาพการเดินสายระดับแรงดันไฟฟ้า และคำแนะนำเกี่ยวกับการจัดวาง PCB โปรดดูข้อมูลอ้างอิงเกี่ยวกับการจัดเรียงขาคอนเนคเตอร์และการเดินสาย SWD

อินเทอร์เฟซ SWD ในระบบฝังตัว — การดีบัก การเขียนโปรแกรม และการใช้งานจริง

การเข้าใจโปรโตคอลเป็นพื้นฐานสำคัญ แต่คำถามที่สำคัญกว่าสำหรับทีมพัฒนาอุปกรณ์ฝังตัวส่วนใหญ่คือ SWD จะเข้ากับวงจรชีวิตของผลิตภัณฑ์ได้อย่างไร ตั้งแต่การเริ่มต้นใช้งานไปจนถึงการเขียนโปรแกรมเพื่อการผลิตและการบำรุงรักษาภาคสนาม แต่ละขั้นตอนมีข้อกำหนดที่แตกต่างกัน และ SWD สามารถรองรับข้อกำหนดเหล่านั้นทั้งหมดผ่านอินเทอร์เฟซแบบสองสายเดียวกัน

การแฟลชเฟิร์มแวร์และการเขียนโปรแกรมแบบ In-Circuit ผ่าน SWD

SWD เป็นเส้นทางหลักสำหรับการเขียนโปรแกรมแบบ in-circuit สำหรับเป้าหมาย ARM Cortex-M และอุปกรณ์บางประเภทที่ใช้ Cortex-A โดยไม่จำเป็นต้องมีบูตโหลดเดอร์อยู่แล้วในเป้าหมาย โพรบดีบักจะเชื่อมต่อโดยตรงกับพอร์ตดีบักของโปรเซสเซอร์ หยุดการทำงานของคอร์ และเขียนข้อมูลลงในแฟลชผ่านตัวควบคุมแฟลชที่แมปอยู่ในหน่วยความจำ

ลำดับการเขียนโปรแกรมโดยทั่วไปมีขั้นตอนดังต่อไปนี้:

  • เชื่อมต่อ: โพรบดีบักจะเริ่มการสื่อสาร SWD และอ่าน IDCODE ของอุปกรณ์เป้าหมายเพื่อยืนยันตัวตนของอุปกรณ์
  • หยุด: โพรบจะหยุดการทำงานของคอร์ Cortex ผ่านพอร์ตดีบัก
  • ลบ: โพรบจะลบเซกเตอร์แฟลชของเป้าหมายโดยใช้อัลกอริทึมแฟลชที่โหลดไว้ใน RAM ของเป้าหมาย
  • โปรแกรม: ข้อมูลไบนารีจะถูกเขียนลงในแต่ละหน้า โดยใช้อัลกอริทึมแฟลชที่ทำงานบนเป้าหมายเพื่อดำเนินการเขียนแต่ละครั้ง
  • ตรวจสอบ: โพรบจะอ่านข้อมูลที่เขียนกลับมาและเปรียบเทียบกับไฟล์ไบนารีต้นฉบับ
  • รีเซ็ต: โพรบจะปล่อยคอร์ และเฟิร์มแวร์จะเริ่มทำงาน

อัลกอริทึมแฟลชนั้นขึ้นอยู่กับผู้ผลิต MCU แต่ละราย OpenOCD, pyOCD และ IDE ของผู้ผลิตแต่ละรายจะมีไลบรารีของอัลกอริทึมเหล่านี้ เมื่อ MCU รุ่นใหม่ยังไม่อยู่ในฐานข้อมูลของเครื่องมือ จะต้องเพิ่มอัลกอริทึมเข้าไปด้วยตนเอง ซึ่งเป็นปัญหาที่พบได้บ่อยเมื่อนำซิลิคอนรุ่นใหม่มาใช้ในระหว่างการผลิต

มีวิธีหลักสองวิธีในการเขียนโปรแกรมผ่าน SWD จากฝั่งโฮสต์ วิธีแรกคือการเขียนโปรแกรมแบบลากและวาง (ใช้โดยโพรบที่รองรับ CMSIS-DAP และ DAPLink) โดยโพรบจะถูกมองเป็นอุปกรณ์จัดเก็บข้อมูลแบบ USB การลากไฟล์ไบนารีลงไปจะทำให้ลำดับการแฟลชทำงานโดยอัตโนมัติ วิธีนี้รวดเร็วสำหรับช่างเทคนิคภาคสนามและไม่จำเป็นต้องติดตั้งซอฟต์แวร์ ส่วนวิธีที่สองคือการเขียนโปรแกรมโดยควบคุมจากโฮสต์ผ่าน GDB ร่วมกับ OpenOCD หรือเครื่องมือ CLI ของผู้ผลิต เช่น STM32CubeProgrammer หรือ nrfjprog ซึ่งให้การควบคุมมากกว่า โดยรองรับการเขียนสคริปต์ การบันทึกผลว่าผ่านหรือไม่ผ่าน และการทำงานร่วมกับระบบทดสอบอัตโนมัติ

สำหรับคำแนะนำเกี่ยวกับการเลือกโพรบและการตั้งค่าชุดเครื่องมือฝั่งโฮสต์ โปรดดูข้อมูลเกี่ยวกับการเลือกและการกำหนดค่าโพรบดีบัก SWD

ความถี่ SWDCLK เป็นตัวกำหนดความเร็วในการเขียนโปรแกรมที่ใช้งานได้จริง อุปกรณ์ประมวลผล Cortex-M ส่วนใหญ่รองรับ SWDCLK ได้ถึง 10 MHz ภายใต้สภาวะที่เสถียร แต่เครื่องมือที่ใช้ในงานผลิตจำนวนมากมักทำงานที่ 4–8 MHz เพื่อรักษาระยะเผื่อสำหรับความผันแปรของอุณหภูมิและความยาวสายเคเบิล ที่ความถี่ 4 MHz การเขียนโปรแกรมภาพข้อมูลขนาด 256 KB โดยทั่วไปจะใช้เวลาน้อยกว่า 10 วินาที รวมขั้นตอนการลบและการตรวจสอบ เครื่องเขียนโปรแกรมแบบกลุ่ม (gang programming fixture) ซึ่งโฮสต์หนึ่งตัวเขียนโปรแกรมให้กับบอร์ดสี่หรือแปดบอร์ดพร้อมกัน เป็นเรื่องปกติในการผลิตจำนวนมากเพื่อให้บรรลุเป้าหมายด้านเวลารอบการผลิต

ตำแหน่งของจุดทดสอบมีความสำคัญ จุดทดสอบ SWDIO, SWDCLK, GND และ VCC ต้องสามารถเข้าถึงได้จากด้านของอุปกรณ์จับยึดบนแผงวงจร การวางจุดทดสอบเหล่านี้ไว้ด้านเดียวกับชิ้นส่วนอิเล็กทรอนิกส์อาจทำให้ต้องใช้อุปกรณ์จับยึดแบบสองด้าน ซึ่งเพิ่มต้นทุนและความซับซ้อน การจัดกลุ่มจุดทดสอบเหล่านี้ไว้ในตำแหน่งที่สม่ำเสมอในผลิตภัณฑ์รุ่นต่างๆ จะทำให้สามารถนำอุปกรณ์จับยึดกลับมาใช้ใหม่ได้อย่างมีประสิทธิภาพ

การดีบักแบบเรียลไทม์ การติดตาม และการผสานรวม CoreSight

SWD เป็นเลเยอร์การขนส่งสำหรับสถาปัตยกรรมดีบัก CoreSight ของ ARM การทำความเข้าใจสถาปัตยกรรมนี้จะช่วยอธิบายว่าโพรบสามารถทำอะไรได้บ้างเมื่อเชื่อมต่อกับเป้าหมายแล้ว

CoreSight จัดการการเข้าถึงการดีบักผ่านพอร์ตสองประเภท พอร์ตดีบัก (Debug Port หรือ DP) คืออินเทอร์เฟซ SWD เอง ซึ่งทำหน้าที่จัดการการเชื่อมต่อ การตรวจสอบสิทธิ์ และการควบคุมในระดับพอร์ต ส่วนพอร์ตเข้าถึง (Access Port หรือ AP) อยู่ด้านหลัง DP และให้การเข้าถึงทรัพยากรเฉพาะ AHB-AP ให้สิทธิ์การอ่านและเขียนไปยังแผนที่หน่วยความจำ และรีจิสเตอร์ดีบักของคอร์ก็อยู่ภายในพื้นที่ดังกล่าว ผ่าน AHB-AP โพรบสามารถอ่านและเขียนไปยังที่อยู่หน่วยความจำ รีจิสเตอร์ของอุปกรณ์ต่อพ่วง หรือรีจิสเตอร์ของ CPU ได้ในขณะที่คอร์หยุดทำงาน

เบรกพอยต์และวอชพอยต์ทำงานผ่านหน่วย FPB และ DWT ในคอร์ Cortex-M โดยเบรกพอยต์แบบฮาร์ดแวร์จะหยุดการทำงานของโปรเซสเซอร์เมื่อการประมวลผลไปถึงที่อยู่ที่กำหนด ส่วนวอชพอยต์จะหยุดการทำงานเมื่อมีการเข้าถึงหน่วยความจำ ไม่ว่าจะเป็นการอ่าน การเขียน หรือทั้งสองอย่าง ไปยังที่อยู่หรือช่วงที่อยู่ที่กำหนด โดยทั่วไป Cortex-M4 จะมีเบรกพอยต์แบบฮาร์ดแวร์หกตัวและวอชพอยต์สี่ตัว หากต้องการใช้งานเกินจำนวนดังกล่าว จะต้องใช้เบรกพอยต์แบบซอฟต์แวร์ ซึ่งจะแก้ไขคำสั่งในแฟลชและมีข้อจำกัดของตัวเอง

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

การติดตามข้อมูลผ่าน SWO ช่วยแก้ปัญหานี้ได้ พิน Serial Wire Output (SWO) ส่งข้อมูลจาก Instrumentation Trace Macrocell (ITM) และในคอร์ที่มี ETM ก็สามารถส่งข้อมูลการติดตามคำสั่งได้ การติดตามข้อมูลผ่าน ITM ช่วยให้เฟิร์มแวร์เขียนข้อความบันทึกไปยัง FIFO ซอฟต์แวร์ 32 ช่อง โพรบจะอ่านข้อมูลเหล่านั้นแบบเรียลไทม์โดยไม่ต้องหยุดการทำงานของคอร์ วิธีนี้เทียบได้กับการดีบักด้วย printf ในระบบฝังตัว แต่มีค่าใช้จ่ายด้านประสิทธิภาพต่ำมากเมื่อเทียบกับการส่งข้อมูลผ่าน UART การเขียนข้อมูลไปยัง ITM โดยทั่วไปใช้เวลาเพียงไม่กี่รอบสัญญาณนาฬิกา และข้อมูลจะถูกส่งออกผ่าน SWO ด้วยอัตราความเร็วสูงถึงหลายเมกะบิตต่อวินาที

RTT (Real-Time Transfer) เป็นทางเลือกเมื่อ SWO ไม่พร้อมใช้งานหรือเมื่อโพรบไม่รองรับการติดตาม RTT ใช้บัฟเฟอร์แบบวงแหวนขนาดเล็กใน RAM ของเป้าหมาย โพรบจะอ่านบัฟเฟอร์ผ่านพอร์ตดีบักในขณะที่คอร์ยังทำงานอยู่ โดยไม่จำเป็นต้องใช้พินเพิ่มเติม ข้อเสียคือใช้ RAM มากขึ้น โดยบัฟเฟอร์ RTT ทั่วไปใช้พื้นที่ประมาณ 512 ไบต์ถึง 4 KB ขึ้นอยู่กับปริมาณข้อมูลบันทึก และมีความหน่วงเล็กน้อยเมื่อเทียบกับ SWO

สำหรับวิธีการตั้งค่าเบรกพอยต์ การกำหนดค่าการติดตาม SWO และ RTT ด้วยตนเอง โปรดดูขั้นตอนการตั้งค่าสภาพแวดล้อมการดีบัก SWD แบบทีละขั้นตอน

SWD ในด้าน HMI อุตสาหกรรม, IoT และระบบฝังตัวสำหรับการผลิต

ในอุปกรณ์ควบคุม HMI อุตสาหกรรมที่ใช้ ARM โหนด IoT ไมโครคอนโทรลเลอร์สำหรับขับมอเตอร์ และอุปกรณ์ระบบอัตโนมัติในอาคาร SWD มีบทบาทที่แตกต่างกันสามประการในวงจรชีวิตของผลิตภัณฑ์ ได้แก่ การดีบักระหว่างการพัฒนา การเขียนโปรแกรมเพื่อการผลิต และการบำรุงรักษาภาคสนาม แต่ละบทบาทมีข้อกำหนดที่แตกต่างกัน และอินเทอร์เฟซนี้สามารถรองรับทั้งสามบทบาทผ่านการเชื่อมต่อทางกายภาพเดียวกัน

HMI ในภาคอุตสาหกรรมและตัวควบคุมระบบอัตโนมัติใช้ SWD เป็นหลักสำหรับการเขียนโปรแกรมในสายการผลิตและการอัปเดตเฟิร์มแวร์ภาคสนาม โดยทั่วไป อุปกรณ์ทดสอบในสายการผลิต HMI จะใช้ขั้วต่อแบบ pogo-pin บนจุดทดสอบ SWDIO, SWDCLK, GND และ VCC โฮสต์จะเรียกใช้ลำดับการแฟลชตามสคริปต์ บันทึกผลลัพธ์พร้อมหมายเลขซีเรียลของบอร์ด และแจ้งเตือนความล้มเหลวเพื่อดำเนินการแก้ไข เวลาต่อบอร์ดโดยทั่วไปอยู่ที่ 15–30 วินาที รวมขั้นตอนการทดสอบการทำงาน โดยอินเทอร์เฟซ SWD เองใช้เวลาเพิ่มขึ้นไม่ถึง 10 วินาทีจากเวลาทั้งหมดนั้น

โหนด IoT อุตสาหกรรมที่ทำงานบนขอบเครือข่ายมักใช้เป้าหมาย Cortex-M33 หรือ Cortex-M4 โดยเปิดใช้งาน TrustZone หรือกลไกป้องกันการอ่านข้อมูลระหว่างการผลิต ในระหว่างการพัฒนา SWD จะให้สิทธิ์การเข้าถึงการดีบักอย่างเต็มที่ ก่อนการจัดส่ง เฟิร์มแวร์จะเปิดใช้งานการป้องกันการอ่านข้อมูล ซึ่งอาจทำได้โดยการเขียนค่าลงในไบต์ตัวเลือกหรือรีจิสเตอร์ฟิวส์ เพื่อปิดใช้งานการเข้าถึงการดีบักผ่าน SWD และป้องกันการอ่านข้อมูลจากหน่วยความจำ เนื้อหาของแฟลชจะไม่สามารถอ่านได้ผ่านพอร์ตดีบัก นี่คือกลไกมาตรฐานสำหรับการปกป้องทรัพย์สินทางปัญญาของเฟิร์มแวร์ในผลิตภัณฑ์ที่จัดส่ง

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

ไมโครคอนโทรลเลอร์ (MCU) สำหรับขับมอเตอร์และอุปกรณ์อิเล็กทรอนิกส์กำลังเพิ่มข้อจำกัดด้านเวลา การออกแบบเหล่านี้จำนวนมากใช้ขา SWD เป็น GPIO ในการทำงานปกติ โดย MCU จะทำการแมป SWDIO และ SWDCLK ไปยังฟังก์ชันอื่นหลังจากบูตเครื่อง การเชื่อมต่อโพรบหลังจากทำการแมปใหม่อาจล้มเหลวโดยไม่มีการแจ้งเตือนใดๆ วิธีแก้ปัญหาคือหน้าต่างดีบัก ซึ่งเป็นช่วงเวลาสั้นๆ ระหว่างการเริ่มต้นระบบที่ถูกกระตุ้นโดย GPIO หรือเงื่อนไขการบูตเฉพาะ โดยเฟิร์มแวร์จะคง SWD ให้ทำงานอยู่ก่อนที่จะทำการแมปพินใหม่ วิธีนี้ช่วยให้โพรบสามารถเชื่อมต่อได้ในระหว่างหน้าต่างดังกล่าวและหยุดการทำงานของคอร์ก่อนที่จะทำการแมปใหม่

ชิป SoC แบบดูอัลคอร์ ซึ่งพบได้บ่อยขึ้นในไมโครคอนโทรลเลอร์ระดับอุตสาหกรรม เช่น ซีรีส์ STM32H7 หรือ NXP i.MX RT อาจจำเป็นต้องใช้ SWD multidrop หรือขั้วต่อดีบักแยกต่างหากสำหรับแต่ละคอร์ SWD multidrop จะกำหนดรหัสเป้าหมายที่ไม่ซ้ำกันให้กับแต่ละคอร์บนสาย SWDCLK/SWDIO เดียวกัน อย่างไรก็ตาม โพรบบางตัวอาจไม่รองรับฟังก์ชันนี้ โปรดตรวจสอบเวอร์ชันเฟิร์มแวร์ของโพรบและการรองรับ multidrop ก่อนนำสถาปัตยกรรมดีบัก SWD แบบดูอัลคอร์ไปใช้ในการออกแบบใหม่

การผสานรวม CI/CD เป็นแนวทางปฏิบัติมาตรฐานในทีมพัฒนาอุปกรณ์ฝังตัวที่ส่งมอบผลิตภัณฑ์ที่เชื่อมต่ออินเทอร์เน็ต OpenOCD, pyOCD และเครื่องมือ CLI ของผู้จำหน่ายส่วนใหญ่มีอินเทอร์เฟซบรรทัดคำสั่งที่ไปป์ไลน์การสร้างสามารถเรียกใช้ได้โดยตรง ขั้นตอนการทดสอบอัตโนมัติทั่วไปจะทำการแฟลชเฟิร์มแวร์ เรียกใช้การทดสอบตัวเองเมื่อเปิดเครื่องผ่านพอร์ตดีบัก อ่านผลลัพธ์ว่าผ่านหรือไม่ผ่านจากที่อยู่หน่วยความจำที่ทราบ และบันทึกผลลัพธ์ วิธีนี้ช่วยตรวจจับความล้มเหลวในการเขียนแฟลชและข้อผิดพลาดพื้นฐานของเฟิร์มแวร์ในทุกการสร้าง ไม่ใช่เฉพาะในช่วงรอบการทดสอบด้วยตนเองเท่านั้น

STONE HMI ใช้กระบวนการพัฒนาเฟิร์มแวร์ที่มีโครงสร้างในโครงการระบบอัตโนมัติต่างๆ

สำหรับทีมพัฒนาผลิตภัณฑ์ฝังตัว ระเบียบวินัยในกระบวนการทำงานเช่นนี้มีความสำคัญมากกว่าแค่ในห้องปฏิบัติการพัฒนา เมื่อขั้นตอนการเขียนโปรแกรมสำหรับการผลิต การทดสอบอัตโนมัติ และการแก้ไขปัญหาในภาคสนามได้รับการกำหนดและทดสอบก่อนการผลิตครั้งแรก ความเสี่ยงในการส่งมอบจะลดลงอย่างมาก บทบาทของ SWD ในขั้นตอนการทำงานนั้นไม่ใช่เพียงเครื่องมือช่วยในการดีบักเท่านั้น แต่ยังเป็นกลไกที่ทำให้การเขียนโปรแกรมสำหรับการผลิตที่ทำซ้ำได้และตรวจสอบได้เป็นไปได้บนฮาร์ดแวร์ที่ใช้ ARM

คำถามที่พบบ่อยเกี่ยวกับอินเทอร์เฟซ SWD

อินเทอร์เฟซ SWD ใช้สำหรับอะไร?

SWD ให้สิทธิ์การเข้าถึงการดีบัก การแฟลชเฟิร์มแวร์ และการติดตามแบบเรียลไทม์สำหรับโปรเซสเซอร์ ARM Cortex ครอบคลุมวงจรชีวิตของผลิตภัณฑ์อย่างครบถ้วน ได้แก่ การดีบักในช่วงเริ่มต้นการพัฒนา การเขียนโปรแกรมสำหรับการผลิต และการอัปเดตเฟิร์มแวร์ภาคสนาม สถาปัตยกรรมและขั้นตอนการเขียนโปรแกรมได้อธิบายไว้โดยละเอียดในหัวข้อด้านบนแล้ว

SWD ต้องการพินกี่ตัว?

SWD ต้องการพินสองพิน ได้แก่ SWDIO และ SWDCLK พินที่สามคือ nRESET ซึ่งเป็นพินเสริม แต่แนะนำให้ใช้เพื่อให้สามารถเชื่อมต่อโพรบได้อย่างน่าเชื่อถือเมื่อเป้าหมายอาจอยู่ในสถานะที่ไม่แน่นอน พินที่สี่คือ SWO ซึ่งเพิ่มความสามารถในการส่งออกข้อมูลการติดตาม ดูรายละเอียดสัญญาณทั้งหมดได้ใน H3 1.1

SWD สามารถนำไปใช้ในการเขียนโปรแกรมเพื่อการผลิตได้หรือไม่ ไม่ใช่แค่สำหรับการดีบักในระหว่างการพัฒนาเท่านั้น?

ใช่ การเขียนโปรแกรมสำหรับการผลิตผ่าน SWD เป็นวิธีมาตรฐานสำหรับผลิตภัณฑ์ระบบฝังตัวที่ใช้ ARM อุปกรณ์จับยึดแบบ pogo-pin เครื่องเขียนโปรแกรมแบบกลุ่ม และเครื่องมือ CLI แบบสคริปต์ ล้วนใช้ส่วนต่อประสาน SWD สำหรับการเขียนโปรแกรมแฟลชในปริมาณมาก ลำดับการเขียนโปรแกรม ข้อจำกัดด้านความเร็ว และปัจจัยด้านการออกแบบอุปกรณ์จับยึดจะกล่าวถึงใน H3 2.1

SWD และ UART แตกต่างกันอย่างไรในการแฟลชเฟิร์มแวร์?

การแฟลชเฟิร์มแวร์ผ่าน UART ใช้บูตโหลดเดอร์ที่มีอยู่แล้วใน ROM หรือหน่วยความจำแฟลชของ MCU โปรเซสเซอร์ต้องทำงานและบูตโหลดเดอร์ต้องอยู่ในสถานะทำงาน ส่วน SWD จะข้ามขั้นตอนการทำงานของโปรเซสเซอร์ไปโดยสิ้นเชิง โดยเขียนข้อมูลลงในหน่วยความจำแฟลชโดยตรงผ่านพอร์ตดีบัก SWD สามารถทำงานได้แม้ว่าเป้าหมายจะไม่มีเฟิร์มแวร์ อิมเมจเฟิร์มแวร์เสียหาย หรือโปรเซสเซอร์ค้างอยู่ก็ตาม

SWD รองรับการใช้งานบนโปรเซสเซอร์ ARM Cortex ทุกรุ่นหรือไม่?

SWD รองรับการใช้งานบนโปรเซสเซอร์ ARM Cortex-M และอุปกรณ์ ARM บางประเภทที่ใช้ Cortex-A โดยเป็นส่วนหนึ่งของข้อกำหนด ARM Debug Interface (ADI) และถูกรวมอยู่ในซิลิคอน Cortex-M ตั้งแต่ Cortex-M0 เป็นต้นมา โปรเซสเซอร์ Cortex-A รุ่นเก่าหรือรุ่นฝังตัวบางรุ่นอาจมีเพียง JTAG เท่านั้น แต่รุ่นเหล่านั้นพบได้น้อยกว่าในงานออกแบบปัจจุบัน

ฉันจะปิดใช้งาน SWD ในผลิตภัณฑ์ที่จัดส่งแล้วเพื่อป้องกันเฟิร์มแวร์ได้อย่างไร?

ไมโครคอนโทรลเลอร์ ARM Cortex-M ส่วนใหญ่มีกลไกป้องกันการอ่านข้อมูล เช่น การเขียนค่าลงในไบต์ตัวเลือก หรือการใช้ฟิวส์รักษาความปลอดภัย เพื่อปิดใช้งานการเข้าถึงพอร์ตดีบักและป้องกันการอ่านข้อมูลจากหน่วยความจำ การเปิดใช้งานอีกครั้งอาจต้องลบข้อมูลทั้งหมด ซึ่งจะทำลายเฟิร์มแวร์ ขั้นตอนการรักษาความปลอดภัยและข้อควรพิจารณาในการแก้ไขงานจะกล่าวถึงใน H3 2.3

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

การทำงานของอินเทอร์เฟซ SWD ในระบบฝังตัว (Embedded Systems)

การทำความเข้าใจ SWD ช่วยให้เข้าใจวิธีที่นักพัฒนาระบบสมองกลฝังตัวใช้ในการโปรแกรมและแก้ไขปัญหาไมโครคอนโทรลเลอร์

Lorem ipsum dolor amet consectetur adipiscing elit tortor massa arcu non.

อินเทอร์เฟซ SWD คืออะไรและทำงานอย่างไร

ทีมที่จัดส่งผลิตภัณฑ์ระบบฝังตัวที่ใช้ ARM มักพบกับสถานการณ์ที่คุ้นเคยระหว่างการเริ่มต้นใช้งาน: เฟิร์มแวร์โหลดเสร็จ บอร์ดเปิดทำงาน แล้วก็ไม่มีอะไรเกิดขึ้น ไม่มีเอาต์พุต ไม่มีการตอบสนอง และไม่มีข้อผิดพลาดที่เห็นได้ชัดเจน บันทึก UART เงียบสนิท ไฟ LED ดับสนิท หากไม่มีวิธีหยุดโปรเซสเซอร์และตรวจสอบสถานะของรีจิสเตอร์ การตรวจสอบปัญหาก็จะหยุดชะงักทันที

นี่คือสถานการณ์ที่อินเทอร์เฟซ SWD ถูกออกแบบมาเพื่อแก้ไขโดยเฉพาะ โดยช่วยให้วิศวกรเข้าถึงโปรเซสเซอร์ได้โดยตรง ไม่ว่าจะเป็นการหยุดการทำงาน การอ่านหน่วยความจำ การตั้งเบรกพอยต์ และการเขียนโปรแกรมใหม่ โดยใช้เพียงสองสายสัญญาณบนแผงวงจรพิมพ์ (PCB) การผสมผสานระหว่างการใช้พินเพียงเล็กน้อยและการเข้าถึงในระดับลึกนี้เองที่ทำให้ SWD กลายเป็นอินเทอร์เฟซมาตรฐานสำหรับการดีบักและการเขียนโปรแกรมในงานออกแบบระบบฝังตัวที่ใช้ ARM Cortex

โปรโตคอลการดีบักแบบสายอนุกรม — สถาปัตยกรรมสัญญาณและบทบาทของขาพิน

SWD ใช้สัญญาณหลักสองสัญญาณ ได้แก่ SWDIO และ SWDCLK โดย SWDCLK ทำหน้าที่ส่งสัญญาณนาฬิกาจากโพรบดีบักไปยัง MCU เป้าหมาย ส่วน SWDIO เป็นสัญญาณแบบสองทิศทาง ซึ่งใช้ส่งทั้งคำสั่งจากโฮสต์และคำตอบจากเป้าหมายผ่านสายเพียงเส้นเดียว โดยใช้เฟรมแบบฮาล์ฟดูเพล็กซ์ (half-duplex)

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

สัญญาณเสริมอีกสองสัญญาณช่วยขยายความสามารถของอินเทอร์เฟซ สาย nRESET ช่วยให้โพรบสามารถสั่งรีเซ็ตฮาร์ดแวร์ของเป้าหมายได้ ซึ่งมีประโยชน์เมื่อโปรเซสเซอร์ค้างและไม่สามารถรีเซ็ตด้วยซอฟต์แวร์ผ่านพอร์ตดีบักได้อย่างน่าเชื่อถือ ส่วนขา SWO (Serial Wire Output) ใช้ส่งข้อมูลการติดตามจากเป้าหมายไปยังโพรบ การบันทึกข้อมูล printf ผ่าน ITM และการติดตามคำสั่งผ่าน ETM ต่างก็สามารถใช้ SWO เป็นเส้นทางเอาต์พุตได้

สายสัญญาณสองเส้นช่วยให้สามารถหยุดการทำงาน เข้าถึงหน่วยความจำ เขียนโปรแกรมแฟลช และกำหนดเบรกพอยต์ได้ การเพิ่ม SWO เป็นพินที่สามจะช่วยให้สามารถติดตามการทำงานแบบเรียลไทม์ได้โดยไม่ต้องใช้พอร์ตติดตาม JTAG แบบเต็มรูปแบบ

อินเทอร์เฟซทางไฟฟ้าไม่ซับซ้อน SWDIO ต้องใช้ตัวต้านทานแบบดึงขึ้น (pull-up resistor) ซึ่งโดยทั่วไปมีค่า 10 kΩ เพื่อรักษาระดับสัญญาณให้สูงเมื่อไม่มีอุปกรณ์ใดกำลังขับสัญญาณอยู่ ส่วน SWDCLK สามารถปล่อยลอยหรือใช้ตัวต้านทานดึงลงได้ ค่าของตัวต้านทานดึงขึ้นมีความสำคัญ หากมีค่ามากเกินไป สัญญาณจะเปลี่ยนระดับได้ช้าเมื่อใช้ความถี่สัญญาณนาฬิกาสูง แต่หากมีค่าน้อยเกินไป ก็จะเพิ่มภาระต่อไดรเวอร์ของโพรบในช่วงการเปลี่ยนสถานะ

SWD เทียบกับ JTAG — เมื่อใดที่แต่ละโปรโตคอลเหมาะสมที่สุด

ทั้ง SWD และ JTAG มาจากข้อกำหนด ARM Debug Interface (ADI) เดียวกัน ทั้งสองใช้สถาปัตยกรรมพอร์ตดีบักและพอร์ตเข้าถึงพื้นฐานเดียวกัน ความแตกต่างหลักอยู่ที่โครงสร้างทางกายภาพและจำนวนสัญญาณ ไม่ใช่ความสามารถพื้นฐานในการดีบัก

JTAG ใช้สัญญาณห้าสัญญาณ ได้แก่ TCK, TMS, TDI, TDO และ TRST (ถ้ามี) อุปกรณ์หลายตัวสามารถใช้ JTAG chain เดียวกันได้ โดยแต่ละอุปกรณ์จะส่งข้อมูลจาก TDI ไปยัง TDO ทำให้เกิดการเชื่อมต่อแบบลูกโซ่ ในขณะที่ SWD เป็นการเชื่อมต่อแบบจุดต่อจุด โดยโพรบหนึ่งตัวเชื่อมต่อกับเป้าหมายหนึ่งตัว นี่คือข้อแลกเปลี่ยนหลักระหว่างสองอินเทอร์เฟซ

ปัจจุบัน ARM Cortex-M ส่วนใหญ่ใช้ SWD เป็นอินเทอร์เฟซหลัก เนื่องจากข้อจำกัดด้านจำนวนพินบนแผงวงจรขนาดเล็ก การออกแบบแบบสองสายจึงเป็นทางเลือกที่เหมาะสมกว่า ในขณะที่ JTAG ใช้พินจำนวนมากกว่า สำหรับ SoC แบบดูอัลคอร์ หรือบอร์ดที่มีอุปกรณ์ที่สามารถตั้งโปรแกรมได้หลายตัว โครงสร้างแบบลูกโซ่ของ JTAG ยังคงเป็นตัวเลือกที่ดีกว่า

การสลับระหว่าง JTAG และ SWD บนขั้วต่อทางกายภาพเดียวกันนั้นเป็นไปได้ในอุปกรณ์ ARM หลายรุ่น ลำดับการเลือกจาก JTAG เป็น SWD เกี่ยวข้องกับการส่งลำดับบิตเฉพาะขนาด 16 บิตผ่าน TMS/SWDIO ขณะที่สัญญาณนาฬิกา TCK/SWDCLK ทำงาน โพรบดีบักส่วนใหญ่จัดการขั้นตอนนี้โดยอัตโนมัติ ขั้วต่อดีบัก ARM Cortex แบบ 10 พินและ 20 พินรองรับทั้งสองโปรโตคอลในพื้นที่เดียวกัน ดังนั้นการออกแบบ PCB จึงไม่จำเป็นต้องเปลี่ยนแปลงเมื่อสลับระหว่างสองโปรโตคอลนี้

สำหรับเป้าหมาย ARM แบบแกนเดี่ยวที่มีพื้นที่บนแผงวงจรจำกัด SWD เป็นตัวเลือกที่เหมาะสมที่สุด ควรสงวน JTAG ไว้สำหรับงานออกแบบที่ต้องการการเชื่อมต่ออุปกรณ์หลายตัวผ่าน chain หรือจำเป็นต้องใช้ความสามารถเฉพาะของ JTAG

ขั้วต่อ SWD, แผนผังขา และความเข้ากันได้ทางไฟฟ้า

ขั้วต่อ ARM Cortex Debug มีสองขนาดมาตรฐาน แบบ 20 พิน (ระยะห่าง 0.1 นิ้ว) เป็นรูปแบบคลาสสิกที่ใช้ในบอร์ดประเมินผลและอะแดปเตอร์ดีบักส่วนใหญ่ ส่วนแบบ 10 พิน (ระยะห่าง 0.05 นิ้ว, 2×5) พบได้ทั่วไปในฮาร์ดแวร์ที่ใช้งานจริงซึ่งมีพื้นที่บนบอร์ดจำกัด ทั้งสองแบบมีสัญญาณ SWDIO, SWDCLK, nRESET, SWO, VTref (การตรวจจับแรงดันไฟฟ้าของเป้าหมาย) และ GND

Tag-Connect เป็นทางเลือกยอดนิยมสำหรับ PCB ที่ผลิตในปริมาณมาก โดยช่วยขจัดความจำเป็นในการติดตั้งขั้วต่อบนบอร์ดโดยใช้หัววัดแบบสปริงสัมผัสกับแผ่นโลหะขนาดเล็กบน PCB รุ่น TC2030-IDC ใช้แผ่นสัมผัสหกแผ่นสำหรับการเชื่อมต่อ SWD และถูกนำไปใช้อย่างแพร่หลายในอุปกรณ์ที่ผลิตจำนวนมาก ช่วยลดต้นทุนของขั้วต่อบนแผงวงจรและมีขนาดเล็กพอสำหรับพื้นที่ติดตั้งที่จำกัด

ความเข้ากันได้ของแรงดันไฟฟ้าเป็นสิ่งสำคัญที่ต้องใส่ใจ โพรบต้องรองรับระดับแรงดันไฟฟ้าที่เหมาะสมกับแรงดันไฟฟ้า I/O ของอุปกรณ์เป้าหมาย โพรบสมัยใหม่ส่วนใหญ่จะตรวจจับ VTref และปรับระดับสัญญาณขับตามแรงดันดังกล่าว โดยรองรับอุปกรณ์เป้าหมายที่ 1.8 V, 3.3 V และ 5 V การเชื่อมต่อโพรบ 3.3 V เข้ากับอุปกรณ์เป้าหมาย 1.8 V โดยตรงโดยไม่ใช้การปรับระดับแรงดันไฟฟ้าอาจทำให้เซลล์ I/O ของอุปกรณ์เป้าหมายเสียหายได้ แม้ว่าการสื่อสารจะดูเหมือนทำงานได้ในตอนแรกก็ตาม

ตัวต้านทานดึงขึ้น (pull-up) ของ SWDIO: 10 kΩ ต่อกับ VCC เป็นค่าเริ่มต้นทั่วไป และอาจลดลงเป็น 4.7 kΩ หากเวลาขอบสัญญาณช้าเกินไปเมื่อใช้ SWDCLK ที่ความถี่สูง

ความยาวของเส้นทางสัญญาณ: ควรทำให้เส้นทางสัญญาณ SWDIO และ SWDCLK สั้นและมีความยาวใกล้เคียงกัน เส้นทางสัญญาณที่ยาวเกินไปสำหรับสัญญาณที่มีการเปลี่ยนสถานะอย่างรวดเร็วอาจทำให้เกิดการสะท้อนของสัญญาณและส่งผลเสียต่อความสมบูรณ์ของสัญญาณ

การแยกสัญญาณรบกวน: วางตัวเก็บประจุสำหรับดีคัปปลิงขนาด 100 nF ไว้ใกล้กับขา VDD ของ MCU เพื่อช่วยรักษาความสมบูรณ์ของแหล่งจ่ายไฟและลดผลกระทบจากการเปลี่ยนแปลงกระแสของระบบ

ความขัดแย้งของ GPIO: ตรวจสอบให้แน่ใจว่าพิน SWDIO และ SWDCLK ไม่ได้ถูกกำหนดให้ใช้งานโดยอุปกรณ์ต่อพ่วงอื่นในเฟิร์มแวร์ก่อนที่จะพยายามเชื่อมต่อ

สำหรับข้อมูลอ้างอิงเกี่ยวกับการจัดเรียงขาคอนเนคเตอร์แบบสมบูรณ์ แผนภาพการเดินสายระดับแรงดันไฟฟ้า และคำแนะนำเกี่ยวกับการจัดวาง PCB โปรดดูข้อมูลอ้างอิงเกี่ยวกับการจัดเรียงขาคอนเนคเตอร์และการเดินสาย SWD

อินเทอร์เฟซ SWD ในระบบฝังตัว — การดีบัก การเขียนโปรแกรม และการใช้งานจริง

การเข้าใจโปรโตคอลเป็นพื้นฐานสำคัญ แต่คำถามที่สำคัญกว่าสำหรับทีมพัฒนาอุปกรณ์ฝังตัวส่วนใหญ่คือ SWD จะเข้ากับวงจรชีวิตของผลิตภัณฑ์ได้อย่างไร ตั้งแต่การเริ่มต้นใช้งานไปจนถึงการเขียนโปรแกรมเพื่อการผลิตและการบำรุงรักษาภาคสนาม แต่ละขั้นตอนมีข้อกำหนดที่แตกต่างกัน และ SWD สามารถรองรับข้อกำหนดเหล่านั้นทั้งหมดผ่านอินเทอร์เฟซแบบสองสายเดียวกัน

การแฟลชเฟิร์มแวร์และการเขียนโปรแกรมแบบ In-Circuit ผ่าน SWD

SWD เป็นเส้นทางหลักสำหรับการเขียนโปรแกรมแบบ in-circuit สำหรับเป้าหมาย ARM Cortex-M และอุปกรณ์บางประเภทที่ใช้ Cortex-A โดยไม่จำเป็นต้องมีบูตโหลดเดอร์อยู่แล้วในเป้าหมาย โพรบดีบักจะเชื่อมต่อโดยตรงกับพอร์ตดีบักของโปรเซสเซอร์ หยุดการทำงานของคอร์ และเขียนข้อมูลลงในแฟลชผ่านตัวควบคุมแฟลชที่แมปอยู่ในหน่วยความจำ

ลำดับการเขียนโปรแกรมโดยทั่วไปมีขั้นตอนดังต่อไปนี้:

  • เชื่อมต่อ: โพรบดีบักจะเริ่มการสื่อสาร SWD และอ่าน IDCODE ของอุปกรณ์เป้าหมายเพื่อยืนยันตัวตนของอุปกรณ์
  • หยุด: โพรบจะหยุดการทำงานของคอร์ Cortex ผ่านพอร์ตดีบัก
  • ลบ: โพรบจะลบเซกเตอร์แฟลชของเป้าหมายโดยใช้อัลกอริทึมแฟลชที่โหลดไว้ใน RAM ของเป้าหมาย
  • โปรแกรม: ข้อมูลไบนารีจะถูกเขียนลงในแต่ละหน้า โดยใช้อัลกอริทึมแฟลชที่ทำงานบนเป้าหมายเพื่อดำเนินการเขียนแต่ละครั้ง
  • ตรวจสอบ: โพรบจะอ่านข้อมูลที่เขียนกลับมาและเปรียบเทียบกับไฟล์ไบนารีต้นฉบับ
  • รีเซ็ต: โพรบจะปล่อยคอร์ และเฟิร์มแวร์จะเริ่มทำงาน

อัลกอริทึมแฟลชนั้นขึ้นอยู่กับผู้ผลิต MCU แต่ละราย OpenOCD, pyOCD และ IDE ของผู้ผลิตแต่ละรายจะมีไลบรารีของอัลกอริทึมเหล่านี้ เมื่อ MCU รุ่นใหม่ยังไม่อยู่ในฐานข้อมูลของเครื่องมือ จะต้องเพิ่มอัลกอริทึมเข้าไปด้วยตนเอง ซึ่งเป็นปัญหาที่พบได้บ่อยเมื่อนำซิลิคอนรุ่นใหม่มาใช้ในระหว่างการผลิต

มีวิธีหลักสองวิธีในการเขียนโปรแกรมผ่าน SWD จากฝั่งโฮสต์ วิธีแรกคือการเขียนโปรแกรมแบบลากและวาง (ใช้โดยโพรบที่รองรับ CMSIS-DAP และ DAPLink) โดยโพรบจะถูกมองเป็นอุปกรณ์จัดเก็บข้อมูลแบบ USB การลากไฟล์ไบนารีลงไปจะทำให้ลำดับการแฟลชทำงานโดยอัตโนมัติ วิธีนี้รวดเร็วสำหรับช่างเทคนิคภาคสนามและไม่จำเป็นต้องติดตั้งซอฟต์แวร์ ส่วนวิธีที่สองคือการเขียนโปรแกรมโดยควบคุมจากโฮสต์ผ่าน GDB ร่วมกับ OpenOCD หรือเครื่องมือ CLI ของผู้ผลิต เช่น STM32CubeProgrammer หรือ nrfjprog ซึ่งให้การควบคุมมากกว่า โดยรองรับการเขียนสคริปต์ การบันทึกผลว่าผ่านหรือไม่ผ่าน และการทำงานร่วมกับระบบทดสอบอัตโนมัติ

สำหรับคำแนะนำเกี่ยวกับการเลือกโพรบและการตั้งค่าชุดเครื่องมือฝั่งโฮสต์ โปรดดูข้อมูลเกี่ยวกับการเลือกและการกำหนดค่าโพรบดีบัก SWD

ความถี่ SWDCLK เป็นตัวกำหนดความเร็วในการเขียนโปรแกรมที่ใช้งานได้จริง อุปกรณ์ประมวลผล Cortex-M ส่วนใหญ่รองรับ SWDCLK ได้ถึง 10 MHz ภายใต้สภาวะที่เสถียร แต่เครื่องมือที่ใช้ในงานผลิตจำนวนมากมักทำงานที่ 4–8 MHz เพื่อรักษาระยะเผื่อสำหรับความผันแปรของอุณหภูมิและความยาวสายเคเบิล ที่ความถี่ 4 MHz การเขียนโปรแกรมภาพข้อมูลขนาด 256 KB โดยทั่วไปจะใช้เวลาน้อยกว่า 10 วินาที รวมขั้นตอนการลบและการตรวจสอบ เครื่องเขียนโปรแกรมแบบกลุ่ม (gang programming fixture) ซึ่งโฮสต์หนึ่งตัวเขียนโปรแกรมให้กับบอร์ดสี่หรือแปดบอร์ดพร้อมกัน เป็นเรื่องปกติในการผลิตจำนวนมากเพื่อให้บรรลุเป้าหมายด้านเวลารอบการผลิต

ตำแหน่งของจุดทดสอบมีความสำคัญ จุดทดสอบ SWDIO, SWDCLK, GND และ VCC ต้องสามารถเข้าถึงได้จากด้านของอุปกรณ์จับยึดบนแผงวงจร การวางจุดทดสอบเหล่านี้ไว้ด้านเดียวกับชิ้นส่วนอิเล็กทรอนิกส์อาจทำให้ต้องใช้อุปกรณ์จับยึดแบบสองด้าน ซึ่งเพิ่มต้นทุนและความซับซ้อน การจัดกลุ่มจุดทดสอบเหล่านี้ไว้ในตำแหน่งที่สม่ำเสมอในผลิตภัณฑ์รุ่นต่างๆ จะทำให้สามารถนำอุปกรณ์จับยึดกลับมาใช้ใหม่ได้อย่างมีประสิทธิภาพ

การดีบักแบบเรียลไทม์ การติดตาม และการผสานรวม CoreSight

SWD เป็นเลเยอร์การขนส่งสำหรับสถาปัตยกรรมดีบัก CoreSight ของ ARM การทำความเข้าใจสถาปัตยกรรมนี้จะช่วยอธิบายว่าโพรบสามารถทำอะไรได้บ้างเมื่อเชื่อมต่อกับเป้าหมายแล้ว

CoreSight จัดการการเข้าถึงการดีบักผ่านพอร์ตสองประเภท พอร์ตดีบัก (Debug Port หรือ DP) คืออินเทอร์เฟซ SWD เอง ซึ่งทำหน้าที่จัดการการเชื่อมต่อ การตรวจสอบสิทธิ์ และการควบคุมในระดับพอร์ต ส่วนพอร์ตเข้าถึง (Access Port หรือ AP) อยู่ด้านหลัง DP และให้การเข้าถึงทรัพยากรเฉพาะ AHB-AP ให้สิทธิ์การอ่านและเขียนไปยังแผนที่หน่วยความจำ และรีจิสเตอร์ดีบักของคอร์ก็อยู่ภายในพื้นที่ดังกล่าว ผ่าน AHB-AP โพรบสามารถอ่านและเขียนไปยังที่อยู่หน่วยความจำ รีจิสเตอร์ของอุปกรณ์ต่อพ่วง หรือรีจิสเตอร์ของ CPU ได้ในขณะที่คอร์หยุดทำงาน

เบรกพอยต์และวอชพอยต์ทำงานผ่านหน่วย FPB และ DWT ในคอร์ Cortex-M โดยเบรกพอยต์แบบฮาร์ดแวร์จะหยุดการทำงานของโปรเซสเซอร์เมื่อการประมวลผลไปถึงที่อยู่ที่กำหนด ส่วนวอชพอยต์จะหยุดการทำงานเมื่อมีการเข้าถึงหน่วยความจำ ไม่ว่าจะเป็นการอ่าน การเขียน หรือทั้งสองอย่าง ไปยังที่อยู่หรือช่วงที่อยู่ที่กำหนด โดยทั่วไป Cortex-M4 จะมีเบรกพอยต์แบบฮาร์ดแวร์หกตัวและวอชพอยต์สี่ตัว หากต้องการใช้งานเกินจำนวนดังกล่าว จะต้องใช้เบรกพอยต์แบบซอฟต์แวร์ ซึ่งจะแก้ไขคำสั่งในแฟลชและมีข้อจำกัดของตัวเอง

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

การติดตามข้อมูลผ่าน SWO ช่วยแก้ปัญหานี้ได้ พิน Serial Wire Output (SWO) ส่งข้อมูลจาก Instrumentation Trace Macrocell (ITM) และในคอร์ที่มี ETM ก็สามารถส่งข้อมูลการติดตามคำสั่งได้ การติดตามข้อมูลผ่าน ITM ช่วยให้เฟิร์มแวร์เขียนข้อความบันทึกไปยัง FIFO ซอฟต์แวร์ 32 ช่อง โพรบจะอ่านข้อมูลเหล่านั้นแบบเรียลไทม์โดยไม่ต้องหยุดการทำงานของคอร์ วิธีนี้เทียบได้กับการดีบักด้วย printf ในระบบฝังตัว แต่มีค่าใช้จ่ายด้านประสิทธิภาพต่ำมากเมื่อเทียบกับการส่งข้อมูลผ่าน UART การเขียนข้อมูลไปยัง ITM โดยทั่วไปใช้เวลาเพียงไม่กี่รอบสัญญาณนาฬิกา และข้อมูลจะถูกส่งออกผ่าน SWO ด้วยอัตราความเร็วสูงถึงหลายเมกะบิตต่อวินาที

RTT (Real-Time Transfer) เป็นทางเลือกเมื่อ SWO ไม่พร้อมใช้งานหรือเมื่อโพรบไม่รองรับการติดตาม RTT ใช้บัฟเฟอร์แบบวงแหวนขนาดเล็กใน RAM ของเป้าหมาย โพรบจะอ่านบัฟเฟอร์ผ่านพอร์ตดีบักในขณะที่คอร์ยังทำงานอยู่ โดยไม่จำเป็นต้องใช้พินเพิ่มเติม ข้อเสียคือใช้ RAM มากขึ้น โดยบัฟเฟอร์ RTT ทั่วไปใช้พื้นที่ประมาณ 512 ไบต์ถึง 4 KB ขึ้นอยู่กับปริมาณข้อมูลบันทึก และมีความหน่วงเล็กน้อยเมื่อเทียบกับ SWO

สำหรับวิธีการตั้งค่าเบรกพอยต์ การกำหนดค่าการติดตาม SWO และ RTT ด้วยตนเอง โปรดดูขั้นตอนการตั้งค่าสภาพแวดล้อมการดีบัก SWD แบบทีละขั้นตอน

SWD ในด้าน HMI อุตสาหกรรม, IoT และระบบฝังตัวสำหรับการผลิต

ในอุปกรณ์ควบคุม HMI อุตสาหกรรมที่ใช้ ARM โหนด IoT ไมโครคอนโทรลเลอร์สำหรับขับมอเตอร์ และอุปกรณ์ระบบอัตโนมัติในอาคาร SWD มีบทบาทที่แตกต่างกันสามประการในวงจรชีวิตของผลิตภัณฑ์ ได้แก่ การดีบักระหว่างการพัฒนา การเขียนโปรแกรมเพื่อการผลิต และการบำรุงรักษาภาคสนาม แต่ละบทบาทมีข้อกำหนดที่แตกต่างกัน และอินเทอร์เฟซนี้สามารถรองรับทั้งสามบทบาทผ่านการเชื่อมต่อทางกายภาพเดียวกัน

HMI ในภาคอุตสาหกรรมและตัวควบคุมระบบอัตโนมัติใช้ SWD เป็นหลักสำหรับการเขียนโปรแกรมในสายการผลิตและการอัปเดตเฟิร์มแวร์ภาคสนาม โดยทั่วไป อุปกรณ์ทดสอบในสายการผลิต HMI จะใช้ขั้วต่อแบบ pogo-pin บนจุดทดสอบ SWDIO, SWDCLK, GND และ VCC โฮสต์จะเรียกใช้ลำดับการแฟลชตามสคริปต์ บันทึกผลลัพธ์พร้อมหมายเลขซีเรียลของบอร์ด และแจ้งเตือนความล้มเหลวเพื่อดำเนินการแก้ไข เวลาต่อบอร์ดโดยทั่วไปอยู่ที่ 15–30 วินาที รวมขั้นตอนการทดสอบการทำงาน โดยอินเทอร์เฟซ SWD เองใช้เวลาเพิ่มขึ้นไม่ถึง 10 วินาทีจากเวลาทั้งหมดนั้น

โหนด IoT อุตสาหกรรมที่ทำงานบนขอบเครือข่ายมักใช้เป้าหมาย Cortex-M33 หรือ Cortex-M4 โดยเปิดใช้งาน TrustZone หรือกลไกป้องกันการอ่านข้อมูลระหว่างการผลิต ในระหว่างการพัฒนา SWD จะให้สิทธิ์การเข้าถึงการดีบักอย่างเต็มที่ ก่อนการจัดส่ง เฟิร์มแวร์จะเปิดใช้งานการป้องกันการอ่านข้อมูล ซึ่งอาจทำได้โดยการเขียนค่าลงในไบต์ตัวเลือกหรือรีจิสเตอร์ฟิวส์ เพื่อปิดใช้งานการเข้าถึงการดีบักผ่าน SWD และป้องกันการอ่านข้อมูลจากหน่วยความจำ เนื้อหาของแฟลชจะไม่สามารถอ่านได้ผ่านพอร์ตดีบัก นี่คือกลไกมาตรฐานสำหรับการปกป้องทรัพย์สินทางปัญญาของเฟิร์มแวร์ในผลิตภัณฑ์ที่จัดส่ง

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

ไมโครคอนโทรลเลอร์ (MCU) สำหรับขับมอเตอร์และอุปกรณ์อิเล็กทรอนิกส์กำลังเพิ่มข้อจำกัดด้านเวลา การออกแบบเหล่านี้จำนวนมากใช้ขา SWD เป็น GPIO ในการทำงานปกติ โดย MCU จะทำการแมป SWDIO และ SWDCLK ไปยังฟังก์ชันอื่นหลังจากบูตเครื่อง การเชื่อมต่อโพรบหลังจากทำการแมปใหม่อาจล้มเหลวโดยไม่มีการแจ้งเตือนใดๆ วิธีแก้ปัญหาคือหน้าต่างดีบัก ซึ่งเป็นช่วงเวลาสั้นๆ ระหว่างการเริ่มต้นระบบที่ถูกกระตุ้นโดย GPIO หรือเงื่อนไขการบูตเฉพาะ โดยเฟิร์มแวร์จะคง SWD ให้ทำงานอยู่ก่อนที่จะทำการแมปพินใหม่ วิธีนี้ช่วยให้โพรบสามารถเชื่อมต่อได้ในระหว่างหน้าต่างดังกล่าวและหยุดการทำงานของคอร์ก่อนที่จะทำการแมปใหม่

ชิป SoC แบบดูอัลคอร์ ซึ่งพบได้บ่อยขึ้นในไมโครคอนโทรลเลอร์ระดับอุตสาหกรรม เช่น ซีรีส์ STM32H7 หรือ NXP i.MX RT อาจจำเป็นต้องใช้ SWD multidrop หรือขั้วต่อดีบักแยกต่างหากสำหรับแต่ละคอร์ SWD multidrop จะกำหนดรหัสเป้าหมายที่ไม่ซ้ำกันให้กับแต่ละคอร์บนสาย SWDCLK/SWDIO เดียวกัน อย่างไรก็ตาม โพรบบางตัวอาจไม่รองรับฟังก์ชันนี้ โปรดตรวจสอบเวอร์ชันเฟิร์มแวร์ของโพรบและการรองรับ multidrop ก่อนนำสถาปัตยกรรมดีบัก SWD แบบดูอัลคอร์ไปใช้ในการออกแบบใหม่

การผสานรวม CI/CD เป็นแนวทางปฏิบัติมาตรฐานในทีมพัฒนาอุปกรณ์ฝังตัวที่ส่งมอบผลิตภัณฑ์ที่เชื่อมต่ออินเทอร์เน็ต OpenOCD, pyOCD และเครื่องมือ CLI ของผู้จำหน่ายส่วนใหญ่มีอินเทอร์เฟซบรรทัดคำสั่งที่ไปป์ไลน์การสร้างสามารถเรียกใช้ได้โดยตรง ขั้นตอนการทดสอบอัตโนมัติทั่วไปจะทำการแฟลชเฟิร์มแวร์ เรียกใช้การทดสอบตัวเองเมื่อเปิดเครื่องผ่านพอร์ตดีบัก อ่านผลลัพธ์ว่าผ่านหรือไม่ผ่านจากที่อยู่หน่วยความจำที่ทราบ และบันทึกผลลัพธ์ วิธีนี้ช่วยตรวจจับความล้มเหลวในการเขียนแฟลชและข้อผิดพลาดพื้นฐานของเฟิร์มแวร์ในทุกการสร้าง ไม่ใช่เฉพาะในช่วงรอบการทดสอบด้วยตนเองเท่านั้น

STONE HMI ใช้กระบวนการพัฒนาเฟิร์มแวร์ที่มีโครงสร้างในโครงการระบบอัตโนมัติต่างๆ

สำหรับทีมพัฒนาผลิตภัณฑ์ฝังตัว ระเบียบวินัยในกระบวนการทำงานเช่นนี้มีความสำคัญมากกว่าแค่ในห้องปฏิบัติการพัฒนา เมื่อขั้นตอนการเขียนโปรแกรมสำหรับการผลิต การทดสอบอัตโนมัติ และการแก้ไขปัญหาในภาคสนามได้รับการกำหนดและทดสอบก่อนการผลิตครั้งแรก ความเสี่ยงในการส่งมอบจะลดลงอย่างมาก บทบาทของ SWD ในขั้นตอนการทำงานนั้นไม่ใช่เพียงเครื่องมือช่วยในการดีบักเท่านั้น แต่ยังเป็นกลไกที่ทำให้การเขียนโปรแกรมสำหรับการผลิตที่ทำซ้ำได้และตรวจสอบได้เป็นไปได้บนฮาร์ดแวร์ที่ใช้ ARM

คำถามที่พบบ่อยเกี่ยวกับอินเทอร์เฟซ SWD

อินเทอร์เฟซ SWD ใช้สำหรับอะไร?

SWD ให้สิทธิ์การเข้าถึงการดีบัก การแฟลชเฟิร์มแวร์ และการติดตามแบบเรียลไทม์สำหรับโปรเซสเซอร์ ARM Cortex ครอบคลุมวงจรชีวิตของผลิตภัณฑ์อย่างครบถ้วน ได้แก่ การดีบักในช่วงเริ่มต้นการพัฒนา การเขียนโปรแกรมสำหรับการผลิต และการอัปเดตเฟิร์มแวร์ภาคสนาม สถาปัตยกรรมและขั้นตอนการเขียนโปรแกรมได้อธิบายไว้โดยละเอียดในหัวข้อด้านบนแล้ว

SWD ต้องการพินกี่ตัว?

SWD ต้องการพินสองพิน ได้แก่ SWDIO และ SWDCLK พินที่สามคือ nRESET ซึ่งเป็นพินเสริม แต่แนะนำให้ใช้เพื่อให้สามารถเชื่อมต่อโพรบได้อย่างน่าเชื่อถือเมื่อเป้าหมายอาจอยู่ในสถานะที่ไม่แน่นอน พินที่สี่คือ SWO ซึ่งเพิ่มความสามารถในการส่งออกข้อมูลการติดตาม ดูรายละเอียดสัญญาณทั้งหมดได้ใน H3 1.1

SWD สามารถนำไปใช้ในการเขียนโปรแกรมเพื่อการผลิตได้หรือไม่ ไม่ใช่แค่สำหรับการดีบักในระหว่างการพัฒนาเท่านั้น?

ใช่ การเขียนโปรแกรมสำหรับการผลิตผ่าน SWD เป็นวิธีมาตรฐานสำหรับผลิตภัณฑ์ระบบฝังตัวที่ใช้ ARM อุปกรณ์จับยึดแบบ pogo-pin เครื่องเขียนโปรแกรมแบบกลุ่ม และเครื่องมือ CLI แบบสคริปต์ ล้วนใช้ส่วนต่อประสาน SWD สำหรับการเขียนโปรแกรมแฟลชในปริมาณมาก ลำดับการเขียนโปรแกรม ข้อจำกัดด้านความเร็ว และปัจจัยด้านการออกแบบอุปกรณ์จับยึดจะกล่าวถึงใน H3 2.1

SWD และ UART แตกต่างกันอย่างไรในการแฟลชเฟิร์มแวร์?

การแฟลชเฟิร์มแวร์ผ่าน UART ใช้บูตโหลดเดอร์ที่มีอยู่แล้วใน ROM หรือหน่วยความจำแฟลชของ MCU โปรเซสเซอร์ต้องทำงานและบูตโหลดเดอร์ต้องอยู่ในสถานะทำงาน ส่วน SWD จะข้ามขั้นตอนการทำงานของโปรเซสเซอร์ไปโดยสิ้นเชิง โดยเขียนข้อมูลลงในหน่วยความจำแฟลชโดยตรงผ่านพอร์ตดีบัก SWD สามารถทำงานได้แม้ว่าเป้าหมายจะไม่มีเฟิร์มแวร์ อิมเมจเฟิร์มแวร์เสียหาย หรือโปรเซสเซอร์ค้างอยู่ก็ตาม

SWD รองรับการใช้งานบนโปรเซสเซอร์ ARM Cortex ทุกรุ่นหรือไม่?

SWD รองรับการใช้งานบนโปรเซสเซอร์ ARM Cortex-M และอุปกรณ์ ARM บางประเภทที่ใช้ Cortex-A โดยเป็นส่วนหนึ่งของข้อกำหนด ARM Debug Interface (ADI) และถูกรวมอยู่ในซิลิคอน Cortex-M ตั้งแต่ Cortex-M0 เป็นต้นมา โปรเซสเซอร์ Cortex-A รุ่นเก่าหรือรุ่นฝังตัวบางรุ่นอาจมีเพียง JTAG เท่านั้น แต่รุ่นเหล่านั้นพบได้น้อยกว่าในงานออกแบบปัจจุบัน

ฉันจะปิดใช้งาน SWD ในผลิตภัณฑ์ที่จัดส่งแล้วเพื่อป้องกันเฟิร์มแวร์ได้อย่างไร?

ไมโครคอนโทรลเลอร์ ARM Cortex-M ส่วนใหญ่มีกลไกป้องกันการอ่านข้อมูล เช่น การเขียนค่าลงในไบต์ตัวเลือก หรือการใช้ฟิวส์รักษาความปลอดภัย เพื่อปิดใช้งานการเข้าถึงพอร์ตดีบักและป้องกันการอ่านข้อมูลจากหน่วยความจำ การเปิดใช้งานอีกครั้งอาจต้องลบข้อมูลทั้งหมด ซึ่งจะทำลายเฟิร์มแวร์ ขั้นตอนการรักษาความปลอดภัยและข้อควรพิจารณาในการแก้ไขงานจะกล่าวถึงใน H3 2.3