Журнал Эмбеддед-Инженера

Тулчейн для STM8 под линукс на базе SDCC

Установка

SDCC

Есть соблазн установить из репозитория:

$ sudo yum install sdcc

но, поскольку там довольно старая версия (для такой новой для sdcc архитектуры, как stm8), то рекомендую ставить последний снапшот отсюда: находим нужную нам архитектуру i386 или AMD64 и качаем предскомлиленный архив бинарников:

wget http://freefr.dl.sourceforge.net/project/sdcc/snapshot_builds/amd64-unknown-linux2.5/sdcc-snapshot-amd64-unknown-linux2.5-20151028-9381.tar.bz2
tar xjf sdcc-snapshot-amd64-unknown-linux2.5-20151015-9358.tar.bz2                                                                      
cd sdcc
sudo cp -a * /usr
cd ..
rm -rf sdcc sdcc-snapshot-amd64-unknown-linux2.5-20151015-9358.tar.bz2

 Проверить корректную установку можно командой: 

sdcc -v

hex2bin

 Аналогично устанавливаем последнюю версию hex2bin, которой получаем бинарь, который в свою очередь будем кормить программатору:

wget http://heanet.dl.sourceforge.net/project/hex2bin/hex2bin/Hex2bin-2.1.tar.bz2
tar xjf Hex2bin-2.1.tar.bz2                                                     
cd Hex2bin-2.1        
make clean
CFLAGS='-Wall -Wextra -std=c99' make 
sudo make install
cd ..
rm -rf Hex2bin-2.1.tar.bz2 Hex2bin-2.1

stm8flash

Есть такой замечательный программатор stm8flash, который позволяет зашивать STM8 через стандартный st-link (или его китайские клоны) по интерфейсу SWIM; скачиваем и устанавливаем:

git clone https://github.com/vdudouyt/stm8flash.git
cd stm8flash
make
sudo make install
cd ..
rm -rf stm8flash

 Дополнительно хорошо бы установить рулы для возможности работы с st-link из под обычного юзера, для чего заимствуем готовые файлы из опенсорсного проекта st-link’а для STM32: 

sudo wget https://raw.githubusercontent.com/texane/stlink/master/49-stlinkv1.rules -O /etc/udev/rules.d/49-stlinkv1.rules
sudo wget https://raw.githubusercontent.com/texane/stlink/master/49-stlinkv2.rules -O /etc/udev/rules.d/49-stlinkv2.rules
sudo wget https://raw.githubusercontent.com/texane/stlink/master/49-stlinkv2-1.rules -O /etc/udev/rules.d/49-stlinkv2-1.rules
sudo udevadm control --reload-rules

Альтернативные инструменты

Справедливости ради, отмечу существование stm8flasher — утилиты, которой можно шить по UART старшие STM8, имеющие встроенный загрузчик, но в силу того, что не работаю с «жирными» STM8 эту утилиту не пробовал.

Также, начиная с весны 2016г, стал подностью бесплатным французский компилятор Cosmic, к сожалению, версия для линукса хоть и существует, но недоступна свободно и поставляется на отдельных условиях (с демоном лицензий flex lm).

Использование

Пример

Компиляция проекта из одного файла-исходника:

sdcc -lstm8 -mstm8 -opt-code-size --out-fmt-ihx $(CFLAGS) $(LDFLAGS) project.c

Конвертация в bin:

hex2bin -p 75 project.ihx

Зашивка:

stm8flash -cstlinkv2 -pstm8s103 -s flash -w project.bin

Разбор примера

sdcc

 Основные опции sdcc, которые скорее всего потребуется использовать:

 hex2bin

stm8flash

Общий формат команды:

stm8flash -c <stlink|stlinkv2> -p <partname> [-s flash|eeprom|0x8000] [-r|-w|-v] <filename>

Note!: В последней версии появилась поддержка формата hex и возможность программирования OptionBytes.

 

PS: если заметка помогла Вам, поделитесь ей с друзьями или коллегами: