Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Provide options to build urboot autobaud firmware for other serial port #14

Closed
mcuee opened this issue Dec 22, 2022 · 12 comments
Closed
Labels
enhancement New feature or request

Comments

@mcuee
Copy link

mcuee commented Dec 22, 2022

It would be great to provide urboot hex files for non-default serial port. I think this is one of the major missing feature from urboot.

As per the previous discussions in avrdude, it may not be so easy to do this automatically though.

Maybe @MCUdude has some ideas since he has done this in optiboot_flash.

@mcuee
Copy link
Author

mcuee commented Dec 22, 2022

Features like automatically detect which serial port to use may be even more troublesome and may not be worth the efforts.

@stefanrueger
Copy link
Owner

It's certainly possible to compile bootloaders for USART1, USART2, ... for fixed baud rates: When you compile an urboot bootloader you can set which USART you want the comms to be on: Just specify UARTNUM=x when using make or -DUARTNUM=x when compiling... (x=0, 1, 2, ...).

However, for autobaud urboot.c needs to know the RX line of the chosen USART to measure the baud rate before initialising the USART. The table here here needs filling in. The atdf files are not great for this. Maybe someone can help?

(As for the Optiboot Issue #285 I don't know of a valid use case, and cannot imagine one, for the bootloader "automatically" scanning where communications come from. In my world, bootloaders should utilise as few I/O lines as possible and these should be known and fixed; otherwise if the bootloader starts twiggling all sorts of I/O lines at each reset, the projects implemented on the board might do strange things while the I/O lines are scanned: just imagine one of the I/O lines opens the gate of the attached alligator compound... this does not bear thinking about :)

@mcuee
Copy link
Author

mcuee commented Dec 22, 2022

The table is copied here fore reference.

I actually don't even have a table for now many USARTS any one part has (beyond 0 or > 0).

Here is an example of what would be good:

Part NUART RXD0 TXD0 RXD1 TXD1 RXD2 TXD2 RXD3 TXD3
attiny167 0
atmega328p 1 PD0 PD1
atmega328pb 2 PD0 PD1 PB4 PB3
atmega2560 4 PE0 PE1 PD2 PD3 PH0 PH1 PJ0 PJ1

Here is what I have in machine-readable format (you can tell my xml-fu with atdfs is waning). And there are likely some mistakes in that table, too :(

Incomplete RX/TX table for UART parts
Part NUART RXD0 TXD0 RXD1 TXD1 RXD2 TXD2 RXD3 TXD3
ATtiny4 0
ATtiny5 0
ATtiny9 0
ATtiny10 0
ATtiny20 0
ATtiny40 0
ATtiny102 >0 PB3 PB2
ATtiny104 >0 PB3 PB2
ATtiny11 0
ATtiny12 0
ATtiny13 0
ATtiny13A 0
ATtiny15 0
ATtiny22 ??
ATtiny24 0
ATtiny24A 0
ATtiny25 0
ATtiny26 0
ATtiny28 0
ATtiny43U 0
ATtiny44 0
ATtiny44A 0
ATtiny45 0
ATtiny48 0
ATtiny84 0
ATtiny84A 0
ATtiny85 0
ATtiny87 0
ATtiny88 0
ATtiny167 0
ATtiny261 0
ATtiny261A 0
ATtiny441 >0 PA4 PA5
ATtiny461 0
ATtiny461A 0
ATtiny828 >0 PC2 PC3
ATtiny828R ??
ATtiny841 >0 PA4 PA5
ATtiny861 0
ATtiny861A 0
ATtiny1634 >0 PA7 PB0
ATtiny1634R ??
ATtiny2313 >0 PD0 PD1
ATtiny2313A >0 PD0 PD1
ATtiny4313 >0 PD0 PD1
ATmega8 >0 PD0 PD1
ATmega8A >0 PD0 PD1
ATmega8HVA 0
ATmega8U2 >0 PD2 PD3
ATmega16 >0 PD0 PD1
ATmega16A >0 PD0 PD1
ATmega16HVA 0
ATmega16HVB 0
ATmega16HVBrevB 0
ATmega16M1 0
ATmega16HVA2 0
ATmega16U2 >0 PD2 PD3
ATmega16U4 >0 PD2 PD3
ATmega32 >0 PD0 PD1
ATmega32A >0 PD0 PD1
ATmega32HVB 0
ATmega32HVBrevB 0
ATmega32C1 0
ATmega32M1 0
ATmega32U2 >0 PD2 PD3
ATmega32U4 >0 PD2 PD3
ATmega32U6 ??
ATmega48 >0 PD0 PD1
ATmega48A >0 PD0 PD1
ATmega48P >0 PD0 PD1
ATmega48PA >0 PD0 PD1
ATmega48PB >0 PD0 PD1
ATmega64 >0 PE0 PE1
ATmega64A >0 PE0 PE1
ATmega64HVE 0
ATmega64C1 0
ATmega64M1 0
ATmega64HVE2 0
ATmega64RFR2 >0 PE0 PE1
ATmega88 >0 PD0 PD1
ATmega88A >0 PD0 PD1
ATmega88P >0 PD0 PD1
ATmega88PA >0 PD0 PD1
ATmega88PB >0 PD0 PD1
ATmega103 ??
ATmega128 >0 PE0 PE1
ATmega128A >0 PE0 PE1
ATmega128RFA1 >0 PE0 PE1
ATmega128RFR2 >0 PE0 PE1
ATmega161 >0 PD0 PD1
ATmega162 >0 PD0 PD1
ATmega163 >0 PD0 PD1
ATmega164A >0 PD0 PD1
ATmega164P >0 PD0 PD1
ATmega164PA >0 PD0 PD1
ATmega165 >0 PE0 PE1
ATmega165A >0 PE0 PE1
ATmega165P >0 PE0 PE1
ATmega165PA >0 PE0 PE1
ATmega168 >0 PD0 PD1
ATmega168A >0 PD0 PD1
ATmega168P >0 PD0 PD1
ATmega168PA >0 PD0 PD1
ATmega168PB >0 PD0 PD1
ATmega169 >0 PE0 PE1
ATmega169A >0 PE0 PE1
ATmega169P >0 PE0 PE1
ATmega169PA >0 PE0 PE1
ATmega256RFR2 >0 PE0 PE1
ATmega323 >0 PD0 PD1
ATmega324A >0 PD0 PD1
ATmega324P >0 PD0 PD1
ATmega324PA >0 PD0 PD1
ATmega324PB >0 PD0 PD1
ATmega325 >0 PE0 PE1
ATmega325A >0 PE0 PE1
ATmega325P >0 PE0 PE1
ATmega325PA >0 PE0 PE1
ATmega328 >0 PD0 PD1
ATmega328P >0 PD0 PD1
ATmega328PB >0 PD0 PD1
ATmega329 >0 PE0 PE1
ATmega329A >0 PE0 PE1
ATmega329P >0 PE0 PE1
ATmega329PA >0 PE0 PE1
ATmega406 0
ATmega640 >0 PE0 PE1
ATmega644 >0 PD0 PD1
ATmega644A >0 PD0 PD1
ATmega644P >0 PD0 PD1
ATmega644PA >0 PD0 PD1
ATmega644RFR2 >0 PE0 PE1
ATmega645 >0 PE0 PE1
ATmega645A >0 PE0 PE1
ATmega645P >0 PE0 PE1
ATmega649 >0 PE0 PE1
ATmega649A >0 PE0 PE1
ATmega649P >0 PE0 PE1
ATmega1280 >0 PE0 PE1
ATmega1281 >0 PE0 PE1
ATmega1284 >0 PD0 PD1
ATmega1284P >0 PD0 PD1
ATmega1284RFR2 >0 PE0 PE1
ATmega2560 >0 PE0 PE1
ATmega2561 >0 PE0 PE1
ATmega2564RFR2 >0 PE0 PE1
ATmega3250 >0 PE0 PE1
ATmega3250A >0 PE0 PE1
ATmega3250P >0 PE0 PE1
ATmega3250PA >0 PE0 PE1
ATmega3290 >0 PE0 PE1
ATmega3290A >0 PE0 PE1
ATmega3290P >0 PE0 PE1
ATmega3290PA >0 PE0 PE1
ATmega6450 >0 PE0 PE1
ATmega6450A >0 PE0 PE1
ATmega6450P >0 PE0 PE1
ATmega6490 >0 PE0 PE1
ATmega6490A >0 PE0 PE1
ATmega6490P >0 PE0 PE1
ATmega8515 >0 PD0 PD1
ATmega8535 >0 PD0 PD1
AT43USB320 ??
AT43USB355 ??
AT76C711 ??
AT86RF401 ??
AT90PWM1 0
AT90PWM2 ??
AT90PWM2B ??
AT90PWM3 ??
AT90PWM3B ??
AT90CAN32 >0 PD2 PD3
AT90CAN64 >0 PD2 PD3
AT90PWM81 0
AT90USB82 ??
AT90SCR100 ??
AT90CAN128 >0 PD2 PD3
AT90PWM161 0
AT90USB162 ??
AT90PWM216 ??
AT90PWM316 ??
AT90USB646 ??
AT90USB647 ??
AT90S1200 ??
AT90USB1286 ??
AT90USB1287 ??
AT90S2313 ??
AT90S2323 ??
AT90S2333 ??
AT90S2343 ??
AT90S4414 ??
AT90S4433 ??
AT90S4434 ??
AT90S8515 ??
AT90C8534 ??
AT90S8535 ??
AT94K ??
ATA5272 0
ATA5505 0
ATA5700M322 0
ATA5702M322 0
ATA5781 0
ATA5782 0
ATA5783 0
ATA5787 ??
ATA5790 0
ATA5790N 0
ATA5791 0
ATA5795 0
ATA5831 0
ATA5832 0
ATA5833 0
ATA5835 ??
ATA6285 0
ATA6286 0
ATA6289 0
ATA6612C ??
ATA6613C ??
ATA6614Q ??
ATA6616C 0
ATA6617C 0
ATA8210 0
ATA8215 0
ATA8510 0
ATA8515 0
ATA664251 0
M3000 ??
LGT8F88P ??
LGT8F168P ??
LGT8F328P ??
ATxmega8E5 >0 PC2 PC3
ATxmega16A4 ??
ATxmega16A4U >0 PC2 PC3
ATxmega16C4 >0 PC2 PC3
ATxmega16D4 >0 PC2 PC3
ATxmega16E5 >0 PC2 PC3
ATxmega32C3 >0 PC2 PC3
ATxmega32D3 >0 PC2 PC3
ATxmega32A4 ??
ATxmega32A4U >0 PC2 PC3
ATxmega32C4 >0 PC2 PC3
ATxmega32D4 >0 PC2 PC3
ATxmega32E5 >0 PC2 PC3
ATxmega64A1 ??
ATxmega64A1U >0 PC2 PC3
ATxmega64B1 >0 PC2 PC3
ATxmega64A3 ??
ATxmega64A3U >0 PC2 PC3
ATxmega64B3 >0 PC2 PC3
ATxmega64C3 >0 PC2 PC3
ATxmega64D3 >0 PC2 PC3
ATxmega64A4 ??
ATxmega64A4U >0 PC2 PC3
ATxmega64D4 >0 PC2 PC3
ATxmega128A1 ??
ATxmega128A1revD ??
ATxmega128A1U >0 PC2 PC3
ATxmega128B1 >0 PC2 PC3
ATxmega128A3 ??
ATxmega128A3U >0 PC2 PC3
ATxmega128B3 >0 PC2 PC3
ATxmega128C3 >0 PC2 PC3
ATxmega128D3 >0 PC2 PC3
ATxmega128A4 ??
ATxmega128A4U >0 PC2 PC3
ATxmega128D4 >0 PC2 PC3
ATxmega192A1 ??
ATxmega192A3 ??
ATxmega192A3U >0 PC2 PC3
ATxmega192C3 ??
ATxmega192D3 >0 PC2 PC3
ATxmega256A1 ??
ATxmega256A3 ??
ATxmega256A3B ??
ATxmega256A3BU >0 PC2 PC3
ATxmega256A3U >0 PC2 PC3
ATxmega256C3 >0 PC2 PC3
ATxmega256D3 >0 PC2 PC3
ATxmega384C3 >0 PC2 PC3
ATxmega384D3 >0 PC2 PC3
ATtiny202 >0 PA7 PA6
ATtiny204 >0 PB3 PB2
ATtiny212 >0 PA7 PA6
ATtiny214 >0 PB3 PB2
ATtiny402 >0 PA7 PA6
ATtiny404 >0 PB3 PB2
ATtiny406 >0 PB3 PB2
ATtiny412 >0 PA7 PA6
ATtiny414 >0 PB3 PB2
ATtiny416 >0 PB3 PB2
ATtiny416auto >0 PB3 PB2
ATtiny417 >0 PB3 PB2
ATtiny424 >0 PB3 PB2
ATtiny426 >0 PB3 PB2
ATtiny427 >0 PB3 PB2
ATtiny804 >0 PB3 PB2
ATtiny806 >0 PB3 PB2
ATtiny807 >0 PB3 PB2
ATtiny814 >0 PB3 PB2
ATtiny816 >0 PB3 PB2
ATtiny817 >0 PB3 PB2
ATtiny824 >0 PB3 PB2
ATtiny826 >0 PB3 PB2
ATtiny827 >0 PB3 PB2
ATtiny1604 >0 PB3 PB2
ATtiny1606 >0 PB3 PB2
ATtiny1607 >0 PB3 PB2
ATtiny1614 >0 PB3 PB2
ATtiny1616 >0 PB3 PB2
ATtiny1617 >0 PB3 PB2
ATtiny1624 >0 PB3 PB2
ATtiny1626 >0 PB3 PB2
ATtiny1627 >0 PB3 PB2
ATtiny3214 ??
ATtiny3216 >0 PB3 PB2
ATtiny3217 >0 PB3 PB2
ATtiny3224 >0 PB3 PB2
ATtiny3226 >0 PB3 PB2
ATtiny3227 >0 PB3 PB2
ATmega808 >0 PA1 PA0
ATmega809 >0 PA1 PA0
ATmega1608 >0 PA1 PA0
ATmega1609 >0 PA1 PA0
ATmega3208 >0 PA1 PA0
ATmega3209 >0 PA1 PA0
ATmega4808 >0 PA1 PA0
ATmega4809 >0 PA1 PA0
AVR8EA28 ??
AVR8EA32 ??
AVR16DD14 >0 PA1 PA0
AVR16DD20 >0 PA1 PA0
AVR16DD28 >0 PA1 PA0
AVR16EA28 ??
AVR16DD32 >0 PA1 PA0
AVR16EA32 ??
AVR16EA48 ??
AVR32DD14 >0 PA1 PA0
AVR32DD20 >0 PA1 PA0
AVR32DA28 >0 PA1 PA0
AVR32DB28 >0 PA1 PA0
AVR32DD28 >0 PA1 PA0
AVR32EA28 ??
AVR32DA32 >0 PA1 PA0
AVR32DB32 >0 PA1 PA0
AVR32DD32 >0 PA1 PA0
AVR32EA32 ??
AVR32DA48 >0 PA1 PA0
AVR32DB48 >0 PA1 PA0
AVR32EA48 ??
AVR64DD14 >0 PA1 PA0
AVR64DD20 >0 PA1 PA0
AVR64DA28 >0 PA1 PA0
AVR64DB28 >0 PA1 PA0
AVR64DD28 >0 PA1 PA0
AVR64EA28 >0 PA1 PA0
AVR64DA32 >0 PA1 PA0
AVR64DB32 >0 PA1 PA0
AVR64DD32 >0 PA1 PA0
AVR64EA32 >0 PA1 PA0
AVR64DA48 >0 PA1 PA0
AVR64DB48 >0 PA1 PA0
AVR64EA48 >0 PA1 PA0
AVR64DA64 >0 PA1 PA0
AVR64DB64 >0 PA1 PA0
AVR128DA28 >0 PA1 PA0
AVR128DB28 >0 PA1 PA0
AVR128DA32 >0 PA1 PA0
AVR128DB32 >0 PA1 PA0
AVR128DA48 >0 PA1 PA0
AVR128DB48 >0 PA1 PA0
AVR128DA64 >0 PA1 PA0
AVR128DB64 >0 PA1 PA0

@mcuee mcuee changed the title Provide options to build urboot for other serial port Provide options to build urboot autobaud firmware for other serial port Dec 22, 2022
@stefanrueger
Copy link
Owner

stefanrueger commented Mar 1, 2023

I have now managed to collect the RX/TX lines for all UARTs of almost all 8-bit AVR. This has allowed me to create pre-compiled bootloaders for all serial ports of all classic parts. The autobaud feature needs to know on which RX line the host sends data in order to sample it and compute the correct baud rate register UBRRn. This includes the LIN/UARTs of ATtiny167/87 and a dozen or so other parts; that interface is designed for an automotive Local Interconnect Network and can be used as ordinary UART.

Here the table of RX/TX lines for all UARTs of parts in the bash script that creates pre-compiled bootloaders:

urboot/src/mkurboots

Lines 547 to 918 in 74ecad6

mcuio[attiny4]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny5]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny9]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny10]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny20]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny40]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny102]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2"
mcuio[attiny104]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2"
mcuio[attiny11]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny12]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny13]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny13a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny15]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny22]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny24]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny24a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny25]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny26]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny28]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny43u]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny44]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny44a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny45]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny48]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny84]="SWIO=1 RX=AtmelPA3 TX=AtmelPA2"
mcuio[attiny84a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny85]="SWIO=1 RX=AtmelPB4 TX=AtmelPB3"
mcuio[attiny87]="UARTNUM=0 RX=AtmelPA0 TX=AtmelPA1"
mcuio[attiny88]="SWIO=1 RX=AtmelPD7 TX=AtmelPD6"
mcuio[attiny167]="UARTNUM=0 RX=AtmelPA0 TX=AtmelPA1"
mcuio[attiny261]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny261a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny441]="UARTNUM=0 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=0 UARTALT=1 RX=AtmelPB2 TX=AtmelPA7|UARTNUM=1 RX=AtmelPA4 TX=AtmelPA5"
mcuio[attiny461]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny461a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny828]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3"
mcuio[attiny828r]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3"
mcuio[attiny841]="UARTNUM=0 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=0 UARTALT=1 RX=AtmelPB2 TX=AtmelPA7|UARTNUM=1 RX=AtmelPA4 TX=AtmelPA5"
mcuio[attiny861]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny861a]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny1634]="UARTNUM=0 RX=AtmelPA7 TX=AtmelPB0|UARTNUM=1 RX=AtmelPB1 TX=AtmelPB2"
mcuio[attiny1634r]="UARTNUM=0 RX=AtmelPA7 TX=AtmelPB0|UARTNUM=1 RX=AtmelPB1 TX=AtmelPB2"
mcuio[attiny2313]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[attiny2313a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[attiny4313]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega8]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega8a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega8hva]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega8u2]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega16]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega16a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega16hva]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega16hvb]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega16hvbrevb]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega16m1]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[atmega16hva2]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega16u2]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega16u4]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega32]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega32a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega32hvb]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega32hvbrevb]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega32c1]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[atmega32m1]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[atmega32u2]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega32u4]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega32u6]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega48]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega48a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega48p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega48pa]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega48pb]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega64]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega64a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega64hve]="UARTNUM=0 RX=AtmelPB1 TX=AtmelPB3"
mcuio[atmega64c1]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[atmega64m1]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[atmega64hve2]="UARTNUM=0 RX=AtmelPB1 TX=AtmelPB3"
mcuio[atmega64rfr2]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega88]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega88a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega88p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega88pa]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega88pb]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega103]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega128]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega128a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega128rfa1]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega128rfr2]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega161]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPB2 TX=AtmelPB3"
mcuio[atmega162]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPB2 TX=AtmelPB3"
mcuio[atmega163]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega164a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega164p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega164pa]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega165]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega165a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega165p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega165pa]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega168]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega168a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega168p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega168pa]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega168pb]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega169]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega169a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega169p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega169pa]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega256rfr2]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega323]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega324a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega324p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega324pa]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega324pb]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atmega325]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega325a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega325p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega325pa]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega328]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega328p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega328pb]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPB4 TX=AtmelPB3"
mcuio[atmega329]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega329a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega329p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega329pa]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega406]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atmega640]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPH0 TX=AtmelPH1|UARTNUM=3 RX=AtmelPJ0 TX=AtmelPJ1"
mcuio[atmega644]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega644a]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega644p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega644pa]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega644rfr2]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega645]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega645a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega645p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega649]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega649a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega649p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega1280]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPH0 TX=AtmelPH1|UARTNUM=3 RX=AtmelPJ0 TX=AtmelPJ1"
mcuio[atmega1281]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega1284]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega1284p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega1284rfr2]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega2560]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPH0 TX=AtmelPH1|UARTNUM=3 RX=AtmelPJ0 TX=AtmelPJ1"
mcuio[atmega2561]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega2564rfr2]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atmega3250]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3250a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3250p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3250pa]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3290]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3290a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3290p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega3290pa]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega6450]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega6450a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega6450p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega6490]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega6490a]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega6490p]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1"
mcuio[atmega8515]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atmega8535]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at43usb320]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at43usb355]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at76c711]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at86rf401]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90pwm1]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90pwm2]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[at90pwm2b]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[at90pwm3]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[at90pwm3b]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[at90can32]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90can64]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90pwm81]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90usb82]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90scr100]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90can128]="UARTNUM=0 RX=AtmelPE0 TX=AtmelPE1|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90pwm161]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90usb162]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90pwm216]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[at90pwm316]="UARTNUM=0 RX=AtmelPD4 TX=AtmelPD3"
mcuio[at90usb646]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90usb647]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90s1200]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90usb1286]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90usb1287]="UARTNUM=0 RX=AtmelPD2 TX=AtmelPD3"
mcuio[at90s2313]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90s2323]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90s2333]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90s2343]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90s4414]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90s4433]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90s4434]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90s8515]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at90c8534]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[at90s8535]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[at94k]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5272]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5505]="UARTNUM=0 RX=AtmelPA0 TX=AtmelPA1"
mcuio[ata5700m322]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5702m322]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5781]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5782]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5783]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5787]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5790]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5790n]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5791]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5795]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5831]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5832]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5833]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata5835]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata6285]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata6286]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata6289]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata6612c]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[ata6613c]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[ata6614q]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[ata6616c]="UARTNUM=0 RX=AtmelPA0 TX=AtmelPA1"
mcuio[ata6617c]="UARTNUM=0 RX=AtmelPA0 TX=AtmelPA1"
mcuio[ata8210]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata8215]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata8510]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata8515]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[ata664251]="UARTNUM=0 RX=AtmelPA0 TX=AtmelPA1"
mcuio[m3000]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[lgt8f88p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[lgt8f168p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[lgt8f328p]="UARTNUM=0 RX=AtmelPD0 TX=AtmelPD1"
mcuio[atxmega8e5]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=1 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7"
mcuio[atxmega16a4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega16a4u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega16c4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atxmega16d4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atxmega16e5]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=1 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7"
mcuio[atxmega32c3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega32d3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega32a4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega32a4u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega32c4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atxmega32d4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atxmega32e5]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=1 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7"
mcuio[atxmega64a1]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=7 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega64a1u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=7 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega64b1]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=1 UARTALT=1 RX=AtmelPE6 TX=AtmelPE7"
mcuio[atxmega64a3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3"
mcuio[atxmega64a3u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=4 UARTALT=1 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=6 UARTALT=1 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega64b3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7"
mcuio[atxmega64c3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega64d3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega64a4]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atxmega64a4u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega64d4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atxmega128a1]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=7 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega128a1revd]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=7 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega128a1u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=7 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega128b1]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=1 UARTALT=1 RX=AtmelPE6 TX=AtmelPE7"
mcuio[atxmega128a3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3"
mcuio[atxmega128a3u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=4 UARTALT=1 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=6 UARTALT=1 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega128b3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7"
mcuio[atxmega128c3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega128d3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega128a4]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atxmega128a4u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega128d4]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3"
mcuio[atxmega192a1]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atxmega192a3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3"
mcuio[atxmega192a3u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=4 UARTALT=1 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=6 UARTALT=1 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega192c3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega192d3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega256a1]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[atxmega256a3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3"
mcuio[atxmega256a3b]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPF2 TX=AtmelPF3"
mcuio[atxmega256a3bu]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=5 RX=AtmelPF2 TX=AtmelPF3"
mcuio[atxmega256a3u]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=2 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 UARTALT=1 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=3 RX=AtmelPD6 TX=AtmelPD7|UARTNUM=4 RX=AtmelPE2 TX=AtmelPE3|UARTNUM=4 UARTALT=1 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=5 RX=AtmelPE6 TX=AtmelPE7|UARTNUM=6 RX=AtmelPF2 TX=AtmelPF3|UARTNUM=6 UARTALT=1 RX=AtmelPF6 TX=AtmelPF7"
mcuio[atxmega256c3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega256d3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega384c3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[atxmega384d3]="UARTNUM=0 RX=AtmelPC2 TX=AtmelPC3|UARTNUM=0 UARTALT=1 RX=AtmelPC6 TX=AtmelPC7|UARTNUM=1 RX=AtmelPD2 TX=AtmelPD3|UARTNUM=2 RX=AtmelPE2 TX=AtmelPE3"
mcuio[attiny202]="UARTNUM=0 RX=AtmelPA7 TX=AtmelPA6|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny204]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny212]="UARTNUM=0 RX=AtmelPA7 TX=AtmelPA6|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny214]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny402]="UARTNUM=0 RX=AtmelPA7 TX=AtmelPA6|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny404]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny406]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny412]="UARTNUM=0 RX=AtmelPA7 TX=AtmelPA6|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny414]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny416]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny416auto]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny417]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny424]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny426]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny427]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny804]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny806]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny807]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny814]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny816]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny817]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny824]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny826]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny827]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny1604]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1606]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1607]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1614]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1616]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1617]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1624]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny1626]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny1627]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny3214]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[attiny3216]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny3217]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny3224]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1"
mcuio[attiny3226]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[attiny3227]="UARTNUM=0 RX=AtmelPB3 TX=AtmelPB2|UARTNUM=0 UARTALT=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 RX=AtmelPA2 TX=AtmelPA1|UARTNUM=1 UARTALT=1 RX=AtmelPC1 TX=AtmelPC2"
mcuio[atmega808]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[atmega809]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4"
mcuio[atmega1608]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[atmega1609]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4"
mcuio[atmega3208]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[atmega3209]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4"
mcuio[atmega4808]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[atmega4809]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4"
mcuio[avr8ea28]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr8ea32]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr16dd14]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr16dd20]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr16dd28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr16ea28]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr16dd32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr16ea32]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr16ea48]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr32dd14]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr32dd20]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr32da28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr32db28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr32dd28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr32ea28]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr32da32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr32db32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr32dd32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr32ea32]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr32da48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0"
mcuio[avr32db48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0"
mcuio[avr32ea48]="SWIO=1 RX=AtmelPB0 TX=AtmelPB1"
mcuio[avr64dd14]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr64dd20]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr64da28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr64db28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr64dd28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr64ea28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr64da32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr64db32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr64dd32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6"
mcuio[avr64ea32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr64da48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0"
mcuio[avr64db48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0"
mcuio[avr64ea48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=0 UARTALT=2 RX=AtmelPA3 TX=AtmelPA2|UARTNUM=0 UARTALT=3 RX=AtmelPD5 TX=AtmelPD4|UARTNUM=0 UARTALT=4 RX=AtmelPC2 TX=AtmelPC1|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=1 UARTALT=2 RX=AtmelPD7 TX=AtmelPD6|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr64da64]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0|UARTNUM=4 UARTALT=1 RX=AtmelPE5 TX=AtmelPE4|UARTNUM=5 RX=AtmelPG1 TX=AtmelPG0|UARTNUM=5 UARTALT=1 RX=AtmelPG5 TX=AtmelPG4"
mcuio[avr64db64]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0|UARTNUM=4 UARTALT=1 RX=AtmelPE5 TX=AtmelPE4|UARTNUM=5 RX=AtmelPG1 TX=AtmelPG0|UARTNUM=5 UARTALT=1 RX=AtmelPG5 TX=AtmelPG4"
mcuio[avr128da28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr128db28]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0"
mcuio[avr128da32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr128db32]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4"
mcuio[avr128da48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0"
mcuio[avr128db48]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0"
mcuio[avr128da64]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0|UARTNUM=4 UARTALT=1 RX=AtmelPE5 TX=AtmelPE4|UARTNUM=5 RX=AtmelPG1 TX=AtmelPG0|UARTNUM=5 UARTALT=1 RX=AtmelPG5 TX=AtmelPG4"
mcuio[avr128db64]="UARTNUM=0 RX=AtmelPA1 TX=AtmelPA0|UARTNUM=0 UARTALT=1 RX=AtmelPA5 TX=AtmelPA4|UARTNUM=1 RX=AtmelPC1 TX=AtmelPC0|UARTNUM=1 UARTALT=1 RX=AtmelPC5 TX=AtmelPC4|UARTNUM=2 RX=AtmelPF1 TX=AtmelPF0|UARTNUM=2 UARTALT=1 RX=AtmelPF5 TX=AtmelPF4|UARTNUM=3 RX=AtmelPB1 TX=AtmelPB0|UARTNUM=3 UARTALT=1 RX=AtmelPB5 TX=AtmelPB4|UARTNUM=4 RX=AtmelPE1 TX=AtmelPE0|UARTNUM=4 UARTALT=1 RX=AtmelPE5 TX=AtmelPE4|UARTNUM=5 RX=AtmelPG1 TX=AtmelPG0|UARTNUM=5 UARTALT=1 RX=AtmelPG5 TX=AtmelPG4"

Fun fact 1: Atmel's LIN/UARTs allow the setting of the sample rate 8..63 in addition to the BRR. Classic UARTs only can set the sample rate to 8 or 16. This means that LIN/UARTs can create almost all baud rates within 1% of quantisation error. Urboot bootloaders for these parts make use of that.

Fun fact 2: Classic UARTs struggle to generate 115200 baud from F_CPU = 8 MHz (a whopping 3.7% quantification error). In these cases an urboot bootloader with software I/O is generated instead.

Fun fact 3: The bash script always numbers UARTs of a part starting from UARTNUM=0, irrespective how the data sheet numbers them (some parts only have USART1, the XMEGA parts name their USARTs after the port, eg, USARTC0),

Fun fact 4: Some classic parts (ATtiny441andATtiny841) can assign different alternative pins to RX/TX for an UART. This is done with the CPP constant UARTALT=1 and noted in the file name with _alt1, see here, for example.

Fun fact 5: Some UARTs have RX/TX on a port that is outside the bit addressable I/O space. This happens for UART2 and UART3 on the ATmega2560, for example. As the autobaud sensing loop requires a fast scanning of the RX line, autobaud bootloaders cannot be generated for these UARTs.

Fun fact 6: Software I/O also relies on clock cycles of opcodes and is unable to deal with RX/TX ports outside the bit addressable I/O space (usually Port H and above). So no SWIO for UART2 or UART3 of ATmega2560 either. Bootloaders for ordinary fixed baud rates given F_CPU are possible, and generated, for UARTs with those non-bit-addressable ports though.

Fun fact 7: I have changed the naming scheme of the urboot bootloaders to always indicate the I/O mode (SWIO/UART) and the RX/TX lines that the user should interface the part with.

Fun fact 8: While reviewing the UART initialisation code I realised that almost all classic UARTs already have the UART character size bitfield set to 8N1 after reset, so could save typically 4 bytes.

Fun fact 9: I also realised that a lot of classic parts (around 50%) already initialise SP to RAMEND after reset, so could save that initialisation for a number of parts, too.

@mcuee and @MCUdude, have a look at the generated pre-compiled urboot bootloaders in the urboot.hex repository.

This should close the issue. In fact, I think once you have tested a sample of generated bootloaders, I will want to formally release v7.7 of urboot bootloaders.

@stefanrueger stefanrueger added the enhancement New feature or request label Mar 1, 2023
@mcuee
Copy link
Author

mcuee commented Mar 1, 2023

Nice one. I will carry out some tests and report here soon, probably over this weekend.

@MCUdude
Copy link

MCUdude commented Mar 1, 2023

Fun fact 5: Some UARTs have RX/TX on a port that is outside the bit addressable I/O space. This happens for UART2 and UART3 on the ATmega2560, for example. As the autobaud sensing loop requires a fast scanning of the RX line, autobaud bootloaders cannot be generated for these UARTs.

Does "outside the bit addressable I/O space" means above the 8-bit address space? When looking at the ATmega2560 datasheet, it appears to me that only the USART3 registers have addresses above 0xFF:

image

For reference, here are the USART2 registers in the ATmega2560 datasheet:

image

@stefanrueger
Copy link
Owner

stefanrueger commented Mar 1, 2023

The problem is not where the USART registers are, but where the Port for the RX line is. It is this loop

urboot/src/urboot.c

Lines 1958 to 1960 in 74ecad6

"2: " AUTO_INCX /* Increment X (r26:27) so that final value of r27 is BRRL divisor */ \
" sbis %[RXPin],%[RXBit]\n" /* Loop as long as rx bit is low */ \
" rjmp 2b\n" /* 5-cycle loop for 5 low bits (start bit + 4 lsb of 0x30) */
that needs bit access (using the sbis opcode) to the PIN of the Port of the RX line associated to USART2. And the PIN of Port H is way outside I/O space [0x20, 0x3f]. One loop iteration takes 5 cycles (mapping neatly to the 5 low bit that are measured after the start bit) and cannot afford to be substantially longer...

@stefanrueger
Copy link
Owner

stefanrueger commented Mar 1, 2023

Maybe I should have clarified: the bit-addressable I/O space is an address region of only 32 bytes (normally from 0x20 onwards, but in some parts from 0 onwards). Only in these 32 bytes can every single bit be individually addressed by the sbis, sbic, sbi, cbi opcodes.

@stefanrueger
Copy link
Owner

So, I have now refined the UART capabilities, and even cater for ATmega161's single byte that the two different msb-4 bit share between the two 12-bit BRR registers of UART0 and UART1. If anyone has an ATmega161, that's a good edge case to test (slow baud rate with high F_CPU on UART1).

@mcuee
Copy link
Author

mcuee commented Mar 5, 2023

@stefanrueger

Tested the ATmega2560 115200bps bootloader for UART0/1/2/3 and they all work well.
https://github.com/stefanrueger/urboot.hex/tree/main/boards/mega-r3/fcpu_16mhz/115200_bps

Test results here.

I use the avrdude patch from Marius for the testing of UART1/2/3 since I do not have the capacitors with me.

@stefanrueger
Copy link
Owner

Thanks for testing @mcuee!

So, I trust this issue can now be closed?

@mcuee
Copy link
Author

mcuee commented Mar 15, 2023

Yes this can be closed.

@mcuee mcuee closed this as completed Mar 15, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants