เป็นไปได้ไหมที่จะสร้างอินเตอร์เฟส JTAG ด้วย arduino


14

ถ้าเป็นเช่นนั้นจะพาฉันไปยังเว็บไซต์ที่บอกวิธีการทำเช่นนี้ได้หรือไม่ ฉันเชื่อว่าฉันอาจพบวิธีการแต่ฉันไม่แน่ใจว่าจะใช้งานได้หรือไม่ (จำเป็นต้องค้นหาสิ่งที่จะทดสอบ)

คำถามนี้เกี่ยวข้องกับคำถามก่อนหน้านี้ของฉันที่นี่

ในกรณีที่ต้องการข้อมูลพื้นหลังเพิ่มเติม


JBailey ฉันเพิ่งเจอคำถามของคุณเกี่ยวกับการใช้ arduino เพื่อสร้างตัวแปลง JTAG-USB และฉันก็สงสัยว่าคุณสร้างออกมาได้อย่างไร \

คำตอบ:


14

ใช่เป็นไปได้ที่จะเปลี่ยน Arduino เป็นอะแดปเตอร์ ARM JTAG

มีสามปัญหาแรงดันความเร็วและไดรเวอร์

Arduino นั้นทำงานที่ 5V ไมโครคอนโทรลเลอร์ ARM ส่วนใหญ่ไม่สามารถทนต่อ 5V บนพิน JTAG และต้องการ 3.3V ทางออกที่ง่ายที่สุดคือการเรียกใช้ Arduino ของคุณที่ 3.3V หากคุณไม่ต้องการการแปลงระดับ (ดูI2C 3.3 ถึง 5.0 Vสำหรับการแปลงไอเดีย)

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

JTAG เป็นโปรโตคอลระดับสูงโดยเฉพาะสำหรับแต่ละตระกูลโปรเซสเซอร์ซึ่งใช้ SPI เช่นอินเตอร์เฟสเพื่อแลกเปลี่ยนข้อมูล JTAG ดองเกิลส่วนใหญ่มีเพียงอินเตอร์เฟส SPI ผ่าน USB จากนั้นปล่อยให้ส่วนที่เหลือของงานไปยังแอปพลิเคชันพีซี OpenOCD และ URJTag เป็นตัวเลือกยอดนิยม คุณจะต้องใช้ไดรเวอร์ในหนึ่งในนี้สำหรับโปรโตคอล JTAG Arduino ของคุณ

Bus Pirate คล้ายกับ Arduino (ไมโครคอนโทรลเลอร์ความเร็วต่ำ + ชิป FTDI) รองรับ JTAGกับ OpenOCD ดังนั้นจึงเป็นไปได้อย่างแน่นอน

ถ้าคุณใช้ teensy / Opendous หรือคณะกรรมการ AVR-USB อื่น ๆ คุณสามารถใช้Estick-JTAG

แต่สำหรับ JTAG ที่เสียค่าใช้จ่ายฉันขอแนะนำหนึ่งในดองเกิลที่ใช้ FTDI2232 พวกเขาราคาถูกและได้รับการสนับสนุนอย่างดีจาก OpenOCD


5

เป็นไปได้ แต่ยากมาก ฉันไม่ชอบ JTAG ที่ใช้ FTDI เนื่องจากชิป FTDI พร้อมทำกล่องดำและไม่มีใครเรียนรู้ด้วยการใช้มัน

ถ้าฉันต้องการสร้าง USB-JTAG ด้วย AVR ฉันจะได้รับหนึ่งที่มีการสนับสนุนความเร็วเต็ม usb อย่างน้อยในชิป จากนั้นรับ AVR usb stack (ซอร์สโค้ด c) และดูตัวอย่าง usb-to serial เนื่องจาก bitbanging over usb เป็นความคิดที่ไม่ดี (latency สูง) จึงจำเป็นต้องแปลงเป็นคำสั่งระดับสูงที่จะสั่งให้ MCU ทำการ bitbanging เอง (หรือใช้ SPI ถ้าเป็นไปได้) และส่งคืนผลลัพธ์ระดับสูงผ่าน usb (bytes สมบูรณ์) ) แต่แล้วความต้องการในการเขียนไดร์เวอร์สำหรับ IDE นั้นมาเพื่อสนับสนุนอุปกรณ์ JTAG ใหม่เพื่อทำการดีบั๊ก OpenOCD และ URJTag มีซอร์สโค้ดของไดรเวอร์สำหรับอุปกรณ์ jtag จำนวนมากดังนั้นคุณจะต้องได้รับและทำงานซ้ำหนึ่งครั้งสำหรับอุปกรณ์ที่คุณคิดค้นขึ้นมาใหม่ ดูว่าบางคนทำงานคล้ายกันได้อย่างไร: http://code.google.com/p/estick-jtag/


1

ดู openocd แบ็กเอนด์ส่วนใหญ่จะใช้วิธีบิตพอร์ตพอร์ตขนานผมคิดว่ามันจะเปลี่ยนไปทีละบิตเพียงครั้งเดียว มันค่อนข้างง่ายที่จะใช้สิ่งที่ฉันคิดว่าพวกเขาเรียกแบ็กเอนด์ดัมมี่ซึ่งเป็นตัวอย่าง ส่งคำสั่งการเขียน bit ใด ๆ ไปยัง arduino แล้วตั้งค่าหรือล้างบิตนั้น เมื่อถูกขอให้อ่านบิตอินพุตจากนั้นส่งคำสั่งไปยัง arduino เพื่อทำงานนั้นและส่งคืนผลลัพธ์

ฉันทำสิ่งนี้สำเร็จแล้ว แต่ไม่ใช่กับ arduino ฉันได้พูดคุยกับ openocd จากโฮสต์ไปยังแกนแขนจำลองที่ทำงานในโปรแกรมจำลอง hdl

โปรดทราบว่ารายละเอียด jtag บางอย่างถูกปิดตัวอย่างเช่น cortex-m3 คือการเรียงลำดับจำนวนหมุดลด jtag ที่เรียงลำดับแล้วซึ่งครั้งล่าสุดที่ฉันดูไม่สามารถใช้งานได้หากไม่มี NDA ที่อาจไม่สำคัญเพราะ openocd จะดูแลทุกอย่างให้คุณตราบใดที่คุณใช้ jtag interface ที่ openocd รองรับ bit banged back end นั้นเป็นที่ซึ่ง aarduino ของคุณและอะไรก็ตามที่คุณใช้เพื่อเข้า / ออกจากที่มันเข้ามาเล่น .

ดังที่ระบุไว้แล้วโดย Joby คุณจะต้องระมัดระวังแรงดันไฟฟ้า (ไม่ใช่รสชาติของ Arduino ทั้งหมดเป็น 5V และไม่ใช่คอนโทรลเลอร์แขนทั้งหมดคือ 3.3 โวลต์) และการปรับสภาพสัญญาณและการต่อลงดินและทุกอย่างนั้น หากบอร์ดเป้าหมายของคุณใช้พลังงานจากอุปกรณ์ที่อยู่ในระดับที่แตกต่างกันเมื่อเทียบกับที่คุณใช้พลังงานกับ Arduino ของคุณคุณสามารถละลายบางสิ่งบางอย่างเมื่อคุณเชื่อมต่อทั้งสอง


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

1

มันเป็นไปได้และที่จริงผมก็ดำเนินการและอธิบายทั้งหมดที่นี่

มีไลบรารี่บน github ที่นี่ประกอบด้วยสองส่วนคือโปรแกรมที่ทำงานบน arduino และสคริปต์ python ที่ส่งไฟล์ XSVF ไปยัง arduino

คุณน่าจะต้องการตัวต้านทานเล็กน้อยเพื่อแปลง 5 V เป็น 3.3 V เนื่องจาก FPGA และ CPLD ส่วนใหญ่ใช้ระดับแรงดันไฟฟ้านี้

ฉันยังได้ประสบการณ์บางเขียนประกอบ / disassembler สำหรับไฟล์ XSVF รหัสที่อยู่ในห้องสมุด GitHub เดียวกันและมีการอธิบายในโพสต์นี้ที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.