JTAG (กลุ่มทดสอบร่วมกัน) ไม่เพียง แต่ใช้สำหรับการอ่านหน่วยความจำและการดีบักฮาร์ดแวร์ แต่ยังสำหรับการเขียนข้อมูลไปยังชิป ซึ่งรวมถึงเฟิร์มแวร์กระพริบหน่วยความจำการเขียนโปรแกรมและการกำหนดค่า FPGAs บทช่วยสอนนี้จะแนะนำคุณเกี่ยวกับกระบวนการเขียนไปยังชิปโดยใช้ JTAG รวมถึงการตั้งค่าเครื่องมือและแนวทางปฏิบัติที่ดีที่สุด
การเขียน jtag คืออะไร?
การเขียน JTAG หมายถึงการเขียนโปรแกรมหรือข้อมูลกระพริบไปยังวงจรรวม (IC) ผ่านอินเตอร์เฟส JTAG กระบวนการนี้ใช้กันทั่วไปสำหรับ:
- เฟิร์มแวร์กระพริบหรือ bootloaders
- การเขียนไฟล์กำหนดค่าไปยัง FPGAS
- การเขียนโปรแกรมหน่วยความจำที่ไม่ระเหย (เช่น EEPROM, FLASH)
- การอัปเดตซอฟต์แวร์หรือเฟิร์มแวร์ในระบบฝังตัว
อินเตอร์เฟส JTAG ให้การเข้าถึงชิปโดยตรงทำให้สามารถควบคุมได้อย่างแม่นยำเกี่ยวกับหน่วยความจำและการกำหนดค่า
สิ่งที่คุณต้องการ
- อะแดปเตอร์ jtag: อินเทอร์เฟซฮาร์ดแวร์สำหรับการสื่อสาร JTAG (เช่น Segger J-Link, สายเคเบิลแพลตฟอร์ม Xilinx, อะแดปเตอร์ที่รองรับ OpenOCD)
- อุปกรณ์เป้าหมาย: ชิปหรือระบบที่คุณต้องการโปรแกรม
- เครื่องมือซอฟต์แวร์: เครื่องมือเช่น OpenOCD, Urjtag, Vivado (สำหรับ Xilinx) หรือซอฟต์แวร์ J-Link ของ Segger
-
ไฟล์เฟิร์มแวร์/การกำหนดค่า: ไฟล์ที่จะเขียนลงในชิป (เช่น
.bin
,.hex
,.svf
). - เอกสาร JTAG Pinout: แผนภาพ Pinout สำหรับอุปกรณ์เป้าหมาย
- อุปกรณ์เสริมการเชื่อมต่อ: สายไฟส่วนหัวและเขียงหั่นขนม (ถ้าจำเป็น)
ขั้นตอนที่ 1: การตั้งค่าฮาร์ดแวร์ JTAG
1. ระบุหมุด JTAG
- ปรึกษาแผ่นข้อมูลหรือแผนผัง PCB ของชิปเพื่อค้นหาหมุด JTAG
- ฉลาก JTAG PIN ทั่วไปรวมถึง
TDI
,TDO
,TCK
, และTMS
. - บอร์ดบางตัวมีส่วนหัว JTAG ที่กำหนดค่าไว้ล่วงหน้า (ตัวเชื่อมต่อ 10 พินหรือ 20 พิน)
2. เชื่อมต่ออะแดปเตอร์ JTAG
- เชื่อมต่ออะแดปเตอร์ JTAG ไปยังอุปกรณ์เป้าหมายเพื่อให้แน่ใจว่าการเชื่อมต่อ PIN ที่ถูกต้อง:
-
TDI
(ทดสอบข้อมูลใน) ถึงTDI
-
TDO
(ทดสอบข้อมูลออก) ถึงTDO
-
TCK
(นาฬิกาทดสอบ) ถึงTCK
-
TMS
(เลือกโหมดทดสอบ) ถึงTMS
- พื้น (
GND
) ต้องเชื่อมต่อ
-
3. ตรวจสอบระดับแรงดันไฟฟ้า
- ตรวจสอบว่าอะแดปเตอร์ JTAG ตรงกับระดับแรงดันไฟฟ้าของอุปกรณ์เป้าหมาย (เช่น 3.3V, 1.8V)
- อะแดปเตอร์บางตัวอนุญาตให้ตั้งค่าแรงดันไฟฟ้าที่กำหนดค่าได้
ขั้นตอนที่ 2: การติดตั้งเครื่องมือซอฟต์แวร์ JTAG
1. OpenOCD
OpenOCD (Open On-Chip Debugger) เป็นเครื่องมือโอเพนซอร์ซยอดนิยมสำหรับการเขียนโปรแกรมและการดีบัก
- ติดตั้งผ่านตัวจัดการแพ็คเกจของคุณ (เช่น
apt install openocd
บน Linux) - ตรวจสอบให้แน่ใจว่าอะแดปเตอร์ JTAG ของคุณได้รับการสนับสนุนโดย OpenOCD
2. เครื่องมือเฉพาะของผู้ขาย
- Segger J-Link: ใช้ซอฟต์แวร์ Segger J-Link สำหรับการดำเนินการ JTAG
- Xilinx Vivado: เหมาะอย่างยิ่งสำหรับการเขียนโปรแกรม Xilinx FPGAs และ CPLDS
- Intel Quartus: สำหรับการเขียนโปรแกรมอุปกรณ์ Intel/Altera
3. urjtag
เครื่องมือที่มีน้ำหนักเบาสำหรับการดำเนินการ JTAG ขั้นพื้นฐานเช่นการเขียนเฟิร์มแวร์
- ติดตั้ง เว็บไซต์ของ Urjtag.
ขั้นตอนที่ 3: การเขียนข้อมูลไปยังชิป
1. กำหนดค่าซอฟต์แวร์ JTAG
ตั้งค่าไฟล์กำหนดค่า JTAG เพื่อระบุอะแดปเตอร์และอุปกรณ์เป้าหมาย
- ตัวอย่างการกำหนดค่า OpenOCD สำหรับชิป STM32:
source [find interface/jlink.cfg] transport select jtag source [find target/stm32f4x.cfg] init halt
2. ตรวจจับอุปกรณ์เป้าหมาย
เรียกใช้คำสั่งเพื่อสแกนโซ่ JTAG และตรวจสอบว่าอุปกรณ์เป้าหมายถูกตรวจพบ
- สำหรับ OpenOCD:
ตรวจสอบบันทึกเอาต์พุตสำหรับอุปกรณ์ที่ตรวจพบopenocd -f interface/jlink.cfg -f target/stm32f4x.cfg
3. เฟิร์มแวร์แฟลช
เขียนไฟล์เฟิร์มแวร์ลงในชิปโดยใช้คำสั่ง JTAG
- ตัวอย่างคำสั่ง OpenOCD:
program firmware.bin verify reset exit 0x08000000
-
firmware.bin
: ไฟล์ไบนารีที่จะเขียน -
verify
: มั่นใจได้ว่าข้อมูลถูกเขียนอย่างถูกต้อง -
reset
: รีเซ็ตอุปกรณ์หลังจากการเขียนโปรแกรม -
0x08000000
: เริ่มต้นที่อยู่ในหน่วยความจำ
-
4. การกำหนดค่าการเขียนไปยัง FPGA
สำหรับ FPGAs ใช้ .bit
หรือ .svf
ไฟล์.
- ตัวอย่างคำสั่ง urjtag:
cable jtagkey detect svf configure.svf
5. ลบหน่วยความจำก่อนเขียน
อุปกรณ์บางอย่างต้องการการลบหน่วยความจำก่อนกระพริบ
- ตัวอย่างคำสั่ง OpenOCD:
flash erase_address 0x08000000 0x10000
ขั้นตอนที่ 4: แนวปฏิบัติที่ดีที่สุดสำหรับการเขียน JTAG
- การสำรองข้อมูลเฟิร์มแวร์ที่มีอยู่: อ่านและบันทึกเฟิร์มแวร์ที่มีอยู่เสมอก่อนที่จะเขียนข้อมูลใหม่
-
ตรวจสอบความสมบูรณ์ของข้อมูล: ใช้
verify
คำสั่งเพื่อให้แน่ใจว่าการเขียนโปรแกรมที่ประสบความสำเร็จ - ใช้การเชื่อมต่อที่เชื่อถือได้: รักษาความปลอดภัยสายทั้งหมดเพื่อป้องกันการทุจริตข้อมูลในระหว่างการเขียน
- จับคู่ระดับแรงดันไฟฟ้า: ตรวจสอบให้แน่ใจว่าอะแดปเตอร์ JTAG และอุปกรณ์เป้าหมายใช้ระดับแรงดันไฟฟ้าที่เข้ากันได้
- ตรวจสอบการป้องกันการเขียน: ปิดใช้งานการป้องกันการเขียน (ถ้ามี) ก่อนการเขียนโปรแกรม
แอปพลิเคชันของการเขียน JTAG
- เฟิร์มแวร์กระพริบหรือ bootloaders
- การเขียนโปรแกรม FPGAs หรือ CPLDS
- การอัปเดตซอฟต์แวร์ระบบฝังตัว
- การเขียนข้อมูลการกำหนดค่าไปยังหน่วยความจำ
- การพัฒนาและทดสอบเฟิร์มแวร์แบบเรียลไทม์
การแก้ไขปัญหา
-
ไม่พบอุปกรณ์:
- ตรวจสอบสายไฟและ pinout
- ตรวจสอบให้แน่ใจว่าอุปกรณ์ได้รับพลังงานและต่อสายดินอย่างเหมาะสม
-
เขียนข้อผิดพลาด:
- ตรวจสอบให้แน่ใจว่าภูมิภาคหน่วยความจำไม่ได้รับการป้องกันการเขียน
- ตรวจสอบที่อยู่เริ่มต้นและรูปแบบไฟล์อีกครั้ง
-
การตรวจสอบล้มเหลว:
- ตรวจสอบการเชื่อมต่อที่เชื่อถือได้
- ใช้ความเร็วนาฬิกา JTAG ที่ช้าลงเพื่อปรับปรุงความเสถียร
บทสรุป
JTAG เป็นเครื่องมือที่หลากหลายสำหรับการเขียนเฟิร์มแวร์การกำหนดค่าหน่วยความจำและอุปกรณ์การเขียนโปรแกรมในระดับต่ำ โดยทำตามคำแนะนำนี้คุณสามารถใช้ JTAG เพื่อแฟลชเฟิร์มแวร์อัปเดตซอฟต์แวร์และกำหนดค่าฮาร์ดแวร์ได้อย่างมั่นใจ การเรียนรู้การเขียน JTAG ช่วยให้สามารถพัฒนาและบำรุงรักษาระบบฝังตัวได้อย่างมีประสิทธิภาพ!