On Mac

第一步:

  • Mac: 安装 Homebrew, 并通过 Homebrew

第二步:

Mac 平台下安装 avr-gcc:

$ brew tap tonylabs/homebrew-avr
$ brew install avr-libc
==> Installing avr-libc from tonylabs/homebrew-avr
==> Installing dependencies for tonylabs/avr/avr-libc: gmp, mpfr, libmpc, isl, cloog, avr-binutils, avr-gcc
==> Installing tonylabs/avr/avr-libc dependency: gmp
==> Downloading https://homebrew.bintray.com/bottles/gmp-6.1.0.el_capitan.bottle.tar.gz

Ubuntu 平台下安装  avr-gcc

apt-get install avr-libc

安装 avrdude:

brew install avrdude --with-usb

ISL 报错

checking for the correct version of the gmp/mpfr/mpc libraries... yes
checking for version 0.10 of ISL... no
checking for version 0.11 of ISL... no
checking for version 0.12 of ISL... no
configure: error: Unable to find a usable ISL.  See config.log for details.

如上述方法遇到错误,请尝试

  • $ brew tap homebrew/versions
  • $ brew tap larsimmisch/homebrew-avr
  • $ brew tap neonquill/homebrew-avr
  • $ brew install avr-libc
brew tap homebrew/versions

第三步:

下载 LUFA-111009,并放到指定的目录

  • Windows: 如果当前的 Arduino 安装在 C:\arduino-1.0.5,那么 LUFA 库就放在 C:\LUFA-111009
  • Mac 平台下,将 LUFA 放在根目录:/LUFA/LUFA-111009/…

lufa-folder-location

第四步:

修改 Descriptors.c 文件中 196 行至 215 行中的设备名称,此名称将出现在设备管理器

const USB_Descriptor_String_t ProductString =
{
   #if DEVICE_PID == 0x0036
   .Header                 = {.Size = USB_STRING_LEN(16), .Type = DTYPE_String},
   .UnicodeString          = L"Arduino Leonardo" 
   #elif DEVICE_PID == 0x0151
   .Header                 = {.Size = USB_STRING_LEN(20), .Type = DTYPE_String},
   .UnicodeString          = L"TONYLABS DEVICE NAME"
   #else
   .Header                 = {.Size = USB_STRING_LEN(12), .Type = DTYPE_String},
   .UnicodeString         = L"USB IO board"
   #endif
};

const USB_Descriptor_String_t ManufNameString = 
{
   .Header               = {.Size = USB_STRING_LEN(11), .Type = DTYPE_String},

   #if DEVICE_VID == 0x2341
   .UnicodeString         = L"Arduino LLC"
   #elif DEVICE_VID == 0x20A0
   .UnicodeString          = L"TONYLABS"
   #else
   .UnicodeString         = L"Unknown    "
   #endif
};

第五步:

设置编译环境,请注意 BASEDIR 一定要确保设置正确

set BASEDIR=c:\arduino-1.0.5\hardware
set DIRAVRUTIL=%BASEDIR%\tools\avr\utils\bin
set DIRAVRBIN=%BASEDIR%\tools\avr\bin
set DIRAVRAVR=%BASEDIR%\tools\avr\avr\bin
set DIRLIBEXEC=%BASEDIR%\tools\avr\libexec\gcc\avr\4.3.2
set OLDPATH=%PATH%
@path %DIRAVRUTIL%;%DIRAVRBIN%;%DIRAVRAVR%;%DIRLIBEXEC%;%PATH%
cd %BASEDIR%\arduino\bootloaders\caterina
%DIRAVRUTIL%\make.exe clean
%DIRAVRUTIL%\make.exe all VID=0x20A0 PID=0x0151
copy Caterina.hex Caterina-Tonylabs.hex
%DIRAVRUTIL%\make.exe clean
@path %OLDPATH%

第六步:

对于 Windows 来说,我们要准备好一个驱动程序(INF)文件,设备才可以正常工作

[DeviceList]
%DESCRIPTION%=DriverInstall, USB\VID_20A0&PID_0151
%DESCRIPTION%=DriverInstall, USB\VID_20A0&PID_4151&MI_00

[DeviceList.NTamd64]
%DESCRIPTION%=DriverInstall, USB\VID_20A0&PID_0151
%DESCRIPTION%=DriverInstall, USB\VID_20A0&PID_4151&MI_00

 

第七步:

如果需要使用 Arduino 直接下载程序到设备中,我们可以添加一个新的板型,修改boards.txt

################################
leostick.name=TONYLABS
leostick.upload.protocol=avr109
leostick.upload.maximum_size=28672
leostick.upload.speed=57600
leostick.upload.disable_flushing=true
leostick.bootloader.low_fuses=0xff
leostick.bootloader.high_fuses=0xd8
leostick.bootloader.extended_fuses=0xcb
leostick.bootloader.path=caterina
leostick.bootloader.file=Caterina-Tonylabs.hex
leostick.bootloader.unlock_bits=0x3F
leostick.bootloader.lock_bits=0x2F
leostick.build.mcu=atmega32u4
leostick.build.f_cpu=16000000L
leostick.build.vid=0x20A0
leostick.build.pid=0x4151
leostick.build.core=arduino
leostick.build.variant=tonylabs

第八步:

使用 Atmel AVR MKII 下载器,通过 avrdude 烧写 hex 固件程序:

$ avrdude -p atmega32u4 -P usb -c avrispmkii -e -U flash:w:PATH/FIRMWIRE.hex