ผลต่างระหว่างรุ่นของ "กลไกบูทโหลดเดอร์และการโปรแกรมไมโครคอนโทรลเลอร์ผ่าน UART"

จาก Theory Wiki
ไปยังการนำทาง ไปยังการค้นหา
แถว 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)
---------------------------------------------------------------------