การเขียนโปรแกรมไมโครคอนโทรลเลอร์: JTAG, SPI, USB oh my !?


52

ฉันสังเกตเห็นว่าไมโครคอนโทรลเลอร์มีหลายวิธีในการตั้งโปรแกรม ฉัน sorta คุ้นเคยกับ USB เพราะ Arduino ของฉันสามารถตั้งโปรแกรมผ่าน USB ได้

อินเตอร์เฟส JTAG หรือ SPI คืออะไร

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

คำตอบ:


39

ATMEGA ไมโครคอนโทรลเลอร์เช่นเดียวกับใน Arduino ที่มาตรงจากโรงงานสามารถตั้งโปรแกรมได้โดยใช้อินเตอร์เฟส SPI หรือ JTAG

SPIย่อมาจาก Serial Peripheral Interface และเป็นวิธีสำหรับไมโครคอนโทรลเลอร์ในการสื่อสารซึ่งกันและกันหรือกับโลกภายนอก บางครั้งเรียกว่า 3 สายเนื่องจากใช้สายสามเส้นในการสื่อสาร ในการเขียนโปรแกรมชิปคุณจะต้องมีโปรแกรมเมอร์พิเศษซึ่งอ่านคำสั่งจาก USB เพื่อขับสาย SPI เพื่อเขียนโปรแกรมชิป ที่เป็นที่นิยมหนึ่งน่าจะเป็นUSBTinyISP จาก Adafruit การแนะนำที่ดีมากสำหรับการเขียนโปรแกรม SPI คือที่SparkFun. แอปพลิเคชั่นยอดนิยมสำหรับการเขียนโปรแกรม Atmel AVR ชิพคือ avrdude (cmd line), ponyprog (ไม่ทำงานกับโปรแกรมเมอร์ใหม่) และในบางกรณี AVR Studio (ถ้าโปรแกรมเมอร์ของคุณรองรับ) ข้อดีของการเขียนโปรแกรม SPI คือคุณสามารถตั้งโปรแกรม Atmel ชิพใดก็ได้จากโรงงานโดยตรงดังนั้นคุณไม่จำเป็นต้องมี Arduino ในโครงการของคุณ

ที่ SPI คือ "อีกโปรโตคอล" แบบอนุกรมJTAGเป็นโปรโตคอลที่ออกแบบมาเป็นพิเศษสำหรับโปรแกรมและดีบักไมโครคอนโทรลเลอร์ ไม่ใช่ JTAG ของ Atmel micro ทั้งหมดที่สนับสนุน JTAG แต่เป็นของที่ใช้ใน Arduino โพรโทคอล JTAG สามารถใช้สำหรับสิ่งที่ยอดเยี่ยมเช่น "ในการจำลองวงจร" และการดีบักซึ่งหมายความว่ามันช่วยให้คุณเห็นสถานะของโปรแกรมในไมโครคอนโทรลเลอร์ของคุณในขณะที่มันกำลังทำงานจริง ในการทำเช่นนี้คุณจะต้องมีโปรแกรมเมอร์พิเศษ เห็นคำตอบของฉันสำหรับคำถามอื่น

ในการตั้งโปรแกรมชิปโดยใช้ USB คุณจะต้องตั้งโปรแกรมด้วยชิพแรก "bootloader" โดยใช้ SPI หรือ JTAG เมื่อโหลดด้วย bootloader ระบบจะสามารถตั้งโปรแกรมได้จากพีซีเครื่องใดก็ได้โดยใช้ตัวแปลง USB-Serial ข้อเสียคือ bootloader ใช้พื้นที่หน่วยความจำบางส่วนและวิธีนี้ไม่อนุญาตให้คุณเห็นสถานะของชิปในขณะที่ทำงาน


10
ในขณะที่แม่นยำในความคิดที่ว่า serial bootloader ไม่สามารถใช้ได้กับ ATMEGA ใหม่ (แม้ว่าจะอยู่ในไมโครคอนโทรลเลอร์อื่น ๆ ) การอ้างว่า SPI หรือ JTAG ต้องใช้ไม่ถูกต้อง ATMEGAs ยังสนับสนุนโหมดการตั้งโปรแกรมแบบขนานไฟฟ้าแรงสูงซึ่งมีความสามารถในการข้ามการตั้งค่าฟิวส์บางอย่างที่จะทำให้วิธีการเขียนโปรแกรมในวงจรที่เป็นที่นิยมมากขึ้นใช้งานไม่ได้ JTAG ไม่ได้ออกแบบมาสำหรับการเขียนโปรแกรม micros แต่สำหรับการทดสอบบอร์ด PC โดยการตอกบัตรค่าเข้าและออกจากการลงทะเบียน IO pin การขยายมันสำหรับการตั้งโปรแกรมหรือแก้จุดบกพร่องฟังก์ชั่นหลักคือแฮ็คในภายหลัง
Chris Stratton

SPI และในการเขียนโปรแกรมระบบ / การเขียนโปรแกรมแบบอนุกรมจะแตกต่างกัน ฉันก็เคยชินกับความจริงที่ว่า Atmega MCU ขนาดเล็กจำนวนมากมีพินการเขียนโปรแกรมแบบอนุกรมบนอินเตอร์เฟส SPI แต่ฉันถูกกัดด้วยความจริงที่ว่าใน Atmega MCUs ขนาดใหญ่บางตัวหมุดการเขียนโปรแกรมแบบอนุกรมไม่ได้อยู่บนอินเตอร์เฟส SPI
เทศกาล

30

ในขณะที่ฉันชอบที่จะดำน้ำในวิธีการเขียนโปรแกรมต่าง ๆ ที่มีคนอื่นมีอยู่แล้ว นี่คือการสอนของDean Cameraเกี่ยวกับ AVRFreaks, วิธีการเขียนโปรแกรม AVR :

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

วิธีที่ 1: ในการเขียนโปรแกรมระบบ (ISP)

สนับสนุนโดย: AVRs ส่วนใหญ่ (ดูโพสต์ด้านล่าง)
โปรแกรมเมอร์ที่รองรับ: AVRISP MKI / II, JTAG MKII, STK500, STK600, มังกร, โคลน AVRISP, AVR910 โปรแกรมเมอร์, AVRONE

ในการเขียนโปรแกรมระบบอาจเป็นวิธีที่พบมากที่สุดของการเขียนโปรแกรมแฟลช, EEPROM, ฟิวส์และ lockbytes ของสาย AVR ทั้งหมด ISP สามารถตั้งโปรแกรม AVRs ที่อัตราสัญญาณนาฬิกาสูงมาก (สมมติว่า AVR เป้าหมายทำงานที่ความถี่สูงและโปรแกรมเมอร์สนับสนุน) และเป็นวิธีการที่เหมาะสำหรับมือสมัครเล่น AVR เกือบทุกคน มีหลาย AVRISP โคลนจำนวนมากและโปรแกรมเมอร์ AVR910 ในตลาดนอกเหนือจากดองเกิลแบบง่ายๆที่เชื่อมต่อกับพอร์ตขนานของคอมพิวเตอร์ของคุณ

การออกแบบด็องเกิลใหม่ล่าสุดอาจใช้พอร์ตอนุกรมของคอมพิวเตอร์ แต่มีหลักฐานพอสมควรที่บอกว่าวิธีนี้ช้ามากเนื่องจากข้อ จำกัด ทางเทคนิค

ISP ต้องการให้ AVR เป้าหมายทำงานในอัตราสัญญาณนาฬิกาอย่างน้อยสี่เท่าของนาฬิกา ISP นี่เป็นข้อผิดพลาดทั่วไปและเป็นที่มาของความสับสนสำหรับ AVR ใหม่

วิธีที่ 2: JTAG

สนับสนุนโดย:ดูความช่วยเหลือเครื่องมือ AVRStudio สำหรับการสนับสนุนอุปกรณ์ MKI และ MKII
โปรแกรมเมอร์ที่สนับสนุน: JTAG-ICE, JTAG-ICE MKII, มังกร, โคลน, JTAG-ICE, AVRONE, STK600 (การเขียนโปรแกรมเท่านั้น)

ในทางเทคนิค JTAG เป็นระบบแก้ไขข้อบกพร่องไม่ใช่วิธีการเขียนโปรแกรม อย่างไรก็ตามอินเตอร์เฟส JTAG ยังช่วยให้สามารถเขียนโปรแกรมของ AVR ที่รองรับได้

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

หน่วย JTAG-ICE อย่างเป็นทางการจาก ATMEL ได้รับการแทนที่โดย JTAG-ICE MKII ซึ่งสนับสนุนรุ่นใหม่และได้รับการสนับสนุนอย่างกว้างขวางมากขึ้นทั่วทั้งโปรโตคอล DebugWire ช่วง DebugWire ของ AVR และการเขียนโปรแกรมผ่านวิธี ISP (ดูด้านบน)

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

วิธีที่ 3: DebugWire

สนับสนุนโดย: AVR ขนาดเล็กจำนวนมาก
โปรแกรมเมอร์ที่รองรับ: JTAG-ICE MKII, Dragon, AVRONE

DebugWire อีกครั้งเป็นการดีบั๊กมากกว่าอินเตอร์เฟสการเขียนโปรแกรม แต่สามารถใช้ในการโหลดโปรแกรมลงใน AVRs ที่รองรับได้ อินเทอร์เฟซ dW ใช้ขา AVR เดียว (บรรทัด / RESET) สำหรับการสื่อสารทั้งหมดทำให้เหมาะอย่างยิ่งสำหรับอุปกรณ์ AVR นับขาต่ำ

วิธีที่ 4: Bootloader

สนับสนุนโดย: AVRs ที่ใหม่กว่าส่วนใหญ่
โปรแกรมเมอร์ที่รองรับ: N / A

ในทางเทคนิคแล้วไม่ใช่วิธีการเขียนโปรแกรม bootloader เป็นโปรแกรม AVR ขนาดเล็กที่อยู่ในส่วนที่ผู้ใช้กำหนดได้ของแฟลชปกติ Bootloaders ใช้ประโยชน์จากคุณสมบัติการปรับเปลี่ยนแฟลชเองที่มีอยู่ใน AVR รุ่นใหม่เพื่อให้ AVR สามารถตั้งโปรแกรมเองผ่านข้อมูลโปรแกรมที่โหลดจากแหล่งภายนอก Bootloaders อาจเก็บข้อมูลจากที่ใดก็ได้ (เช่นดาต้าดาต้าภายนอกหรือการ์ด SD) อย่างไรก็ตามโดยทั่วไปแล้วประเภทของ Bootloader สื่อสารกับพีซีผ่านพอร์ต RS-232 (ซีเรียล) ของ AVR

Bootloaders มีข้อ จำกัด ในการใช้พื้นที่แฟลช (จำกัด ขนาดของแฟลชที่มีให้กับแอพพลิเคชั่นของ AVR) และพวกเขาไม่สามารถเปลี่ยนฟิวส์ของ AVRs ได้

Bootloaders สามารถดาวน์โหลดได้อย่างกว้างขวางบนอินเทอร์เน็ต แต่พวกเขาประสบปัญหา "ไก่และไข่" คุณต้องการโปรแกรมเมอร์ประเภทอื่นที่แสดงไว้ที่นี่เพื่อตั้งโปรแกรมใน bootloader ตั้งแต่แรก สิ่งนี้มักจะถูกแก้ไขโดยการสร้างดองเกิลพอร์ตแบบขนานอย่างง่าย (ดูที่ส่วน ISP) หรือโดยการซื้อ AVR ที่โหลดไว้แล้วกับ bootloader (เช่นบอร์ด AVRButterfly)

วิธีที่ 5: การเขียนโปรแกรมแบบขนานแรงดันสูง (HVPP)

สนับสนุนโดย: AVRs ที่ไม่ใช่ TINY ส่วนใหญ่ (มีข้อยกเว้น)
โปรแกรมเมอร์ที่รองรับ: STK500, STK600, Dragon, Dongbrew Homebrew, AVRONE

High Voltage Parallel Programming เป็นวิธีการเขียนโปรแกรมที่ไม่ค่อยได้ใช้เนื่องจากต้องยุ่งยากในการตั้งค่า อย่างไรก็ตามเรื่องนี้การเขียนโปรแกรม HVPP มักใช้เพื่อ "คืนชีพ" AVR ที่มีการตั้งค่าฟิวส์ผิดพลาดผ่านวิธีการเขียนโปรแกรมอื่น

ทั้ง STK500 และ Dragon รองรับ HVPP ในช่วง HVPP ขา / RESET ของเป้าหมายจะเพิ่มเป็นค่าสูงผิดปกติของ 12V ซึ่งประกอบวงจรการเขียนโปรแกรมแบบขนานภายใน ขา / RESET เป็นขาเดียวของ AVR (บน HVPP ที่สนับสนุน AVRs) ซึ่งสามารถยกระดับได้อย่างปลอดภัย

คุณสามารถสร้างดองเกิล HVPP ของคุณเองโดยใช้แผนออนไลน์เช่นนี้

วิธีที่ 6: การเขียนโปรแกรมแบบอนุกรมแรงดันสูง (HVSP)

สนับสนุนโดย: AVR TINY จำนวนมาก (มีข้อยกเว้น)
โปรแกรมเมอร์ที่รองรับ: STK500, STK600, Dragon, Dongbrew Homebrew, AVRONE

HVSP คล้ายกับ HVPP ยกเว้นการถ่ายโอนข้อมูลจะดำเนินการตามลำดับแทนที่จะเป็นแบบขนาน นี่เป็นวิธีการเขียนโปรแกรมสำรองที่ใช้กับ AVR ซีรี่ย์ TINY หลายรุ่นที่ขาดพินพอสำหรับ HVPP

วิธีที่ 7: PDI

สนับสนุนโดย: XMEGA AVRs
โปรแกรมเมอร์ที่รองรับ: STK600, AVRONE, JTAG MKII, Dragon, AVRISP MKII

PDI เป็นอินเตอร์เฟสการเขียนโปรแกรมใหม่ตามโปรโตคอล debugWire สำหรับสาย XMEGA ของ AVR ปัจจุบันยังไม่ได้ใช้กับไมโครคอนโทรลเลอร์ AVR 8 บิตตัวอื่น

วิธีที่ 8: ทีพีไอ

สนับสนุนโดย: 6-Pin TINY AVRs (ATTINY10, เป็นต้น)
โปรแกรมเมอร์ที่รองรับ: STK600, Dragon, AVRISP MKII

TPI เป็นอินเตอร์เฟสการเขียนโปรแกรมที่เล็กมากสำหรับสาย TINY รุ่นใหม่ของ AVR ที่มีพินที่ จำกัด เช่น ATTINY10 6 พิน เช่นเดียวกับ dW TPI ใช้สาย / RESET ของอุปกรณ์เป็นส่วนหนึ่งของส่วนต่อประสานการสื่อสาร แต่มีความคล้ายคลึงกันสิ้นสุดลง เนื่องจาก TINY AVRs ขนาดไพน์ขาดวงจรการดีบักบนชิปโปรโตคอล TPI จึงใช้อินเตอร์เฟซการเขียนโปรแกรมใหม่สามพินในโปรโตคอลฮาล์ฟดูเพล็กซ์ เนื่องจากต้องเพิ่มบรรทัด / RESET เป็น + 12V สำหรับการตั้งโปรแกรมเมื่อตั้งค่าพิน RSTDSB ของอุปกรณ์อยู่ในปัจจุบันจึงรองรับเฉพาะบอร์ดการเขียนโปรแกรม STK600 รุ่นใหม่กว่าเท่านั้น

ส่วนคำถามที่พบบ่อยโบนัส!

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

  2. ฉันทำดองเกิลพอร์ตขนาน ฉันสามารถใช้กับ AVRStudio ได้หรือไม่?
    ฉันเกรงว่าจะไม่. AVRStudio ไม่สามารถเชื่อมต่อกับดองเกิล "โง่เง่า" ได้ - ต้องใช้อุปกรณ์การเขียนโปรแกรมอัจฉริยะ - ประกอบด้วยไมโครคอนโทรลเลอร์ - เพื่อถอดรหัสโปรโตคอลการสื่อสารที่ส่ง ดองเกิลธรรมดาที่ไม่มีไมโครคอนโทรลเลอร์จะต้องเป็น "บิตกระแทก" (เช่นสัญญาณที่เหมาะสมที่จำลองผ่านดองเกิลผ่านคอมพิวเตอร์) นั้นเอง

  3. ดังนั้นดองเกิลของฉันก็ไร้ประโยชน์แล้ว
    ไม่ได้คุณยังสามารถตั้งโปรแกรมผ่านดองเกิลที่ทำเองด้วยเครื่องมือซอฟต์แวร์เขียนโปรแกรมของบุคคลที่สาม AVRDude เป็นยูทิลิตีบรรทัดคำสั่งฟรีที่ดีเป็นที่รู้จักและมาพร้อมกับแพ็คเกจ WinAVR

  4. ตัวเลือกของฉันคืออะไรหากฉันต้องการให้โปรแกรมเมอร์ทำงานกับ AVRStudio
    เลือกโปรแกรมเมอร์ที่ใช้โปรโตคอลที่รองรับ AVRStudio นี่อาจเป็นโปรโตคอล "AVR910" อย่างง่าย (เลิกใช้งานแล้ว) หรือการติดตั้งโปรโตคอลที่ใช้โดย STK500 / AVRISP แบบกำหนดเอง โปรดทราบว่าโปรแกรมเมอร์เหล่านี้ต้องการไมโครคอนโทรลเลอร์ในนั้นนำไปสู่สถานการณ์ catch-22 สิ่งนี้อาจแก้ไขได้ด้วยการตั้งโปรแกรม AVR ล่วงหน้าไว้ล่วงหน้าเมื่อซื้อโปรแกรมด้วยเฟิร์มแวร์ที่เหมาะสมหรือโดยการตั้งโปรแกรม AVR ไว้ล่วงหน้าด้วย bootloader

  5. ตกลงฉันต้องการใช้ bootloader ฉันจะรับมันในที่แรกได้อย่างไร!
    ในการใช้ bootloader ใน AVR ก่อนอื่นคุณต้องมี bootloader ที่ตั้งโปรแกรมไว้หากคุณไม่มีโปรแกรมเมอร์ที่มีอยู่ (แม้แต่ดองเกิลที่เรียบง่ายก็เพียงพอสำหรับการตั้งโปรแกรมเริ่มต้น) คุณสามารถซื้อ AVRs ที่ตั้งโปรแกรมไว้ล่วงหน้าด้วย bootloader จากซัพพลายเออร์หลายราย
    Atmel ยังผลิตบอร์ดสาธิตผีเสื้อซึ่ง MEGA169 AVR ติดตั้งมาพร้อมกับ bootloader ที่รองรับ AVR-Studio

  6. ช่วยด้วย! ฉันยุ่งกับฟิวส์และทำให้ AVR ของฉันล้มลงในขณะที่ใช้ ISP! ข้อผิดพลาดที่พบบ่อยที่สุดคือการเปลี่ยนการเลือกนาฬิกาจะเป็นการตั้งค่าที่ไม่ถูกต้อง ลองวางนาฬิกาภายนอกบนขาตั้ง XTAL1 ของ AVR และดูว่ามีประโยชน์หรือไม่
    หากเป็นไปได้ให้ใช้วิธีแรงดันสูงวิธีใดวิธีหนึ่ง สิ่งเหล่านี้จะแก้ไขการกำหนดค่าผิดพลาดรวมถึงสิ่งที่เกี่ยวข้องกับแหล่งสัญญาณนาฬิกาเนื่องจากวิธีการไฟฟ้าแรงสูงให้นาฬิกาของ AVR ในการเขียนโปรแกรม

  7. ฉันจะติดต่อกับโปรแกรมเมอร์ได้อย่างไร?
    ซอฟต์แวร์ที่คุณใช้เชื่อมต่อกับโปรแกรมเมอร์ของคุณขึ้นอยู่กับประเภทของโปรแกรมเมอร์ที่คุณใช้
    dongles "dumb" แบบง่ายต้องใช้ซอฟต์แวร์ของ บริษัท อื่นเช่น PonyProg หรือ AVRDude เหล่านี้อาจเป็นบรรทัดคำสั่งหรือเครื่องมือ GUI - ดูรอบ ๆ บนเว็บและคุณจะต้องปรับให้เหมาะกับความต้องการของคุณ
    โปรแกรมเมอร์และ bootloaders ตามโปรโตคอล AVR910 สามารถใช้ได้ภายใน AVRStudio จากเมนูเครื่องมือเลือกตัวเลือก "AVRProg" เพื่อเปิดหน้าจอ GUI เพื่อเชื่อมต่อกับโปรแกรมเมอร์ของคุณ อีกทางเลือกหนึ่งเครื่องมือของ บริษัท อื่นเช่น AVRDude นั้นยังรองรับ AVR910
    เครื่องมือทางการได้รับการรวมเข้ากับ AVRStudio อย่างแน่นหนาโดยเฉพาะอย่างยิ่งในกรณีของตัวแปรการดีบัก (JTAG / Dragon / etc) จากเมนูเครื่องมือ AVRStudio ให้เลือกเมนูย่อย "โปรแกรม AVR ... " แล้วคลิกรายการ "เชื่อมต่อ" จากหน้าต่างใหม่เลือกเครื่องมือของคุณและอินเทอร์เฟซการเชื่อมต่อและคลิกตกลง
    ดังเช่นกรณีที่มี dongles dumb และโปรแกรมเมอร์ AVR910 เครื่องมือทางการอาจใช้กับซอฟต์แวร์โปรแกรมบุคคลที่สาม

(C) กล้อง Dean, 2009 สงวนลิขสิทธิ์ ห้ามทำซ้ำในเว็บไซต์อื่นนอกเหนือจาก AVRFreaks.net โดยไม่ได้รับอนุญาตอย่างชัดแจ้งล่วงหน้า

ทำซ้ำโดยได้รับอนุญาตอย่างชัดแจ้งก่อนแน่นอน!


5

ฉันต้องการเพิ่มอีกหนึ่งสิ่งในการสนทนา

SPI เป็นอินเทอร์เฟซทั่วไปสำหรับชิป การพาดพิงถึง 3 สายคือโหมดของ SPI ซึ่งคุณไม่ได้ใช้พินที่เลือกของชิป

I2C เป็นการประกวดครั้งสำคัญสำหรับอินเทอร์เฟซเนื่องจากใช้เพียง 2 สายไม่ว่าจะเป็นจำนวนของชิปในขณะที่ SPI ต้องการการเชื่อมต่อแบบต่อสายอื่น ๆ แต่ช้ากว่า

เมื่อสอนฉันพิจารณาการสอนเกี่ยวกับอินเทอร์เฟซซึ่งเป็นหนึ่งในภารกิจที่สำคัญที่สุด

wiki ชุมชนมีให้สำหรับผู้ที่ต้องการขยายข้อมูลของฉัน


2
ฉันไม่เคยได้ยินเกี่ยวกับการใช้ I2C เป็นอินเทอร์เฟซการเขียนโปรแกรมแฟลชดั้งเดิมบนไมโครคอนโทรลเลอร์แม้ว่าจะไม่มีเหตุผลที่มันเป็นจุดเริ่มต้นของ bootloader ที่ฉันคิดว่า ...
vicatcu

@vicatcu ฉันเพิ่งเพิ่มมันเป็นส่วนติดต่อทั่วไป
Kortuk

3

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

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

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


2

อย่างที่คุณพูดถึง serial, spi (2 wire, 3 wire?), usb, jtag, swd, etc ล้วนแล้วแต่ใช้

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

ใน AVR เช่น PDI ซึ่งฉันคิดว่าคนอาจจะเรียก spi ที่นี่อาจจะไม่ อย่างน้อยก็ปรากฏขึ้นบน xmega ที่ pdi และ jtag ภายนอกป้อนเข้าสู่อินเตอร์เฟส pdi ทั่วไปภายใน ดังนั้นหมุด pdi จะช่วยให้คุณเข้าถึงสิ่งนี้ได้โดยตรงแทนที่จะใช้โอเวอร์เฮดของ jtag ตราบใดที่อินเทอร์เฟซนี้ใช้งานได้เมื่อซอฟต์แวร์ในแฟลชแขวนแกนไว้แล้วนี่จะเป็นอินเทอร์เฟซที่เหมาะสำหรับตระกูลนี้ โพรโทคอลมีการเผยแพร่และค่อนข้างง่ายและสร้างขึ้นในฮาร์ดแวร์ มันมีข้อเสียของบัสข้อมูลแบบสองทิศทางเช่น i2c

แขนมี jtag ที่มีสายน้อยกว่าที่เรียกว่า swd ซึ่งพวกเขาไม่ต้องการเผยแพร่อย่างเปิดเผย เครื่องมือโอเพนซอร์สกำลังดำเนินการอยู่แม้ว่า นี่คือทฤษฎี jtag ต่อเนื่องสัญญาณ jtag ที่แตกต่างกันจะถูกส่งตามลำดับบนสายใดเส้นหนึ่งแทนที่จะเป็นแบบขนานบนสายจำนวนมาก ภายในส่วนที่ฉันคิดว่ามันได้รับการขนานอีกครั้งและฟีดตรรกะ jtag ปกติ นี่เป็นข้อเสียของ ARM ที่ต้องการเก็บกึ่งความลับไว้และ ARMs jtag debuggers เป็นความเจ็บปวดของราชวงศ์ที่จะใช้ต่อไป ดังนั้นนี่เป็นงานจำนวนมาก ถ้า / เมื่อ openocd ทำให้มันใช้งานได้อาจเป็นเรื่องที่แตกต่างออกไป คุณยังต้องกังวลเกี่ยวกับการวางหมุดพินและสิ่งที่เกิดขึ้นกับแกนที่แขวนอยู่

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

เครื่องมือของ Jtag เคยมีค่าใช้จ่ายหลายพันดอลลาร์ตอนนี้พวกเขาไม่ต้องทำอะไรเลยประมาณ $ 15 คุณจะได้รับบอร์ด breakout ftdi และเปลี่ยนมันเป็น openocd สำหรับ $ 50 บวกหรือลบบางอย่างคุณจะได้รับโซลูชัน usb ที่ใช้ ftdi ซึ่งทำงานนอกกรอบด้วย openocd คุณสามารถรับลิงค์ j-link ที่ไม่ใช่เชิงพาณิชย์เช่น $ 75- $ 80 แล้วมีหลายพันดอลลาร์ที่รวดเร็วแน่นอน แต่ไม่คุ้มค่าเงินโดยทั่วไป คุณซื้อเมื่อคุณเป็น บริษัท ขนาดใหญ่ที่มีเงินสดจำนวนมากที่จะระเบิดและต้องการที่จะจ่ายสำหรับการสนับสนุน เมื่อคุณชำระราคาเหล่านั้นคุณจะได้รับผลิตภัณฑ์ที่คุณต้องการและคุณจะได้รับคำตอบสำหรับคำถามการสนับสนุนทางเทคนิคทันที เช่นฟรี linux vs windows หรือ RHEL ตัวอย่างเช่นการสนับสนุน linux นั้นฟรี แต่คุณจะได้รับสิ่งที่คุณได้รับ อย่างไรก็ตามสิ่งนี้ทำให้ jtag น่าสนใจยิ่งขึ้น

คุณควรมีเครื่องมือในการดีบักและพัฒนาอาร์เซนอล jtag เมื่อใดและที่ไหน sparkfun มี usb ที่ใช้ ftdi เข้ากับบอร์ดอนุกรมและชิ้นส่วน ftdi สามารถ repurposed เป็น bangers ใหญ่คุณสามารถใช้สิ่งเหล่านี้สำหรับ spi หรือ i2c หรือ pdi หรือ jtag หรืออินเทอร์เฟซอื่น ๆ เป็นการดีที่จะได้บอร์ดที่ออกแบบมาสำหรับบัส / ชิ้นส่วนที่คุณสนใจและใช้ซอฟต์แวร์โอเพนซอร์ซฟรี / โอเพ่นซอร์ส นอกจากนี้ยังใช้บอร์ดอนุกรมเหล่านี้โดยมี 3.3 โวลต์และ 5V (ประมาณ $ 15 แต่ละอันที่คุณใช้สำหรับ lillypads และ arduino minis และอื่น ๆ ) สำหรับเชื่อมต่อกับพอร์ตอนุกรมสำหรับไมโครต่างๆที่มีโปรโตคอลอนุกรมบางประเภท ฉันคิดว่ามันง่ายกว่าที่จะเขียนตัวโหลดเดอร์ของฉันเองตามโปรโตคอลเหล่านั้นโดยเฉพาะอย่างยิ่งกลุ่มผู้ใช้ arduino / avr ที่มีการเผยแพร่ซอร์ส bootloader และเป็นชุดย่อยจำนวนมากจากมาตรฐานที่ควรสนับสนุน YMMV

ในระยะสั้นไม่มีทางออกที่ดีพวกเขาทุกคนมีข้อดีข้อเสีย เตรียมพร้อมที่จะสนับสนุนอย่างน้อยสองคน usb และอนุกรมหรือ usb และ jtag หรือ jtag และ serial ฯลฯ เพียงวางแผ่นหรือรูเข็มบนกระดานและไม่จำเป็นต้องเติม สำหรับการพัฒนาส่วนบุคคลหรือห้องแล็บของคุณมีชุดเครื่องมือเต็มรูปแบบและเตรียมที่จะเปลี่ยนจากสิ่งหนึ่งไปสู่อีกสิ่งหนึ่งในขณะที่คุณก่ออิฐชิปและต้องกู้คืนบอร์ดหรือในขณะที่คุณพัฒนา bootloader, เฟิร์มแวร์ usb เป็นต้น

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