Продолжаю делиться "опытом" по простому 1-ому программированию (прошивке) и обновлению прошивки:
Программирование через USB (без ничего)Если микроконтроллер имеет USB-порт, то Atmel подготовил два средства простой прошивки (для серии AT32UC3 – точно):
1. DFU-BootLoader: подключаете USB-кабелем микроконтроллер, даже только что запаянный на плату и 1-ый раз включенный, к компьютеру, запускаете на нём атмеловский *.cmd и всё – Ваша программа прошита!
2. MS-Bootloader: подключаете USB-флешку с «подготовленным» файлом прошивки Вашей программы к Вашему уже прошитому ранее микроконтроллеру, активируете из своей программы этот MS-Bootloader и он сам возьмёт этот файл с USB-флешь и прошьёт его в микроконтроллер.
1-ое средство DFU-BootLoader прошивается на фабрике и при 1-ом включении безусловно стартует – т.е. для 1-ой прошивки на производстве нужен только USB-кабель, соединяющий Ваш микроконтроллер на плате с компьютером. На последнем должна быть утилита «BatchISP» - есть во FLIP:
http://www.atmel.com/tools/FLIP.aspx?tab=overview.
2-ое средство MS-BootLoader поставляется в виде исходников и после несложной подстройки под личные нужды программируется (можно даже и 1-ым средством) в память Вашего микроконтроллера.
Оба средства могут существовать в памяти одновременно: DFU занимает 1-ые 8КБ, добавление MS увеличивает «потери» до 32КБ.
DFU – «DFUDevice Firmware Upgrade». Механизм описан в
http://www.atmel.com/images/doc7745.pdf «AVR32784 - AVR UC3 USB DFU Bootloader (doc7745).pdf» (версия 1.0.3, UC3A/B) и
http://www.atmel.com/images/doc32166.pdf «AVR32806 - Atmel UC3 32-bit Microcontroller DFU Boot Loader, Version 1.1.0 (doc32166).pdf» (версия 1.1.0, UC3C/D). Исходников нет, некоторые прошивки можно найти в «примерах» -
http://www.atmel.com/Images/AVR32806.zip,
http://www.atmel.com/Images/avr32758.zip. Ещё один, м.б., полезный документ -
http://www.atmel.com/images/doc32131.pdf «AVR32760 - AVR32 UC3 USB DFU Bootloader Protocol (doc32131).pdf».
MS – «Mass Storage class bootloader». Механизм описан в
http://www.atmel.com/images/doc7818.pdf «AVR32758 - AVR32 UC3 USB Host Mass Storage BootLoader(doc7818).pdf», исходники и инструменты «подготовки» файла прошивки -
http://www.atmel.com/Images/avr32758.zip.
DFU-BootLoader после сброса стартует 1-ым по адресу 0x8000_0000 и проверяет условия своего запуска: версиия 1.0.x (прошивается фабрикой в UC3A/B) опрашивает 3 старших FUSEs и слово 0x1FC в USER_PAGE, версиия 1.1.x (прошивается фабрикой в UC3C/D) опрашивает 2 слова 0x1F8 и 0x1FC в USER_PAGE. Там прошивается условие запуска: безусловного (фабричная установка) или по заданному уровню (0/1) на заданном пине. Лишиться этого DFU-BootLoader в памяти микроконтроллера просто – команда «chip-Erase» через «JITAG» стирает его бесследно… Чтобы восстановить утерянное нужна прошивка, а она «на виду» не лежит – захоронена где-то в примерах… Если условия запуска DFU-BootLoader не выполнены, то он передаёт управление по адресу 0x8000_2000, от куда начинается либо MS-Bootloader, либо уже боевая прошивка.
MS-Bootloader при своём старте также опрашивает своё условие запуска – слово в USER_PAGE. Если условие запуска не выполнено, то управление передаётся по адресу 0x8000_8000. Если условие выполнено, то запускается процесс программирования, после которого «ключ запуска» в USER_PAGE стирается. Исходник рассчитан на наличие единственного файла на флешке с заданным именем, но переделать под поиск нужного файла среди нескольких несложно. Также можно написать своё условие запуска – исходники все есть. Проект нужно «импортировать» в студию…
DFU шьёт куда прикажет *.hex, MS шьёт *.bin начиная с адреса 0x8000_8000 (т.е. сразу после себя). В любом случае файлы прошивки для этих программаторов надо подготовить. Для DFU – выбросить из .hex пространство, которое он занимает, т.е. адреса 0x8000_0000…0x8000_2000. Для MS – преобразовать в бинарный образ, выбросив пространство 0x8000_0000…0x8000_8000. Файлы готовятся утилитой «srec_cat.exe» - есть в примере
http://www.atmel.com/Images/avr32758.zip с примерами использования: «dfuprogram-uc3a-ms_bl-user_appli.cmd» - для DFU и «gen_uc3.cmd» - для MS. Скачать утилиту саму с полным хелпом можно от сюда -
http://sourceforge.net/projects/srecord/files/srecord/1.47/ (srecord-1.47.zip). Ещё один хелп -
http://srecord.sourceforge.net/srecord-1.60.pdf. Ключ «–crop» берёт из входного .hex-файла заданный диапазон адресов, «-fill» - заполняет «пустоты» заданной константой в своём заданном диапазоне адресов, «-max» - ищет в файле максимальный адрес, «-offset -0x80007FE7» сдвигает выбранный диапазон адресов почти к началу двоичного файла, оставляя там 25 байт для вставки заголовка с контрольной суммой crc32 (ключи «-gen» и «-b-e-crc32»). В один выходной файл можно собрать несколько входных. Входной и выходной формат .bin/.hex задаётся ключами: «-binary/-intel». *.bin-файл для MS содержит только Вашу «обрезанную от 0x8000_8000» прошивку, .hex-файл для прошивки через JTAG с использованием DFU+MS – все три файла: DFU-BootLoader, MS-BootLoader и Вашу прошивку.
Для работы с DFU и MS в Вашем проекте надо подправить стартовый файл. В настройках линковщика поставить галку «не использовать стандартный стартовый файл» и включить в проект “trampoline*.S” – там jump: на 0x8000_2000 или на 0x8000_8000 и затычка (.org) на неиспользуемое пространство.