Arduino 20MHz

The normal Arduino works with 16MHz or 8MHz(3.3V). The 20MHz formware is required for 20MHz.

optiboot

The bootloaders for Arduino are IDE version (4.4) and fixed version (6.2). github

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>cd "C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot"

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot>omake clean

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot>..\..\..\tools\avr\utils\bin\make OS=windows ENV=arduino clean
rm -rf *.o *.elf *.lst *.map *.sym *.lss *.eep *.srec *.bin *.hex

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot>omake AVR_FREQ=20000000L atmega328

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot>..\..\..\tools\avr\utils\bin\make OS=windows ENV=arduino AVR_FREQ=20000000L atmega328
../../../tools/avr/bin/avr-gcc -g -Wall -Os -fno-inline-small-functions -fno-split-wide-types -mshort-calls -mmcu=atmega328p -DF_CPU=20000000L  '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200' -c -o optiboot.o optiboot.c
../../../tools/avr/bin/avr-gcc -g -Wall -Os -fno-inline-small-functions -fno-split-wide-types -mshort-calls -mmcu=atmega328p -DF_CPU=20000000L  '-DLED_START_FLASHES=3' '-DBAUD_RATE=115200'
 -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe -Wl,--relax -Wl,--gc-sections -nostartfiles -nostdlib -o optiboot_atmega328.elf optiboot.o
../../../tools/avr/bin/avr-size optiboot_atmega328.elf
   text    data     bss     dec     hex filename
    500       0       0     500     1f4 optiboot_atmega328.elf
../../../tools/avr/bin/avr-objcopy -j .text -j .data -j .version --set-section-flags .version=alloc,load -O ihex optiboot_atmega328.elf optiboot_atmega328.hex
..\..\..\tools\avr\bin\avr-objdump -h -S optiboot_atmega328.elf > optiboot_atmega328.lst
rm optiboot.o optiboot_atmega328.elf

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot>
    

For github version, rename optiboot-master\optiboot\bootloaders\optiboot\ to optiboot-6.2 and copy to C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\ and build.

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32>cd "C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot-6.2"

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot-6.2>omake AVR_FREQ=20000000L atmega328

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot-6.2>..\..\..\tools\avr\utils\bin\make OS=windows ENV=arduino AVR_FREQ=20000000L atmega328
avr-gcc (WinAVR 20081205) 4.3.2
Copyright (C) 2008 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

BAUD RATE CHECK: Desired: 115200, Real: 113636, UBRRL = 21, Error=-1.3%
../../../tools/avr/bin/avr-gcc -g -Wall -Os -fno-split-wide-types -mrelax -mmcu=atmega328p -DF_CPU=20000000L  -DBAUD_RATE=115200 -DLED_START_FLASHES=3 -c -o optiboot.o optiboot.c
../../../tools/avr/bin/avr-gcc -g -Wall -Os -fno-split-wide-types -mrelax -mmcu=atmega328p -DF_CPU=20000000L  -DBAUD_RATE=115200 -DLED_START_FLASHES=3
 -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe -Wl,--relax -nostartfiles -nostdlib -o optiboot_atmega328.elf optiboot.o -lc
../../../tools/avr/bin/avr-size optiboot_atmega328.elf
   text    data     bss     dec     hex filename
    474       0       0     474     1da optiboot_atmega328.elf
../../../tools/avr/bin/avr-objcopy -j .text -j .data -j .version --set-section-flags .version=alloc,load -O ihex optiboot_atmega328.elf optiboot_atmega328.hex
..\..\..\tools\avr\bin\avr-objdump -h -S optiboot_atmega328.elf > optiboot_atmega328.lst
rm optiboot.o optiboot_atmega328.elf

C:\Program Files (x86)\Arduino\hardware\arduino\bootloaders\optiboot-6.2>
    

github.com/Optiboot/optiboot 6.2 2017-04-20 snapshot

atmega328 20MHz optiboot 4.4

atmega328 20MHz optiboot 6.2

Register 20MHz to IDE

# Add to C:\Program Files (x86)\Arduino\hardware\arduino\boards.txt

uno2.name=Arduino Uno 20MHz
uno2.upload.protocol=arduino
uno2.upload.maximum_size=32256
uno2.upload.speed=115200
uno2.bootloader.low_fuses=0xff
uno2.bootloader.high_fuses=0xde
uno2.bootloader.extended_fuses=0x05
uno2.bootloader.path=optiboot
uno2.bootloader.file=optiboot_atmega328_20.hex
uno2.bootloader.unlock_bits=0x3F
uno2.bootloader.lock_bits=0x0F
uno2.build.mcu=atmega328p
uno2.build.f_cpu=20000000L
uno2.build.core=arduino
uno2.build.variant=standard