Arduino Nano v3.0 - небольшой модуль на базе микроконтроллера ATmega328P. Помимо микроконтроллера он содержит микросхему стабилизатора и преобразователь USB-UART на основе FT232RL (в оригинальной версии) либо CH340G (в китайских клонах, широко продаваемых в интернете). Вторую реализацию платы можно купить по цене около 3$ с доставкой. За эти деньги получаем весьма серьезный девайс - распаянный МК имеет на борту 32КБ флеш памяти, 2КБ ОЗУ и 1 КБ EEPROM и работает на частоте 16МГц. Также МК имеет 6 каналов аппаратного ШИМа (D3, D5, D6, D9, D10, D11), 7 каналов 10-битного АЦП (A0 - A7) и прошитый bootloader, позволяющий заливать прошивку МК через USB.
Распиновка платы:
Для программирования устройства можно использовать Arduino IDE, но лично я предпочитаю чистый С-код и AVR GCC.
Вне зависимости от того, на чем программировать, сначала надо установить драйвер для CH340G. Его можно найти на сайте производителей чипа
www.wch-ic.com, либо скачать драйвер версии 1.3 по этой ссылке.
Драйвер весрии 1.3 без проблем поддерживает MacOS X Sierra (10.12).
Замечу, что драйверы более ранних версий (ниже 1.3) не были подписаны производителем и вызывали kernel panic на Sierra.
Далее потребуется среда разработки. Тут есть два варианта, первый - установить весь необходимый софт включая AVR GCC и avrdude для MacOS скачав инсталлятор Crosspack тут: www.obdev.at/products/crosspack
После чего надо будет настроить пути следующей командой (ее лучше прописать в автозапуск)
export PATH=$PATH:/usr/local/CrossPack-AVR/bin
Второй вариант (наиболее рекомендуемый) - установить самую последнюю версию AVR GCC воспользовавшись менеджером пакетов Homebrew. Для этого запускаем следующие команды:
brew tap osx-cross/avr
brew install avr-gcc
brew install avr-binutils
brew install avr-libc
Кстати, узнать последние версии для gcc, binutils, avr-libc и gdb можно зайдя репозиторий проекта: github.com/osx-cross/homebrew-avr
Arduino IDE можно взять с официального сайта arduino.cc/en/Main/Software, она пригодится нам чтобы разобраться, как работать с bootloader-ом ардуины.
Теперь можно проверить работоспособность платы закачав туда прошивку. Проще всего сделать это из IDE Arduino. В меню Tools выбираем:
Board: Arduino Nano
Processor: ATmega328
Port: /dev/tty.wchusbserial801330
После чего делаем Upload (Cmd+U) и видим, как заливается прошивка. Если все прошло успешно, то можно озадачиться вопросом прошивки платы через консоль используя avrdude. Для этого надо определить используемый загрузчик и его параметры. Чтобы сделать это, выходим из Arduino IDE, открываем в текстовом редакторе ее конфиг ~/Library/Arduino15/preferences.txt и добавляем туда две строки (либо устанавливаем в true уже существующие параметры):
build.verbose = true
upload.verbose = true
После чего заново запускаем IDE и повторно прошиваем плату. При этом видим, какие команды выполняются при сборке и прошивке.
В моем случае прошивка выполнялась командой
/Applications/Arduino.app/Contents/Java/hardware/tools/avr/bin/avrdude -C/Applications/Arduino.app/Contents/Java/hardware/tools/avr/etc/avrdude.conf -v -patmega328p -carduino -P/dev/tty.wchusbserial801330 -b57600 -D -Uflash:w:/var/folders/qz/xqm7fm914mz4h63k9wpfx2nw0000gn/T/build8058511828618706614.tmp/sketch_mar04a.cpp.hex:i
Т.е., получается, что программатор называется “arduino” и работает на скорости 57600 бод. Теперь не составит труда работать с прошивкой из консоли.
Например, создать резервную копию текущей прошивки можно командой
avrdude -v -patmega328p -carduino -P/dev/tty.wchusbserial801330 -b57600 -U flash:r:"backup.hex":i
После выполнения команды прошивка будет сохранена в файл backup.hex, который можно сохранить на будущее, если возникнет необходимость восстановить оригинальный загрузчик.
В заключении можно создать проект для компиляции чистым AVR GCC. Для чего выполняем команду
avr-project ArduinoDemo
После выполнения получаем директорию ArduinoDemo с исходником main.c, скриптом сборки Makefile и проектом для XCode.
В Makefile меняем параметры для нашего микроконтроллера, получая что-то в таком роде:
# This is a prototype Makefile. Modify it according to your needs.
# You should at least check the settings for
# DEVICE ....... The AVR device you compile for
# CLOCK ........ Target AVR clock rate in Hertz
# OBJECTS ...... The object files created from your source files. This list is
# usually the same as the list of source files with suffix ".o".
# PROGRAMMER ... Options to avrdude which define the hardware you use for
# uploading to the AVR and the interface where this hardware
# is connected. We recommend that you leave it undefined and
# add settings like this to your ~/.avrduderc file:
# default_programmer = "stk500v2"
# default_serial = "avrdoper"
# FUSES ........ Parameters for avrdude to flash the fuses appropriately.
DEVICE = atmega328p
CLOCK = 16000000
PROGRAMMER = -carduino -P/dev/tty.wchusbserial801330 -b57600
OBJECTS = main.o
FUSES = #-U hfuse:w:0xd9:m -U lfuse:w:0x24:m
AVRDUDE = avrdude $(PROGRAMMER) -p $(DEVICE)
COMPILE = avr-gcc -Wall -Os -DF_CPU=$(CLOCK) -mmcu=$(DEVICE)
# symbolic targets:
all: main.hex
.c.o:
$(COMPILE) -c $< -o $@
.S.o:
$(COMPILE) -x assembler-with-cpp -c $< -o $@
# "-x assembler-with-cpp" should not be necessary since this is the default
# file type for the .S (with capital S) extension. However, upper case
# characters are not always preserved on Windows. To ensure WinAVR
# compatibility define the file type manually.
.c.s:
$(COMPILE) -S $< -o $@
flash: all
$(AVRDUDE) -U flash:w:main.hex:i
fuse:
$(AVRDUDE) $(FUSES)
# Xcode uses the Makefile targets "", "clean" and "install"
install: flash fuse
# if you use a bootloader, change the command below appropriately:
load: all
bootloadHID main.hex
clean:
rm -f main.hex main.elf $(OBJECTS)
# file targets:
main.elf: $(OBJECTS)
$(COMPILE) -o main.elf $(OBJECTS)
main.hex: main.elf
rm -f main.hex
avr-objcopy -j .text -j .data -O ihex main.elf main.hex
avr-size --format=avr --mcu=$(DEVICE) main.elf
# If you have an EEPROM section, you must also create a hex file for the
# EEPROM and add it to the "flash" target.
# Targets for code debugging and analysis:
disasm: main.elf
avr-objdump -d main.elf
cpp:
$(COMPILE) -E main.c
Всё, имеем проект, с которым можно работать в XCode и компилировать нажатием Command+B либо явно с помощью утилиты make.