ผลต่างระหว่างรุ่นของ "กลไกบูทโหลดเดอร์และการโปรแกรมไมโครคอนโทรลเลอร์ผ่าน UART"
Chaiporn (คุย | มีส่วนร่วม) |
Chaiporn (คุย | มีส่วนร่วม) |
||
แถว 13: | แถว 13: | ||
#define EEMWE EEMPE | #define EEMWE EEMPE | ||
#define EEWE EEPE | #define EEWE EEPE | ||
+ | |||
+ | == แก้ไขฟิวส์ของชิปไมโครคอนโทรลเลอร์ == | ||
+ | ชิป ATmega168 ต้องมีการปรับการตั้งค่าเพื่อให้ตัวชิปเริ่มต้นทำงานในพื้นที่บูทโหลดเดอร์แทนที่จะเริ่มทำงานในพื้นที่แอพลิเคชัน การตั้งค่าทำได้โดยการกำหนดค่าฟิวส์ในตัวชิปตามแผนผังด้านล่าง | ||
+ | |||
+ | --------------------------------------------------------------------- | ||
+ | ATMega88, ATMega168 | ||
+ | --------------------------------------------------------------------- | ||
+ | Fuse extended byte: | ||
+ | 0x00 = 0 0 0 0 0 0 0 0 <-- BOOTRST (boot reset vector at 0x1800) | ||
+ | \+/ | ||
+ | +------- BOOTSZ (00 = 2k bytes) | ||
+ | Fuse high byte: | ||
+ | 0xd6 = 1 1 0 1 0 1 1 0 | ||
+ | ^ ^ ^ ^ ^ \-+-/ | ||
+ | | | | | | +------ BODLEVEL 0..2 (110 = 1.8 V) | ||
+ | | | | | + --------- EESAVE (preserve EEPROM over chip erase) | ||
+ | | | | +-------------- WDTON (if 0: watchdog always on) | ||
+ | | | +---------------- SPIEN (allow serial programming) | ||
+ | | +------------------ DWEN (debug wire enable) | ||
+ | +-------------------- RSTDISBL (reset pin is enabled) | ||
+ | Fuse low byte: | ||
+ | 0xdf = 1 1 0 1 1 1 1 1 | ||
+ | ^ ^ \ / \--+--/ | ||
+ | | | | +------- CKSEL 3..0 (external >8M crystal) | ||
+ | | | +--------------- SUT 1..0 (crystal osc, BOD enabled) | ||
+ | | +------------------ CKOUT (if 0: Clock output enabled) | ||
+ | +-------------------- CKDIV8 (if 0: divide by 8) | ||
+ | --------------------------------------------------------------------- |
รุ่นแก้ไขเมื่อ 06:44, 20 กรกฎาคม 2559
ชิปไมโครคอนโทรลเลอร์ที่นำมาใช้นั้นต้องอาศัยการโปรแกรมผ่านเครื่องโปรแกรมชิป วิกินี้จะอธิบายถึงการเตรียมและบรรจุบูทโหลดเดอร์ลงไปในชิปเพื่อให้ตัวชิปสามารถโหลดโปรแกรมผ่านทางพอร์ทอนุกรมของคอมพิวเตอร์โดยไม่ต้องอาศัยเครื่องโปรแกรมชิปอีกต่อไป
บูทโหลดเดอร์สำหรับชิป AVR
ศึกษาเอกสารเกี่ยวกับ Self-Programming บนชิป AVR และดาวน์โหลดโปรแกรมตัวอย่างจากลิ้งค์ต่อไปนี้
ปรับแก้ไขโปรแกรมตัวอย่าง
โค้ดตัวอย่างจาก Atmel มาพร้อมกับเชลล์สคริปต์ preprocessor.sh ที่ใช้สำหรับสร้างไฟล์ defines.h ขึ้นมาเพื่อควบคุมการสร้างบูทโหลดเดอร์ให้สอดคล้องกับวงจรที่ออกแบบขึ้น ให้รันสคริปต์นี้โดยระบุรุ่นของชิป ขนาดของบูทโหลดเดอร์ หมายเลขพอร์ทที่ใช้กำหนดเงื่อนไขการเข้าบูทโหลดเดอร์ ความถี่สัญญาณนาฬิกา และบอดเรทสำหรับพอร์ทอนุกรม แล้วบันทึกผลลัพธ์ที่ได้ไว้ในไฟล์ defines.h
เพิ่มคำสั่งสองบรรทัดนี้เข้าไปที่ท้ายสุดของไฟล์ defines.h เนื่องจากชิป ATMega168 ใช้ชื่อบิตสำหรับควบคุมการเขียน EEPROM ที่แตกต่างไปจากชิปตระกูล AVR เบอร์อื่น ๆ
#define EEMWE EEMPE #define EEWE EEPE
แก้ไขฟิวส์ของชิปไมโครคอนโทรลเลอร์
ชิป ATmega168 ต้องมีการปรับการตั้งค่าเพื่อให้ตัวชิปเริ่มต้นทำงานในพื้นที่บูทโหลดเดอร์แทนที่จะเริ่มทำงานในพื้นที่แอพลิเคชัน การตั้งค่าทำได้โดยการกำหนดค่าฟิวส์ในตัวชิปตามแผนผังด้านล่าง
--------------------------------------------------------------------- ATMega88, ATMega168 --------------------------------------------------------------------- Fuse extended byte: 0x00 = 0 0 0 0 0 0 0 0 <-- BOOTRST (boot reset vector at 0x1800) \+/ +------- BOOTSZ (00 = 2k bytes) Fuse high byte: 0xd6 = 1 1 0 1 0 1 1 0 ^ ^ ^ ^ ^ \-+-/ | | | | | +------ BODLEVEL 0..2 (110 = 1.8 V) | | | | + --------- EESAVE (preserve EEPROM over chip erase) | | | +-------------- WDTON (if 0: watchdog always on) | | +---------------- SPIEN (allow serial programming) | +------------------ DWEN (debug wire enable) +-------------------- RSTDISBL (reset pin is enabled) Fuse low byte: 0xdf = 1 1 0 1 1 1 1 1 ^ ^ \ / \--+--/ | | | +------- CKSEL 3..0 (external >8M crystal) | | +--------------- SUT 1..0 (crystal osc, BOD enabled) | +------------------ CKOUT (if 0: Clock output enabled) +-------------------- CKDIV8 (if 0: divide by 8) ---------------------------------------------------------------------