ในขณะที่ฉันชอบที่จะดำน้ำในวิธีการเขียนโปรแกรมต่าง ๆ ที่มีคนอื่นมีอยู่แล้ว นี่คือการสอนของ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 รุ่นใหม่กว่าเท่านั้น
ส่วนคำถามที่พบบ่อยโบนัส!
วิธีใดดีที่สุด
ไม่มีวิธี "ดีที่สุด" สากล การเขียนโปรแกรม ISP นั้นง่ายและได้รับความนิยมอย่างสูง โหมดการตั้งโปรแกรมแรงดันสูงสองโหมด (แล้วแต่จำนวนใดจะเหมาะสมกับอุปกรณ์ของคุณ) เป็นคุณสมบัติที่มีประสิทธิภาพมากที่สุดเนื่องจากพวกเขาอนุญาตให้มีการซ่อมแซม AVR ซึ่งมีฟิวส์ที่กำหนดค่าผิด อย่างไรก็ตามวิธีการเหล่านี้เป็นปัญหาในการตั้งค่าดังนั้นเหตุผลที่ผู้ใช้ส่วนใหญ่ไปกับ ISP
ฉันทำดองเกิลพอร์ตขนาน ฉันสามารถใช้กับ AVRStudio ได้หรือไม่?
ฉันเกรงว่าจะไม่. AVRStudio ไม่สามารถเชื่อมต่อกับดองเกิล "โง่เง่า" ได้ - ต้องใช้อุปกรณ์การเขียนโปรแกรมอัจฉริยะ - ประกอบด้วยไมโครคอนโทรลเลอร์ - เพื่อถอดรหัสโปรโตคอลการสื่อสารที่ส่ง ดองเกิลธรรมดาที่ไม่มีไมโครคอนโทรลเลอร์จะต้องเป็น "บิตกระแทก" (เช่นสัญญาณที่เหมาะสมที่จำลองผ่านดองเกิลผ่านคอมพิวเตอร์) นั้นเอง
ดังนั้นดองเกิลของฉันก็ไร้ประโยชน์แล้ว
ไม่ได้คุณยังสามารถตั้งโปรแกรมผ่านดองเกิลที่ทำเองด้วยเครื่องมือซอฟต์แวร์เขียนโปรแกรมของบุคคลที่สาม AVRDude เป็นยูทิลิตีบรรทัดคำสั่งฟรีที่ดีเป็นที่รู้จักและมาพร้อมกับแพ็คเกจ WinAVR
ตัวเลือกของฉันคืออะไรหากฉันต้องการให้โปรแกรมเมอร์ทำงานกับ AVRStudio
เลือกโปรแกรมเมอร์ที่ใช้โปรโตคอลที่รองรับ AVRStudio นี่อาจเป็นโปรโตคอล "AVR910" อย่างง่าย (เลิกใช้งานแล้ว) หรือการติดตั้งโปรโตคอลที่ใช้โดย STK500 / AVRISP แบบกำหนดเอง โปรดทราบว่าโปรแกรมเมอร์เหล่านี้ต้องการไมโครคอนโทรลเลอร์ในนั้นนำไปสู่สถานการณ์ catch-22 สิ่งนี้อาจแก้ไขได้ด้วยการตั้งโปรแกรม AVR ล่วงหน้าไว้ล่วงหน้าเมื่อซื้อโปรแกรมด้วยเฟิร์มแวร์ที่เหมาะสมหรือโดยการตั้งโปรแกรม AVR ไว้ล่วงหน้าด้วย bootloader
ตกลงฉันต้องการใช้ bootloader ฉันจะรับมันในที่แรกได้อย่างไร!
ในการใช้ bootloader ใน AVR ก่อนอื่นคุณต้องมี bootloader ที่ตั้งโปรแกรมไว้หากคุณไม่มีโปรแกรมเมอร์ที่มีอยู่ (แม้แต่ดองเกิลที่เรียบง่ายก็เพียงพอสำหรับการตั้งโปรแกรมเริ่มต้น) คุณสามารถซื้อ AVRs ที่ตั้งโปรแกรมไว้ล่วงหน้าด้วย bootloader จากซัพพลายเออร์หลายราย
Atmel ยังผลิตบอร์ดสาธิตผีเสื้อซึ่ง MEGA169 AVR ติดตั้งมาพร้อมกับ bootloader ที่รองรับ AVR-Studio
ช่วยด้วย! ฉันยุ่งกับฟิวส์และทำให้ AVR ของฉันล้มลงในขณะที่ใช้ ISP!
ข้อผิดพลาดที่พบบ่อยที่สุดคือการเปลี่ยนการเลือกนาฬิกาจะเป็นการตั้งค่าที่ไม่ถูกต้อง ลองวางนาฬิกาภายนอกบนขาตั้ง XTAL1 ของ AVR และดูว่ามีประโยชน์หรือไม่
หากเป็นไปได้ให้ใช้วิธีแรงดันสูงวิธีใดวิธีหนึ่ง สิ่งเหล่านี้จะแก้ไขการกำหนดค่าผิดพลาดรวมถึงสิ่งที่เกี่ยวข้องกับแหล่งสัญญาณนาฬิกาเนื่องจากวิธีการไฟฟ้าแรงสูงให้นาฬิกาของ AVR ในการเขียนโปรแกรม
ฉันจะติดต่อกับโปรแกรมเมอร์ได้อย่างไร?
ซอฟต์แวร์ที่คุณใช้เชื่อมต่อกับโปรแกรมเมอร์ของคุณขึ้นอยู่กับประเภทของโปรแกรมเมอร์ที่คุณใช้
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 โดยไม่ได้รับอนุญาตอย่างชัดแจ้งล่วงหน้า