JTAG: การเขียนชิปพร้อมโปรโตคอลการทดสอบร่วมกัน

JTAG: Writing Chips with Joint Test Action Group Protocol

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


การเขียน jtag คืออะไร?

การเขียน JTAG หมายถึงการเขียนโปรแกรมหรือข้อมูลกระพริบไปยังวงจรรวม (IC) ผ่านอินเตอร์เฟส JTAG กระบวนการนี้ใช้กันทั่วไปสำหรับ:

  • เฟิร์มแวร์กระพริบหรือ bootloaders
  • การเขียนไฟล์กำหนดค่าไปยัง FPGAS
  • การเขียนโปรแกรมหน่วยความจำที่ไม่ระเหย (เช่น EEPROM, FLASH)
  • การอัปเดตซอฟต์แวร์หรือเฟิร์มแวร์ในระบบฝังตัว

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


สิ่งที่คุณต้องการ

  1. อะแดปเตอร์ jtag: อินเทอร์เฟซฮาร์ดแวร์สำหรับการสื่อสาร JTAG (เช่น Segger J-Link, สายเคเบิลแพลตฟอร์ม Xilinx, อะแดปเตอร์ที่รองรับ OpenOCD)
  2. อุปกรณ์เป้าหมาย: ชิปหรือระบบที่คุณต้องการโปรแกรม
  3. เครื่องมือซอฟต์แวร์: เครื่องมือเช่น OpenOCD, Urjtag, Vivado (สำหรับ Xilinx) หรือซอฟต์แวร์ J-Link ของ Segger
  4. ไฟล์เฟิร์มแวร์/การกำหนดค่า: ไฟล์ที่จะเขียนลงในชิป (เช่น .bin, .hex, .svf).
  5. เอกสาร JTAG Pinout: แผนภาพ Pinout สำหรับอุปกรณ์เป้าหมาย
  6. อุปกรณ์เสริมการเชื่อมต่อ: สายไฟส่วนหัวและเขียงหั่นขนม (ถ้าจำเป็น)

ขั้นตอนที่ 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 ขั้นพื้นฐานเช่นการเขียนเฟิร์มแวร์


ขั้นตอนที่ 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

  1. การสำรองข้อมูลเฟิร์มแวร์ที่มีอยู่: อ่านและบันทึกเฟิร์มแวร์ที่มีอยู่เสมอก่อนที่จะเขียนข้อมูลใหม่
  2. ตรวจสอบความสมบูรณ์ของข้อมูล: ใช้ verify คำสั่งเพื่อให้แน่ใจว่าการเขียนโปรแกรมที่ประสบความสำเร็จ
  3. ใช้การเชื่อมต่อที่เชื่อถือได้: รักษาความปลอดภัยสายทั้งหมดเพื่อป้องกันการทุจริตข้อมูลในระหว่างการเขียน
  4. จับคู่ระดับแรงดันไฟฟ้า: ตรวจสอบให้แน่ใจว่าอะแดปเตอร์ JTAG และอุปกรณ์เป้าหมายใช้ระดับแรงดันไฟฟ้าที่เข้ากันได้
  5. ตรวจสอบการป้องกันการเขียน: ปิดใช้งานการป้องกันการเขียน (ถ้ามี) ก่อนการเขียนโปรแกรม

แอปพลิเคชันของการเขียน JTAG

  1. เฟิร์มแวร์กระพริบหรือ bootloaders
  2. การเขียนโปรแกรม FPGAs หรือ CPLDS
  3. การอัปเดตซอฟต์แวร์ระบบฝังตัว
  4. การเขียนข้อมูลการกำหนดค่าไปยังหน่วยความจำ
  5. การพัฒนาและทดสอบเฟิร์มแวร์แบบเรียลไทม์

การแก้ไขปัญหา

  • ไม่พบอุปกรณ์:

    • ตรวจสอบสายไฟและ pinout
    • ตรวจสอบให้แน่ใจว่าอุปกรณ์ได้รับพลังงานและต่อสายดินอย่างเหมาะสม
  • เขียนข้อผิดพลาด:

    • ตรวจสอบให้แน่ใจว่าภูมิภาคหน่วยความจำไม่ได้รับการป้องกันการเขียน
    • ตรวจสอบที่อยู่เริ่มต้นและรูปแบบไฟล์อีกครั้ง
  • การตรวจสอบล้มเหลว:

    • ตรวจสอบการเชื่อมต่อที่เชื่อถือได้
    • ใช้ความเร็วนาฬิกา JTAG ที่ช้าลงเพื่อปรับปรุงความเสถียร

บทสรุป

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

แสดงความคิดเห็น

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.