I have previously written about how to build code for the ATtiny 1-series chips on Debian, outlining what files are missing from Debian in order to allow this. It seems, three years on, the same stuff is still missing - and moreso now that the new 2-series chips are available. Here now, is some more instructions on top of that to get code working for these newer chips as well.
As before, start off by downloading the "Atmel ATtiny Series Device Support" file from http://packs.download.atmel.com/. This is a free and open download, licensed under Apache v2. This file carries the extension atpack but it's actually just a ZIP file.
Note that by default it'll unpack into the working directory, so you'll want to create a temporary folder to work in:
$ mkdir pack $ cd pack/ $ unzip ~/Atmel.ATtiny_DFP.2.0.368.atpack Archive: /home/leo/Atmel.ATtiny_DFP.2.0.368.atpack creating: atdf/ creating: avrasm/ creating: avrasm/inc/ ...
From here, you can now copy the relevant files out to where avr-gcc will find them:
$ sudo cp include/avr/iotn?*2[467].h \ /usr/lib/avr/include/avr/ $ sudo cp gcc/dev/attiny?*2[467]/avrxmega3/*.{o,a} \ /usr/lib/avr/lib/avrxmega3/ $ sudo cp gcc/dev/attiny?*2[467]/avrxmega3/short-calls/*.{o,a} \ /usr/lib/avr/lib/avrxmega3/short-calls/
Unlike last time, you'll also need the device-specs files for avr-gcc itself to understand the new chips. You'll have to find the exact path on your system where the existing ones are, and then copy the new ones in there:
$ dpkg -S specs-atmega328 gcc-avr: /usr/lib/gcc/avr/5.4.0/device-specs/specs-atmega328 # So it appears to be /usr/lib/gcc/avr/5.4.0/device-specs $ sudo cp gcc/dev/attiny?*2[467]/device-specs/* \ /usr/lib/gcc/avr/5.4.0/device-specs/
Finally, there's one last task that needs doing. Locate the main avr/io.h file (it should live in /usr/lib/avr/include) and add the following lines somewhere within the main block of similar lines. These are needed to redirect from the toplevel #include <avr/io.h> towards the device-specific file.
#elif defined (__AVR_ATtiny424__) # include <avr/iotn424.h> #elif defined (__AVR_ATtiny426__) # include <avr/iotn426.h> #elif defined (__AVR_ATtiny427__) # include <avr/iotn427.h> #elif defined (__AVR_ATtiny824__) # include <avr/iotn824.h> #elif defined (__AVR_ATtiny826__) # include <avr/iotn826.h> #elif defined (__AVR_ATtiny827__) # include <avr/iotn827.h> #elif defined (__AVR_ATtiny1624__) # include <avr/iotn1624.h> #elif defined (__AVR_ATtiny1626__) # include <avr/iotn1626.h> #elif defined (__AVR_ATtiny1627__) # include <avr/iotn1627.h> #elif defined (__AVR_ATtiny3224__) # include <avr/iotn3224.h> #elif defined (__AVR_ATtiny3226__) # include <avr/iotn3226.h> #elif defined (__AVR_ATtiny3227__) # include <avr/iotn3227.h>
Having done this we find we can now compile firmware for these new chips:
avr-gcc -std=gnu99 -Wall -Os -DF_CPU=20000000 -mmcu=attiny824 -flto -ffunction-sections -fshort-enums -o .build/firmware_t824.elf src/main.c avr-size .build/firmware_t824.elf text data bss dec hex filename 3054 24 9 3087 c0f .build/firmware_t824.elf avr-objcopy -j .text -j .rodata -j .data -O ihex .build/firmware_t824.elf firmware_t824-flash.hex
Keep an eye on the Debian bug #930195, as hopefully one day these steps will no longer be necessary.
No comments:
Post a Comment