cd /tmp
mkdir dfu
cd dfu
apt-get build-dep dfu-programmer
apt-get source dfu-programmer
cd dfu-programmer-0.5.1Adicionar no arquivo "src/arguments.c", na "static struct target_mapping_structure target_map[]" antes do "{ NULL }", linha 101:
{ "atmega32u2", tar_atmega32u2, adc_AVR, 0x2FF0, 0x03eb, 0x08000, 0x1000, true, 128, true, false, 128, 0x0400 },
Adicionar no arquivo "src/arguments.h", na "enum targets_enum" antes do "tar_none };", linha 79:
tar_atmega32u2,
Gerar o pacote:
dpkg-buildpackage
Instale o pacote gerado:
dpkg -i ../dfu-programmer_0.5.1-1_amd64.deb
Baixar exemplo do site da ATMEL:
mkdir /tmp/atmel
cd /tmp/atmel
wget "http://www.atmel.com/dyn/resources/prod_documents/series2-usb_software_library_template-2_0_0-doc.zip"
unzip series2-usb_software_library_template-2_0_0-doc.zip
cd /tmp/atmel/series2-usb_software_library_template-2_0_0-doc/demo/series2-usb_software_library_template/gccAltere no arquivo "Makefile" a linha do compilador gcc, linha 9 para:
CC = /usr/bin/avr-gcc
Altere o arquivo "../conf/config.h". Os includes das linhas 72 e 74 estao com "\" e no linux eh "/":
#include "lib_board\stk_526\stk_526.h"
...
#include "lib_board/stk_600/stk_600.h"
Tente compilar. Se der erro como "clock_prescale_set" faca o seguinte:
Edite o arquivo "/usr/lib/avr/include/avr/power.h" e procure por "clock_prescale_set". Volte um pouco no
codigo e encontre o bloco "#if defined(...". Nele adicione a linha:
|| defined(__AVR_ATmega32U2__) \
Bug no codigo da ATMEL:
Edite o arquivo "usb_descriptors.h" e encontre a linha "#define EP_CONTROL_LENGTH 64". Altere o valor de 64 para 16.
No arquivo "usb_drv.c" da "lib_mcu/usb" encontre o codigo:
U8 usb_init_device (void)
{
Usb_select_endpoint(EP_CONTROL);
if(!Is_usb_endpoint_enabled())
{
return usb_configure_endpoint(EP_CONTROL, \
TYPE_CONTROL, \
DIRECTION_OUT, \
SIZE_32, \
ONE_BANK, \
NYET_DISABLED);
}
return FALSE;
}
Altere "SIZE_32" para "SIZE_16".
Testado com NooGroove ATMEGA32U2
Nenhum comentário:
Postar um comentário