From bc35a4eac206e606cfb252d8f764095ac08c9e86 Mon Sep 17 00:00:00 2001 From: gcielniak Date: Thu, 30 Apr 2015 15:43:21 +0100 Subject: [PATCH 1/4] mega32u4 support for megabootloader --- .../avr/bootloaders/atmega/ATmegaBOOT_168.c | 41 +++++++++++++++++-- .../arduino/avr/bootloaders/atmega/Makefile | 15 +++++++ 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c b/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c index 880cf9b41f2..b4dd93bf317 100644 --- a/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c +++ b/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168.c @@ -115,8 +115,9 @@ #define BL_PIN PINF #define BL0 PINF7 #define BL1 PINF6 -#elif defined __AVR_ATmega1280__ +#elif defined(__AVR_ATmega1280__) || defined(__AVR_ATmega32U4__) /* we just don't do anything for the MEGA and enter bootloader on reset anyway*/ +/* the same for mega32*/ #else /* other ATmegas have only one UART, so only one pin is defined to enter bootloader */ #define BL_DDR DDRD @@ -134,6 +135,12 @@ #define LED_PORT PORTB #define LED_PIN PINB #define LED PINB7 +#elif defined (__AVR_ATmega32U4__) +/* using yellow on Leonardo */ +#define LED_DDR DDRC +#define LED_PORT PORTC +#define LED_PIN PINC +#define LED PINC7 #else /* Onboard LED is connected to pin PB5 in Arduino NG, Diecimila, and Duomilanuove */ /* other boards like e.g. Crumb8, Crumb168 are using PB2 */ @@ -228,8 +235,12 @@ #define SIG2 0x93 #define SIG3 0x08 #define PAGE_SIZE 0x20U //32 words -#endif +#elif defined __AVR_ATmega32U4__ +#define SIG2 0x95 +#define SIG3 0x87 +#define PAGE_SIZE 0x40U //64 words +#endif /* function prototypes */ void putch(char); @@ -394,6 +405,13 @@ int main(void) UBRRL = (((F_CPU/BAUD_RATE)/16)-1); UCSRB = (1<> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); #else /* m16,m32,m169,m8515,m8535 */ UBRRL = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); @@ -580,7 +598,7 @@ int main(void) /* if ((length.byte[0] & 0x01) == 0x01) length.word++; //Even up an odd number of bytes */ if ((length.byte[0] & 0x01)) length.word++; //Even up an odd number of bytes cli(); //Disable interrupts, just to be sure -#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) +#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega1281__) || defined(__AVR_ATmega32U4__) while(bit_is_set(EECR,EEPE)); //Wait for previous EEPROM writes to complete #else while(bit_is_set(EECR,EEWE)); //Wait for previous EEPROM writes to complete @@ -679,7 +697,7 @@ int main(void) "rjmp write_page \n\t" "block_done: \n\t" "clr __zero_reg__ \n\t" //restore zero register -#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ || __AVR_ATmega128__ || __AVR_ATmega1280__ || __AVR_ATmega1281__ +#if defined __AVR_ATmega168__ || __AVR_ATmega328P__ || __AVR_ATmega128__ || __AVR_ATmega1280__ || __AVR_ATmega1281__ || __AVR_ATmega32U4__ : "=m" (SPMCSR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" #else : "=m" (SPMCR) : "M" (PAGE_SIZE) : "r0","r16","r17","r24","r25","r28","r29","r30","r31" @@ -931,6 +949,9 @@ void putch(char ch) #elif defined(__AVR_ATmega168__) || defined(__AVR_ATmega328P__) while (!(UCSR0A & _BV(UDRE0))); UDR0 = ch; +#elif defined(__AVR_ATmega32U4__) + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; #else /* m8,16,32,169,8515,8535,163 */ while (!(UCSRA & _BV(UDRE))); @@ -976,6 +997,18 @@ char getch(void) app_start(); } return UDR0; +#elif defined(__AVR_ATmega32U4__) + uint32_t count = 0; + + while(!(UCSR1A & _BV(RXC1))) { + /* 20060803 DojoCorp:: Addon coming from the previous Bootloader*/ + /* HACKME:: here is a good place to count times*/ + count++; + if (count > MAX_TIME_COUNT) + app_start(); + } + + return UDR1; #else /* m8,16,32,169,8515,8535,163 */ uint32_t count = 0; diff --git a/hardware/arduino/avr/bootloaders/atmega/Makefile b/hardware/arduino/avr/bootloaders/atmega/Makefile index 0fd54db7f68..adaff8981f3 100644 --- a/hardware/arduino/avr/bootloaders/atmega/Makefile +++ b/hardware/arduino/avr/bootloaders/atmega/Makefile @@ -196,6 +196,21 @@ mega_isp: LFUSE = FF mega_isp: EFUSE = F5 mega_isp: isp +mega32u4: TARGET = atmega32u4 +mega32u4: MCU_TARGET = atmega32u4 +mega32u4: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=9600 +mega32u4: AVR_FREQ = 16000000L +mega32u4: LDSECTION = --section-start=.text=0x7000 +mega32u4: $(PROGRAM)_atmega32u4.hex + +mega32u4_isp: mega32u4 +mega32u4_isp: TARGET = atmega32u4 +mega32u4_isp: MCU_TARGET = atmega32u4 +mega32u4_isp: HFUSE = D8 +mega32u4_isp: LFUSE = FF +mega32u4_isp: EFUSE = CB +mega32u4_isp: isp + isp: $(TARGET) $(ISPFUSES) $(ISPFLASH) From 74b1d7b4a7eb2691b6ece5651b8a78362cf4e0a8 Mon Sep 17 00:00:00 2001 From: gcielniak Date: Sat, 2 May 2015 15:36:35 +0100 Subject: [PATCH 2/4] BT support for mega32u4 --- hardware/arduino/avr/boards.txt | 41 ++++++ .../atmega/ATmegaBOOT_168_atmega32u4.hex | 124 ++++++++++++++++++ .../arduino/avr/bootloaders/atmega/Makefile | 5 +- 3 files changed, 168 insertions(+), 2 deletions(-) create mode 100644 hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega32u4.hex diff --git a/hardware/arduino/avr/boards.txt b/hardware/arduino/avr/boards.txt index 60b177d1f75..588a93d0dc6 100644 --- a/hardware/arduino/avr/boards.txt +++ b/hardware/arduino/avr/boards.txt @@ -306,6 +306,47 @@ leonardo.build.extra_flags={build.usb_flags} ############################################################## +leonardo_bt.name=Arduino Leonardo BT +leonardo_bt.vid.0=0x2341 +leonardo_bt.pid.0=0x0036 +leonardo_bt.vid.1=0x2341 +leonardo_bt.pid.1=0x8036 +leonardo_bt.vid.2=0x2A03 +leonardo_bt.pid.2=0x0036 +leonardo_bt.vid.3=0x2A03 +leonardo_bt.pid.3=0x8036 + +leonardo_bt.vid.0x2A03.warning=Uncertified + +leonardo_bt.upload.tool=avrdude +leonardo_bt.upload.protocol=arduino +leonardo_bt.upload.maximum_size=28672 +leonardo_bt.upload.maximum_data_size=2560 +leonardo_bt.upload.speed=57600 +leonardo_bt.upload.disable_flushing=true +leonardo_bt.upload.use_1200bps_touch=false +leonardo_bt.upload.wait_for_upload_port=true + +leonardo_bt.bootloader.tool=avrdude +leonardo_bt.bootloader.low_fuses=0xff +leonardo_bt.bootloader.high_fuses=0xd8 +leonardo_bt.bootloader.extended_fuses=0xcb +leonardo_bt.bootloader.file=caterina/Caterina-Leonardo.hex +leonardo_bt.bootloader.unlock_bits=0x3F +leonardo_bt.bootloader.lock_bits=0x2F + +leonardo_bt.build.mcu=atmega32u4 +leonardo_bt.build.f_cpu=16000000L +leonardo_bt.build.vid=0x2341 +leonardo_bt.build.pid=0x8036 +leonardo_bt.build.usb_product="Arduino Leonardo BT" +leonardo_bt.build.board=AVR_LEONARDO +leonardo_bt.build.core=arduino +leonardo_bt.build.variant=leonardo +leonardo_bt.build.extra_flags={build.usb_flags} + +############################################################## + micro.name=Arduino Micro micro.vid.0=0x2341 micro.pid.0=0x0037 diff --git a/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega32u4.hex b/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega32u4.hex new file mode 100644 index 00000000000..6be146b6685 --- /dev/null +++ b/hardware/arduino/avr/bootloaders/atmega/ATmegaBOOT_168_atmega32u4.hex @@ -0,0 +1,124 @@ +:107800000C94563C0C94733C0C94733C0C94733C59 +:107810000C94733C0C94733C0C94733C0C94733C2C +:107820000C94733C0C94733C0C94733C0C94733C1C +:107830000C94733C0C94733C0C94733C0C94733C0C +:107840000C94733C0C94733C0C94733C0C94733CFC +:107850000C94733C0C94733C0C94733C0C94733CEC +:107860000C94733C0C94733C0C94733C0C94733CDC +:107870000C94733C0C94733C0C94733C0C94733CCC +:107880000C94733C0C94733C0C94733C0C94733CBC +:107890000C94733C0C94733C0C94733C0C94733CAC +:1078A0000C94733C0C94733C0C94733C11241FBED9 +:1078B000CFEFDAE0DEBFCDBF11E0A0E0B1E0E4E859 +:1078C000FFE702C005900D92A230B107D9F712E090 +:1078D000A2E0B1E001C01D92AD30B107E1F70E9416 +:1078E000473D0C94C03F0C94003C982F959595957E +:1078F00095959595905D8F708A301CF0282F295AA8 +:1079000002C0282F205D8091C80085FFFCCF909396 +:10791000CE008091C80085FFFCCF2093CE00089553 +:10792000982F8091C80085FFFCCF9093CE000895DA +:10793000EF92FF920F931F93EE24FF24870113C051 +:107940000894E11CF11C011D111D81E0E81684E280 +:10795000F80684EF080780E0180728F0E09104019A +:10796000F091050109958091C80087FFE9CF8091CA +:10797000CE001F910F91FF90EF9008950E94983CC8 +:10798000982F8091C80085FFFCCF9093CE00913650 +:1079900014F0975503C090330CF09053892F08953D +:1079A0001F930E94BE3C182F0E94BE3C1295107F70 +:1079B000810F1F9108951F93182F03C00E94983CB8 +:1079C00011501123D9F71F9108951F93182F0E946A +:1079D000983C8032A9F48091C80085FFFCCF84E1F7 +:1079E0008093CE008091C80085FFFCCF1093CE001D +:1079F0008091C80085FFFCCF80E18093CE000CC051 +:107A0000809103018F5F80930301853029F4E09119 +:107A10000401F091050109951F9108950E94983C79 +:107A2000803279F48091C80085FFFCCF84E1809397 +:107A3000CE008091C80085FFFCCF80E18093CE000E +:107A40000895809103018F5F80930301853029F4AD +:107A5000E0910401F09105010995089540E951E094 +:107A600013C0479A28EE33E0FA013197F1F721501D +:107A70003040D1F7479828EE33E0FA013197F1F71B +:107A800021503040D1F78150882359F708952F9223 +:107A90003F924F925F926F927F928F929F92AF929E +:107AA000BF92CF92DF92EF92FF920F931F93CF93EB +:107AB000DF9394B714BE809160008861809360006A +:107AC0001092600091FD05C0E0910401F091050164 +:107AD000099580E18093CC001092CD001092C800EF +:107AE00086E08093CA0088E18093C9003F9A83E0D2 +:107AF0000E942E3D14E1812EB0E19B2EA6E57A2E48 +:107B0000F2E56F2EE0E25E2E79E4472E63E5362E35 +:107B100050E5252E0E94983C803309F460C08133E3 +:107B2000D9F50E94983C803209F006C28091C800C5 +:107B300085FFFCCF8092CE008091C80085FFFCCFEE +:107B400081E48093CE008091C80085FFFCCF7092C5 +:107B5000CE008091C80085FFFCCF6092CE0080915E +:107B6000C80085FFFCCF5092CE008091C80085FFF1 +:107B7000FCCF4092CE008091C80085FFFCCF3092B0 +:107B8000CE008091C80085FFFCCF2092CE0080916E +:107B9000C80085FFFCCFC7C1803439F40E94983CEF +:107BA0008638E8F00E94983C1AC0813499F40E940B +:107BB000983C803811F482E0BCC1813811F481E036 +:107BC000B8C1823811F480E1B4C1883909F0B0C17C +:107BD00083E0AFC1823431F484E10E94DB3C0E9437 +:107BE0000E3D98CF853411F485E0F7CF8035B9F399 +:107BF0008235A9F3813531F40E940E3D88E08093EF +:107C00006000FFCF853549F40E94983C80930601BF +:107C10000E94983C80930701E2CF8635C9F40E9408 +:107C2000983C803389F40E94983C0E94983C182F1D +:107C30000E94983C112311F48EE17BC1113011F4A4 +:107C400085E977C187E875C183E00E94DB3C70C19C +:107C5000843609F0D1C00E94983C809309020E94AA +:107C6000983C8093080280910C028E7F80930C02D6 +:107C70000E94983C853429F480910C0281608093A5 +:107C80000C0200E010E008C00E94983CF801E85F98 +:107C9000FE4F80830F5F1F4F809108029091090271 +:107CA0000817190788F30E94983C803209F044C1F4 +:107CB00080910C0280FF2AC08091060190910701FB +:107CC000880F991F909307018093060100E010E050 +:107CD00015C0F801E85FFE4F809106019091070101 +:107CE00060810E94B23F8091060190910701019648 +:107CF00090930701809306010F5F1F4F8091080248 +:107D0000909109020817190720F36BC080910701B1 +:107D10008823880F880B817080930B028091060165 +:107D200090910701880F991F909307018093060196 +:107D30008091080280FF09C0809108029091090299 +:107D400001969093090280930802F894F999FECF66 +:107D50001127E0910601F0910701C8E0D1E0809180 +:107D6000080290910902103091F4009157000170BF +:107D70000130D9F303E000935700E89500915700D4 +:107D800001700130D9F301E100935700E8950990A3 +:107D900019900091570001700130D9F301E0009370 +:107DA0005700E8951395103498F01127009157006B +:107DB00001700130D9F305E000935700E895009178 +:107DC000570001700130D9F301E100935700E895A5 +:107DD0003296029709F0C7CF103011F00296E5CF26 +:107DE00011248091C80085FFFCCF8092CE00809145 +:107DF000C80085FFFCCF97C0843709F06FC00E9490 +:107E0000983C809309020E94983C809308028091DC +:107E1000060190910701880F991F909307018093A5 +:107E200006010E94983C90910C02853411F49160F7 +:107E300001C09E7F90930C020E94983C803209F012 +:107E400069CE8091C80085FFFCCF8092CE00C090A3 +:107E50000802D090090280910C02AA24A394A822BF +:107E600092E0B92EB822EE24FF2430C0AA20A9F057 +:107E70000091060110910701C8010E94AA3F982FA6 +:107E80008091C80085FFFCCF9093CE000F5F1F4FFD +:107E9000109307010093060116C0BB2059F4E0912E +:107EA0000601F091070194918091C80085FFFCCFF5 +:107EB0009093CE00809106019091070101969093D6 +:107EC0000701809306010894E11CF11CEC14FD04E9 +:107ED00068F28091C80085FFFCCF25C0853731F559 +:107EE0000E94983C803241F58091C80085FFFCCF0C +:107EF0008092CE008091C80085FFFCCF8EE18093F8 +:107F0000CE008091C80085FFFCCF85E98093CE002C +:107F10008091C80085FFFCCF87E88093CE008091D8 +:107F2000C80085FFFCCF9092CE00F4CD863721F4B7 +:107F300080E00E94E53CEECD809103018F5F80934D +:107F40000301853009F0E6CDE0910401F0910501CF +:107F50000995E0CDF999FECF92BD81BDF89A992798 +:107F600080B50895262FF999FECF1FBA92BD81BD25 +:107F700020BD0FB6F894FA9AF99A0FBE01960895AB +:047F8000F894FFCFA3 +:027F840080007B +:040000030000780081 +:00000001FF diff --git a/hardware/arduino/avr/bootloaders/atmega/Makefile b/hardware/arduino/avr/bootloaders/atmega/Makefile index adaff8981f3..97fe454893a 100644 --- a/hardware/arduino/avr/bootloaders/atmega/Makefile +++ b/hardware/arduino/avr/bootloaders/atmega/Makefile @@ -198,9 +198,10 @@ mega_isp: isp mega32u4: TARGET = atmega32u4 mega32u4: MCU_TARGET = atmega32u4 -mega32u4: CFLAGS += '-DMAX_TIME_COUNT=F_CPU>>4' '-DNUM_LED_FLASHES=0' -DBAUD_RATE=9600 +mega32u4: CFLAGS += -DMAX_TIME_COUNT=F_CPU -DNUM_LED_FLASHES=3 -DBAUD_RATE=57600 -DWATCHDOG_MODS mega32u4: AVR_FREQ = 16000000L -mega32u4: LDSECTION = --section-start=.text=0x7000 +mega32u4: LDSECTION = --section-start=.text=0x7800 +mega32u4: OPTIMIZE = -Os mega32u4: $(PROGRAM)_atmega32u4.hex mega32u4_isp: mega32u4 From 9ca982c655bd77979011ee3fe177b4ee877f3fd2 Mon Sep 17 00:00:00 2001 From: gcielniak Date: Sat, 2 May 2015 21:40:20 +0100 Subject: [PATCH 3/4] working optiboot on Leonardo --- .../arduino/avr/bootloaders/optiboot/Makefile | 7 ++++ .../avr/bootloaders/optiboot/optiboot.c | 23 ++++++++++++ .../optiboot/optiboot_atmega32u4.hex | 35 +++++++++++++++++++ .../avr/bootloaders/optiboot/pin_defs.h | 9 +++++ 4 files changed, 74 insertions(+) create mode 100644 hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega32u4.hex diff --git a/hardware/arduino/avr/bootloaders/optiboot/Makefile b/hardware/arduino/avr/bootloaders/optiboot/Makefile index b9f3ed5a48e..111f06ca6be 100644 --- a/hardware/arduino/avr/bootloaders/optiboot/Makefile +++ b/hardware/arduino/avr/bootloaders/optiboot/Makefile @@ -418,6 +418,13 @@ luminet_isp: LFUSE = 62 luminet_isp: EFUSE = FE luminet_isp: isp +mega32u4: TARGET = atmega32u4 +mega32u4: MCU_TARGET = atmega32u4 +mega32u4: CFLAGS += -DLED_START_FLASHES=3 -DBAUD_RATE=57600 +mega32u4: AVR_FREQ = 16000000L +mega32u4: LDSECTIONS = -Wl,--section-start=.text=0x7E00 +mega32u4: $(PROGRAM)_atmega32u4.hex + # # Generic build instructions # diff --git a/hardware/arduino/avr/bootloaders/optiboot/optiboot.c b/hardware/arduino/avr/bootloaders/optiboot/optiboot.c index d499d85e83c..e98f75c5f6e 100644 --- a/hardware/arduino/avr/bootloaders/optiboot/optiboot.c +++ b/hardware/arduino/avr/bootloaders/optiboot/optiboot.c @@ -246,6 +246,9 @@ void appStart() __attribute__ ((naked)); #elif defined(__AVR_ATmega8__) || defined(__AVR_ATmega88__) #define RAMSTART (0x100) #define NRWWSTART (0x1800) +#elif defined(__AVR_ATmega32U4__) +#define RAMSTART (0x100) +#define NRWWSTART (0x7000) #endif /* C zero initialises all global variables. However, that requires */ @@ -299,6 +302,12 @@ int main(void) { UCSRB = _BV(RXEN) | _BV(TXEN); // enable Rx & Tx UCSRC = _BV(URSEL) | _BV(UCSZ1) | _BV(UCSZ0); // config USART; 8N1 UBRRL = (uint8_t)( (F_CPU + BAUD_RATE * 4L) / (BAUD_RATE * 8L) - 1 ); +#elif defined(__AVR_ATmega32U4__) + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); #else UCSR0A = _BV(U2X0); //Double speed mode USART0 UCSR0B = _BV(RXEN0) | _BV(TXEN0); @@ -502,8 +511,13 @@ int main(void) { void putch(char ch) { #ifndef SOFT_UART +#ifdef __AVR_ATmega32U4__ + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = ch; +#else while (!(UCSR0A & _BV(UDRE0))); UDR0 = ch; +#endif #else __asm__ __volatile__ ( " com %[ch]\n" // ones complement, carry set @@ -565,6 +579,14 @@ uint8_t getch(void) { : "r25" ); +#else +#ifdef __AVR_ATmega32U4__ + while(!(UCSR1A & _BV(RXC1))) + ; + if (!(UCSR1A & _BV(FE1))) + watchdogReset(); + + ch = UDR1; #else while(!(UCSR0A & _BV(RXC0))) ; @@ -582,6 +604,7 @@ uint8_t getch(void) { ch = UDR0; #endif +#endif #ifdef LED_DATA_FLASH #ifdef __AVR_ATmega8__ diff --git a/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega32u4.hex b/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega32u4.hex new file mode 100644 index 00000000000..9fe098342a7 --- /dev/null +++ b/hardware/arduino/avr/bootloaders/optiboot/optiboot_atmega32u4.hex @@ -0,0 +1,35 @@ +:020000000404F6 +:107E0000112484B714BE81FFF6D085E080938100F1 +:107E100080E18093CC001092CD001092C80086E0E3 +:107E20008093CA0088E18093C9008EE0CED03F9A4B +:107E300086E020E33CEF91E03093850020938400BE +:107E400096BBB09BFECF379AA8958150A9F7CC245A +:107E5000DD2488248394B5E0AB2EA1E19A2EF3E0D3 +:107E6000BF2EA7D0813461F4A4D0082FB4D002383B +:107E700011F0013811F484E001C083E092D08EC08B +:107E8000823411F484E103C0853419F485E0ABD069 +:107E900085C08535A1F48DD0082F10E08AD0E82E5A +:107EA000FF24FE2CEE24E02AF12A8F2D881F88273C +:107EB000881F8BBFEE0CFF1C8ED067016FC086350C +:107EC00021F484E090D080E0D9CF843609F040C01E +:107ED00070D06FD0082F6DD080E0C81680E7D8062C +:107EE00018F4F601B7BEE895C0E0D1E062D08993FE +:107EF0000C17E1F7F0E0CF16F0E7DF0618F0F60117 +:107F0000B7BEE89568D007B600FCFDCFA601A0E09B +:107F1000B1E02C9130E011968C91119790E0982F60 +:107F20008827822B932B1296FA010C0187BEE895C5 +:107F300011244E5F5F4FF1E0A038BF0751F7F60103 +:107F4000A7BEE89507B600FCFDCF97BEE89526C012 +:107F50008437B1F42ED02DD0F82E2BD03CD0F601A2 +:107F6000EF2C8F010F5F1F4F84911BD0EA94F80113 +:107F7000C1F70894C11CD11CFA94CF0CD11C0EC0BF +:107F8000853739F428D08EE10CD085E90AD087E80E +:107F900075CF813511F488E018D01DD080E101D073 +:107FA00060CF982F8091C80085FFFCCF9093CE00C2 +:107FB00008958091C80087FFFCCF8091C80084FDA0 +:107FC00001C0A8958091CE000895E0E6F0E098E128 +:107FD000908380830895EDDF803219F088E0F5DF2B +:107FE000FFCF84E1DECF1F93182FE3DF1150E9F7B5 +:107FF000F2DF1F91089580E0E8DFEE27FF27099464 +:0400000300007E007B +:00000001FF diff --git a/hardware/arduino/avr/bootloaders/optiboot/pin_defs.h b/hardware/arduino/avr/bootloaders/optiboot/pin_defs.h index 27d77724473..be7d1189cfb 100644 --- a/hardware/arduino/avr/bootloaders/optiboot/pin_defs.h +++ b/hardware/arduino/avr/bootloaders/optiboot/pin_defs.h @@ -78,3 +78,12 @@ #define UART_RX_BIT 0 #endif #endif + +/* Leonardo support */ +#if defined(__AVR_ATmega32U4__) +/* using yellow LED on Leonardo */ +#define LED_DDR DDRC +#define LED_PORT PORTC +#define LED_PIN PINC +#define LED PINC7 +#endif From 5c9361451ab27d1f415a722596555c9c76960462 Mon Sep 17 00:00:00 2001 From: gcielniak Date: Wed, 6 May 2015 22:40:42 +0100 Subject: [PATCH 4/4] Dual boot caterina working Works both on USB and USART com_port. EEPROM support off to save memory. --- .gitignore | 9 + .../avr/bootloaders/caterina/Caterina.c | 119 +++++--- .../avr/bootloaders/caterina/Caterina.hex | 258 ++++++++++++++++++ .../arduino/avr/bootloaders/caterina/Makefile | 10 +- 4 files changed, 360 insertions(+), 36 deletions(-) create mode 100644 hardware/arduino/avr/bootloaders/caterina/Caterina.hex diff --git a/.gitignore b/.gitignore index a132b332d34..805f7c4da07 100644 --- a/.gitignore +++ b/.gitignore @@ -53,3 +53,12 @@ test-bin .directory hardware/arduino/avr/libraries/Bridge/examples/XivelyClient/passwords.h avr-toolchain-*.zip +LUFA-111009 +.dep +*.eep +*.elf +*.lss +*.lst +*.map +*.o +*.sym \ No newline at end of file diff --git a/hardware/arduino/avr/bootloaders/caterina/Caterina.c b/hardware/arduino/avr/bootloaders/caterina/Caterina.c index 9860b3a3f0b..3633d323518 100644 --- a/hardware/arduino/avr/bootloaders/caterina/Caterina.c +++ b/hardware/arduino/avr/bootloaders/caterina/Caterina.c @@ -56,6 +56,8 @@ static uint32_t CurrAddress; */ static bool RunBootloader = true; +static uint8_t com_port = 0; + /* Pulse generation counters to keep track of the time remaining for each pulse type */ #define TX_RX_LED_PULSE_PERIOD 100 uint16_t TxLEDPulse = 0; // time remaining for Tx LED pulse @@ -68,6 +70,8 @@ uint16_t Timeout = 0; uint16_t bootKey = 0x7777; volatile uint16_t *const bootKeyPtr = (volatile uint16_t *)0x0800; +static uint8_t page_buffer[SPM_PAGESIZE]; + void StartSketch(void) { cli(); @@ -189,6 +193,12 @@ void SetupHardware(void) TIMSK1 = (1 << OCIE1A); // enable timer 1 output compare A match interrupt TCCR1B = ((1 << CS11) | (1 << CS10)); // 1/64 prescaler on timer 1 input + UBRR1L = (uint8_t)(F_CPU/(BAUD_RATE*16L)-1); + UBRR1H = (F_CPU/(BAUD_RATE*16L)-1) >> 8; + UCSR1A = 0x00; + UCSR1C = 0x06; + UCSR1B = _BV(TXEN1)|_BV(RXEN1); + /* Initialize USB Subsystem */ USB_Init(); } @@ -336,6 +346,9 @@ static void ReadWriteMemoryBlock(const uint8_t Command) } else { + for (uint16_t i = 0; i < SPM_PAGESIZE; i++) + page_buffer[i] = FetchNextCommandByte(); + uint32_t PageStartAddress = CurrAddress; if (MemoryType == 'F') @@ -343,6 +356,8 @@ static void ReadWriteMemoryBlock(const uint8_t Command) boot_page_erase(PageStartAddress); boot_spm_busy_wait(); } + + uint16_t i = 0; while (BlockSize--) { @@ -352,14 +367,14 @@ static void ReadWriteMemoryBlock(const uint8_t Command) if (HighByte) { /* Write the next FLASH word to the current FLASH page */ - boot_page_fill(CurrAddress, ((FetchNextCommandByte() << 8) | LowByte)); + boot_page_fill(CurrAddress, ((page_buffer[i] << 8) | LowByte)); /* Increment the address counter after use */ CurrAddress += 2; } else { - LowByte = FetchNextCommandByte(); + LowByte = page_buffer[i]; } HighByte = !HighByte; @@ -367,11 +382,12 @@ static void ReadWriteMemoryBlock(const uint8_t Command) else { /* Write the next EEPROM byte from the endpoint */ - eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), FetchNextCommandByte()); + eeprom_write_byte((uint8_t*)((intptr_t)(CurrAddress >> 1)), page_buffer[i]); /* Increment the address counter after use */ CurrAddress += 2; } + i++; } /* If in FLASH programming mode, commit the page after writing */ @@ -400,6 +416,8 @@ static void ReadWriteMemoryBlock(const uint8_t Command) */ static uint8_t FetchNextCommandByte(void) { + if (com_port == 1) + { /* Select the OUT endpoint so that the next data byte can be read */ Endpoint_SelectEndpoint(CDC_RX_EPNUM); @@ -417,6 +435,15 @@ static uint8_t FetchNextCommandByte(void) /* Fetch the next byte from the OUT endpoint */ return Endpoint_Read_8(); + + } + else if (com_port == 2) + { + while(!(UCSR1A & _BV(RXC1))) ; + return UDR1; + } + else + return 0; } /** Writes the next response byte to the CDC data IN endpoint, and sends the endpoint back if needed to free up the @@ -426,6 +453,8 @@ static uint8_t FetchNextCommandByte(void) */ static void WriteNextResponseByte(const uint8_t Response) { + if (com_port == 1) + { /* Select the IN endpoint so that the next data byte can be written */ Endpoint_SelectEndpoint(CDC_TX_EPNUM); @@ -443,6 +472,14 @@ static void WriteNextResponseByte(const uint8_t Response) /* Write the next byte to the IN endpoint */ Endpoint_Write_8(Response); + } + else if (com_port == 2) + { + while (!(UCSR1A & _BV(UDRE1))); + UDR1 = Response; + } + else + return; TX_LED_ON(); TxLEDPulse = TX_RX_LED_PULSE_PERIOD; @@ -467,13 +504,31 @@ static void WriteNextResponseByte(const uint8_t Response) */ void CDC_Task(void) { - /* Select the OUT endpoint */ - Endpoint_SelectEndpoint(CDC_RX_EPNUM); + if (com_port != 2) + { + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); - /* Check if endpoint has a command in it sent from the host */ - if (!(Endpoint_IsOUTReceived())) - return; - + /* Check if endpoint has a command in it sent from the host */ + if (Endpoint_IsOUTReceived()) + { + if (com_port == 0) + com_port = 1; + } + else if (com_port == 1) + return; + } + if (com_port != 1) + { + if (UCSR1A & _BV(RXC1)) + { + if (com_port == 0) + com_port = 2; + } + else + return; + } + RX_LED_ON(); RxLEDPulse = TX_RX_LED_PULSE_PERIOD; @@ -676,39 +731,41 @@ void CDC_Task(void) WriteNextResponseByte('?'); } + if (com_port == 1) + { + /* Select the IN endpoint */ + Endpoint_SelectEndpoint(CDC_TX_EPNUM); - /* Select the IN endpoint */ - Endpoint_SelectEndpoint(CDC_TX_EPNUM); + /* Remember if the endpoint is completely full before clearing it */ + bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); - /* Remember if the endpoint is completely full before clearing it */ - bool IsEndpointFull = !(Endpoint_IsReadWriteAllowed()); + /* Send the endpoint data to the host */ + Endpoint_ClearIN(); - /* Send the endpoint data to the host */ - Endpoint_ClearIN(); + /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */ + if (IsEndpointFull) + { + while (!(Endpoint_IsINReady())) + { + if (USB_DeviceState == DEVICE_STATE_Unattached) + return; + } - /* If a full endpoint's worth of data was sent, we need to send an empty packet afterwards to signal end of transfer */ - if (IsEndpointFull) - { + Endpoint_ClearIN(); + } + + /* Wait until the data has been sent to the host */ while (!(Endpoint_IsINReady())) { if (USB_DeviceState == DEVICE_STATE_Unattached) return; } - Endpoint_ClearIN(); - } + /* Select the OUT endpoint */ + Endpoint_SelectEndpoint(CDC_RX_EPNUM); - /* Wait until the data has been sent to the host */ - while (!(Endpoint_IsINReady())) - { - if (USB_DeviceState == DEVICE_STATE_Unattached) - return; + /* Acknowledge the command from the host */ + Endpoint_ClearOUT(); } - - /* Select the OUT endpoint */ - Endpoint_SelectEndpoint(CDC_RX_EPNUM); - - /* Acknowledge the command from the host */ - Endpoint_ClearOUT(); } diff --git a/hardware/arduino/avr/bootloaders/caterina/Caterina.hex b/hardware/arduino/avr/bootloaders/caterina/Caterina.hex new file mode 100644 index 00000000000..a60ab6a056d --- /dev/null +++ b/hardware/arduino/avr/bootloaders/caterina/Caterina.hex @@ -0,0 +1,258 @@ +:1070000055C000006EC000006CC000006AC00000E7 +:1070100068C0000066C0000064C0000062C00000DC +:1070200060C000005EC00000FEC400005AC0000046 +:1070300058C0000056C0000054C0000052C00000FC +:1070400050C0000078C000004CC000004AC00000E2 +:1070500048C0000046C0000044C0000042C000001C +:1070600040C000003EC000003CC000003AC000002C +:1070700038C0000036C0000034C0000032C000003C +:1070800030C000002EC000002CC000002AC000004C +:1070900028C0000026C0000024C0000022C000005C +:1070A00020C000001EC000001CC0000011241FBE34 +:1070B000CFEFDAE0DEBFCDBF11E0A0E0B1E0EAE45F +:1070C000FFE702C005900D92A83AB107D9F712E088 +:1070D000A8EAB1E001C01D92AF33B107E1F79BD33D +:1070E00032C78ECFF89410926F00109281001092E8 +:1070F00085001092840081E085BF15BE47985D9A97 +:10710000289A0C94000008952091330230913402A3 +:107110002F5F3F4F3093340220933302932F37FF7A +:1071200003C08EEF831B982F990F921710F4479886 +:107130000895479A08951F920F920FB60F92112447 +:107140002F938F939F93EF93FF931092850010924C +:1071500084008091A8019091A901009741F00197C6 +:107160009093A9018093A801892B09F45D9A8091DD +:10717000AA019091AB01009741F001979093AB0168 +:107180008093AA01892B09F4289AE0E0F0E0859128 +:1071900094918F5F9F4F49F08091AC019091AD0128 +:1071A00001969093AD018093AC01FF91EF919F9177 +:1071B0008F912F910F900FBE0F901F901895809177 +:1071C000AE018130C1F484E08093E9000DC080916C +:1071D000E8008B778093E80003C08EB38823A1F08A +:1071E0008091E80082FFF9CF8091E80085FFEFCF22 +:1071F0008091F1000895823039F48091C80087FFB2 +:10720000FCCF8091CE00089580E00895982F809162 +:10721000AE018130B9F483E08093E9008091E80009 +:1072200085FD0DC08091E8008E778093E80003C053 +:107230008EB38823B1F08091E80080FFF9CF90935E +:10724000F10008C0823069F48091C80085FFFCCF4E +:107250009093CE005D9884E690E09093A90180938E +:10726000A80108956F927F928F929F92AF92BF92E2 +:10727000CF92DF92EF92FF920F931F93CF93DF9302 +:107280009091AE01923081F084E08093E90080918A +:10729000E80082FF06C0992339F481E08093AE01B3 +:1072A00003C0913009F432C29091AE01913049F09F +:1072B0008091C80087FF2AC2992319F482E0809345 +:1072C000AE01289884E690E09093AB018093AA01E8 +:1072D00076DF182F853481F48CE49DE19093AD0125 +:1072E0008093AC0107B600FCFDCFF999FECF81E198 +:1072F00080935700E89503C0843519F460DF8DE072 +:10730000D7C18C34E1F38035D1F3843721F484E4A0 +:107310007DDF80E0CDC1813611F489E5C9C18134BA +:10732000F1F44DDF182F4BDF90E0880F991FAA274B +:1073300097FDA095BA2F312F330F20E0442737FD5A +:107340004095542F822B932BA42BB52B8093AF0108 +:107350009093B001A093B101B093B201D0CF803728 +:1073600011F483E5A5C1833549F4C0E0D1E08991EA +:107370004DDF21E0C730D207D1F79BC1863521F41C +:1073800081E344DF80E394C1833731F487E83EDF53 +:1073900085E93CDF8EE18CC18536B9F4E0E0F0E0B0 +:1073A00093E085E090935700E89507B600FCFDCF89 +:1073B00080935700E89507B600FCFDCFE058FF4FDB +:1073C000A0E7E030FA0771F79ACF823739F4E1E0AD +:1073D000F0E089E08093570084916AC1863439F4E3 +:1073E000E0E0F0E089E080935700849161C18E3441 +:1073F00039F4E3E0F0E089E080935700849158C1CC +:10740000813539F4E2E0F0E089E08093570084911F +:107410004FC1823631F489E5F9DE80E0F7DE80E89D +:1074200047C1823419F0873609F0F0C01092AD01DF +:107430001092AC01C4DE082FC2DEF82EC0DE782E1A +:107440008554823008F033C1902F80E0CF2CDD24AA +:10745000C82AD92A10926F00173609F04EC081E170 +:1074600080935700E895BB24AA24A39441C0E090E0 +:10747000AF01F090B0010091B1011091B201B6E4FA +:107480007B16D9F4EB2DF0E0EE29FF29E4918E2F45 +:10749000BDDEBB2081F082E090E0A0E0B0E0E80E2D +:1074A000F91E0A1F1B1FE092AF01F092B00100937A +:1074B000B1011093B201BA2418C0D801C701B69522 +:1074C000A7959795879529D5A1DE82E090E0A0E069 +:1074D000B0E0E80EF91E0A1F1B1FE092AF01F09208 +:1074E000B0010093B1011093B2010894C108D10812 +:1074F000C114D10409F0BBCF85C003EB11E0E80152 +:107500005EDE899392E0C333D907D1F78090AF0153 +:107510009090B001A090B101B090B201A6E47A16AB +:1075200009F05BC083E0F40180935700E89507B64B +:1075300000FCFDCF52C0F6E47F1639F5D8014C911E +:10754000FF2001F18091AF019091B001A091B101B4 +:10755000B091B2012E2D30E0D42FC0E02C2B3D2B6A +:10756000FC01090160925700E89511240296A11DC3 +:10757000B11D8093AF019093B001A093B101B0937E +:10758000B20101C0E42EF62422C08091AF01909197 +:10759000B001A091B101B091B201B695A7959795B0 +:1075A0008795D8016C91C1D48091AF019091B001C1 +:1075B000A091B101B091B2010296A11DB11D8093BD +:1075C000AF019093B001A093B101B093B2010894C0 +:1075D000C108D1080F5F1F4F04C0EE24FF246624AA +:1075E0006394C114D10409F0A6CFB6E47B1641F42C +:1075F00085E0F40180935700E89507B600FCFDCFC5 +:107600008DE004DE82E080936F0053C0833471F418 +:107610000091AF011091B001D2DD90E021E0F801BE +:107620000C0120935700E895112469CE833619F593 +:10763000E090AF01F090B0010091B1011091B20162 +:10764000BEDDF701E16090E021E00C0120935700DE +:10765000E895112482E090E0A0E0B0E0E80EF91E89 +:107660000A1F1B1FE092AF01F092B0010093B1011D +:107670001093B20144CE8D3661F4E091AF01F091E8 +:10768000B00185E080935700E89507B600FCFDCF78 +:1076900036CE823551F4E091AF01F091B001059101 +:1076A0001491812FB3DD802F03C08B3111F08FE354 +:1076B000ADDD8091AE01813049F583E08093E90032 +:1076C0009091E8008091E8008E778093E80095FF24 +:1076D00004C010C08EB38823C9F08091E80080FFF9 +:1076E000F9CF8091E8008E778093E80003C08EB3D5 +:1076F000882361F08091E80080FFF9CF84E08093D7 +:10770000E9008091E8008B778093E800DF91CF91CA +:107710001F910F91FF90EF90DF90CF90BF90AF90AF +:107720009F908F907F906F90089590913702892F4E +:107730008F77813249F5809138028032A1F0813211 +:1077400019F5913A09F58091E800877F8093E80068 +:107750008DE091E067E070E017D28091E8008B77D0 +:107760008093E8000895913279F48091E800877F52 +:107770008093E8008DE091E067E070E069D280914D +:10778000E8008E778093E800089582E061EC42E0A3 +:10779000C1D083E061E842E1BDD084E060E842E12D +:1077A000B9C084B7877F84BF38E10FB6F8943093AF +:1077B0006000109260000FBE20E880E090E00FB6FD +:1077C000F89420936100809361000FBE81E085BF33 +:1077D00092E095BF3F9A209A559AE1E6F0E0208327 +:1077E000108247985D9A289A109289008AEF8093B8 +:1077F000880090936F0083E08093810080E1809304 +:10780000CC001092CD001092C80086E08093CA0090 +:107810003093C900F0C040910008509101081092C7 +:1078200001081092000894B714BE88E10FB6F894CE +:1078300080936000109260000FBE292F30E0F901A4 +:10784000E270F07091FD18C090FF05C08591949191 +:107850008F5F9F4F81F423FF0FC0809109019091AA +:107860000A014817590741F0E0E0F0E08591949152 +:107870008F5F9F4F09F036DC94DF78941092AD0152 +:107880001092AC010CC0EEDC36D38091AC0190912B +:10789000AD0181549F4110F01092140135DC8091AC +:1078A0001401882381F78091E00081608093E000DB +:1078B00019DC80E090E00895FA01923049F09330AD +:1078C00061F09130F9F485E191E022E130E01EC0F1 +:1078D00087E291E02EE330E019C0882329F485E6A1 +:1078E00091E024E030E012C0813029F489E691E093 +:1078F00022E230E00BC0823029F48DE891E028E1EB +:1079000030E004C080E090E020E030E091838083AC +:10791000C90108958093E9008091EB008160809314 +:10792000EB001092ED006093EC004093ED0080912D +:10793000EE00881F8827881F0895809137028823CA +:107940008CF403C08EB38823B1F08091E80082FFED +:10795000F9CF8091E8008B778093E80008958EB38B +:10796000882349F08091E80080FFF9CF8091E800FA +:107970008E778093E8000895EF92FF920F931F9304 +:1079800045D04CD008ED10E0F80180818F778083DE +:1079900080818068808380818F7D808319BC1EBA3E +:1079A0001092350280EEE82EF12CF70180818B7F5A +:1079B0008083F80180818160808380E060E042E024 +:1079C000A9DFE1EEF0E080818E7F8083E2EEF0E0DF +:1079D000808181608083808188608083F7018081DD +:1079E0008E7F8083F8018081806180831F910F9159 +:1079F000FF90EF900895E7EDF0E080818160808353 +:107A00008AE482BF81E080933602B6CFE8EDF0E0F1 +:107A100080818E7F80831092E20008951092DA00B8 +:107A20001092E10008951F920F920FB60F92112449 +:107A30002F933F934F935F936F937F938F939F9376 +:107A4000AF93BF93EF93FF938091DA0080FF1BC049 +:107A50008091D80080FF17C08091DA008E7F8093DC +:107A6000DA008091D90080FF0BC080E189BD82E1FE +:107A700089BD09B400FEFDCF81E08EBB3BD203C0BF +:107A800019BC1EBA37D28091E10080FF17C08091E7 +:107A9000E20080FF13C08091E2008E7F8093E200BD +:107AA0008091E20080618093E2008091D800806242 +:107AB0008093D80019BC85E08EBB1CD28091E10078 +:107AC00084FF2CC08091E20084FF28C080E189BD42 +:107AD00082E189BD09B400FEFDCF8091D8008F7D81 +:107AE0008093D8008091E1008F7E8093E1008091A7 +:107AF000E2008F7E8093E2008091E20081608093BB +:107B0000E20080913502882331F48091E30087FD03 +:107B100002C081E001C084E08EBBECD18091E10025 +:107B200083FF21C08091E20083FF1DC08091E100AE +:107B3000877F8093E10082E08EBB109235028091B6 +:107B4000E1008E7F8093E1008091E2008E7F809340 +:107B5000E2008091E20080618093E20080E060E0DA +:107B600042E0D8DEC7D1FF91EF91BF91AF919F91D5 +:107B70008F917F916F915F914F913F912F910F90D6 +:107B80000FBE0F901F9018959C0140913D0250919F +:107B90003E024617570718F4F90190E044C06115FA +:107BA000710511F0AB01F8CF8091E8008E778093DA +:107BB000E80040E050E0F0CF8EB3882309F444C0E1 +:107BC000853009F443C08091E80083FF02C081E062 +:107BD00008958091E80082FD31C08091E80080FF27 +:107BE00022C08091F3009091F200782F60E0292F5D +:107BF00030E0262B372B07C081918093F100415054 +:107C000050402F5F3F4F4115510519F02830310585 +:107C100098F390E02830310509F491E08091E80074 +:107C20008E778093E8004115510531F6992321F6AE +:107C300005C08EB3882341F0853041F08091E80083 +:107C400082FFF7CF80E0089582E0089583E00895F1 +:107C50009C016115710529F48091E8008B77809370 +:107C6000E800F90126C08EB3882391F1853091F1A7 +:107C70008091E80083FF02C081E008958091E800D0 +:107C800082FFF1CF06C08091F10081936150704076 +:107C900059F02091F3008091F200322F20E090E023 +:107CA000822B932B892B79F78091E8008B77809337 +:107CB000E80061157105B9F605C08EB3882341F05F +:107CC000853041F08091E80080FFF7CF80E0089593 +:107CD00082E0089583E008950F931F93DF93CF937D +:107CE00000D0CDB7DEB7E7E3F2E08091F1008193F9 +:107CF00082E0EF33F807C9F718DD8091E80083FFD1 +:107D0000E4C08091370290913802953009F46DC03B +:107D1000963040F4913081F1913070F0933009F059 +:107D2000D4C02AC0983009F4A3C0993009F4B2C075 +:107D3000963009F0CAC07CC0803809F4C6C08238C9 +:107D400009F0C3C080913B0287708093E900809165 +:107D5000EB001092E9002091E800277F2093E800D3 +:107D600090E025E0969587952A95E1F781708093BC +:107D7000F1001092F10087C0882319F0823009F0D9 +:107D8000A4C08F71823009F0A0C08091390288238D +:107D900031F520913B02277009F497C02093E90048 +:107DA0008091EB0080FF1BC0933021F48091EB00A9 +:107DB000806213C08091EB0080618093EB0081E0D2 +:107DC00090E002C0880F991F2A95E2F78093EA009D +:107DD0001092EA008091EB0088608093EB00109293 +:107DE000E9008091E800877F51C0882309F06DC0C9 +:107DF000109139021F770FB7F8948091E800877FC0 +:107E00008093E8009ADD8091E80080FFFCCF8091AC +:107E1000E3008078812B8093E30080688093E30007 +:107E2000112311F482E001C083E08EBB0FBF4DC06F +:107E30008058823008F049C08091390290913A020E +:107E400060913B02AE014F5F5F4F36DDBC01009792 +:107E500009F43BC08091E800877F8093E800898126 +:107E60009A8192DE8091E8008B778093E8002DC0A4 +:107E7000803859F58091E800877F8093E8008091F1 +:107E800035028093F1008091E8008E778093E800BE +:107E900054DD1BC08823C9F4909139029230A8F4B4 +:107EA0008091E800877F8093E8009093350245DD5C +:107EB00080913502882331F48091E30087FD02C070 +:107EC00081E001C084E08EBB60DC8091E80083FF2C +:107ED0000AC08091EB0080628093EB008091E80003 +:107EE000877F8093E8000F900F90CF91DF911F91D3 +:107EF0000F91089508951F938EB3882361F0109118 +:107F0000E9001092E9008091E80083FF01C0E4DEFF +:107F100017701093E9001F910895F999FECF92BD53 +:107F200081BDF89A992780B50895262FF999FECF3B +:107F30001FBA92BD81BD20BD0FB6F894FA9AF99A86 +:0A7F40000FBE01960895F894FFCFDC +:107F4A004341544552494E410077770008000000EA +:107F5A000000000801120110010200000841233646 +:107F6A000001000201000109023E00020100803204 +:107F7A000904000001020201000524001001042482 +:107F8A0002040524060001070582030800FF09040C +:107F9A000100020A0000000705040210000107059B +:107FAA0083021000010403090422034100720064E1 +:107FBA0000750069006E006F0020004C0065006FBC +:107FCA00006E006100720064006F00000018034137 +:107FDA000072006400750069006E006F0020004C9A +:087FEA00004C00430000000000 +:040000030000700089 +:00000001FF diff --git a/hardware/arduino/avr/bootloaders/caterina/Makefile b/hardware/arduino/avr/bootloaders/caterina/Makefile index b3bd9e8d3fe..f5fc0aa7222 100644 --- a/hardware/arduino/avr/bootloaders/caterina/Makefile +++ b/hardware/arduino/avr/bootloaders/caterina/Makefile @@ -49,12 +49,12 @@ # USB vendor ID (VID) # reuse of this VID by others is forbidden by USB-IF # official Arduino LLC VID -# VID = 0x2341 +VID = 0x2341 # USB product ID (PID) # official Leonardo PID -# PID = 0x0036 +PID = 0x0036 # official Micro PID # PID = 0x0037 # official Esplora PID @@ -127,7 +127,7 @@ OBJDIR = . # Path to the LUFA library -LUFA_PATH = ../../../../../../LUFA/LUFA-111009 +LUFA_PATH = ../LUFA-111009 # LUFA library compile-time options and predefined tokens @@ -144,7 +144,7 @@ LUFA_OPTS += -D NO_DEVICE_REMOTE_WAKEUP LUFA_OPTS += -D NO_SOF_EVENTS #LUFA_OPTS += -D NO_BLOCK_SUPPORT -#LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT +LUFA_OPTS += -D NO_EEPROM_BYTE_SUPPORT #LUFA_OPTS += -D NO_FLASH_BYTE_SUPPORT LUFA_OPTS += -D NO_LOCK_BYTE_WRITE_SUPPORT @@ -209,7 +209,7 @@ CDEFS += -DBOOT_START_ADDR=$(BOOT_START)UL CDEFS += -DDEVICE_VID=$(VID)UL CDEFS += -DDEVICE_PID=$(PID)UL CDEFS += $(LUFA_OPTS) - +CDEFS += -DBAUD_RATE=57600UL # Place -D or -U options here for ASM sources ADEFS = -DF_CPU=$(F_CPU)