
การทำความเข้าใจ 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 มาจากข้อกำหนด 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
ขั้วต่อ 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 สำหรับเป้าหมาย ARM Cortex-M และอุปกรณ์บางประเภทที่ใช้ Cortex-A โดยไม่จำเป็นต้องมีบูตโหลดเดอร์อยู่แล้วในเป้าหมาย โพรบดีบักจะเชื่อมต่อโดยตรงกับพอร์ตดีบักของโปรเซสเซอร์ หยุดการทำงานของคอร์ และเขียนข้อมูลลงในแฟลชผ่านตัวควบคุมแฟลชที่แมปอยู่ในหน่วยความจำ
ลำดับการเขียนโปรแกรมโดยทั่วไปมีขั้นตอนดังต่อไปนี้:
อัลกอริทึมแฟลชนั้นขึ้นอยู่กับผู้ผลิต 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 ต้องสามารถเข้าถึงได้จากด้านของอุปกรณ์จับยึดบนแผงวงจร การวางจุดทดสอบเหล่านี้ไว้ด้านเดียวกับชิ้นส่วนอิเล็กทรอนิกส์อาจทำให้ต้องใช้อุปกรณ์จับยึดแบบสองด้าน ซึ่งเพิ่มต้นทุนและความซับซ้อน การจัดกลุ่มจุดทดสอบเหล่านี้ไว้ในตำแหน่งที่สม่ำเสมอในผลิตภัณฑ์รุ่นต่างๆ จะทำให้สามารถนำอุปกรณ์จับยึดกลับมาใช้ใหม่ได้อย่างมีประสิทธิภาพ

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 แบบทีละขั้นตอน

ในอุปกรณ์ควบคุม 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 ให้สิทธิ์การเข้าถึงการดีบัก การแฟลชเฟิร์มแวร์ และการติดตามแบบเรียลไทม์สำหรับโปรเซสเซอร์ 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