Загрузчик для микроконтроллеров AVR.

AVR
Как то потребовался мне для одного проекта загрузчик для чипов AVR. Писать самому некогда было, да и не совсем быстрое это дело. Поэтому стал рыть интернет. Рыл, рыл и нарыл. Товарищ Шао зэ ян его создал(китаец). Сразу же привожу ссылку на этот загрузчик. Или эта. Но только почему то, открыть эти ссылки я сейчас у себя не могу. То ли этот китаец уже помер, и его сайт сдох, то ли фаервол в Китае чета блокирует. Непонятно. Надо будет разобраться. Ну или вот сторонняя ссылка. Но в общем сами исходники прокомментрованы, если что, разобраться в настройках бутака можно. Загрузчик работает совместно с утилитой AVRUBD.exe. Удобная такая утилита.


Вот окно настроек.


При желании утилиту AVRUBD.exe можно не использовать. Можно работать с загрузчиком через HyperTerminal который впрочем в 7 винде уже отсутствует. Ну или с любой другой утилитой, которая поддерживает протокол XModem. Ибо сам загрузчик работает по протоколу XModem. Итак что может данный загрузчик:

  • поддерживает работу через полнодуплексный RS232, полудуплексный RS485, полнодуплексный RS422 интерфейсы
  • свободно можно выбрать любой пин, для управлением направления данных по RS485
  • поддерживает защиту паролем на загрузку новых данных, при желании можно вырубить
  • есть возможность использовать LED для индикации состояния загрузчика, причем ледом можно управлять, заставить мигать быстрее или медленнее
  • можно выбрать пин, прижимая который к земле(или наоборот) вызываем загрузчик


Ну в общем, там еще вагон разных фишек. Впрочем их можно поотрубать. Тогда объем кода после компиляции будет меньше. Ну в общем качайте, используйте. Разбирайтесь.
Вот кусок кода с настройками.
#ifndef _BOOTCFG_H_
#define _BOOTCFG_H_        1

//define uart buffer's length
#define BUFFERSIZE         128

//system clock(MHz)
#ifndef F_CPU
#define F_CPU              7372800UL //8000000UL
#endif

//baudrate
#define BAUDRATE           19200

//Boot section start address(byte)
//define BootStart to 0 will disable this function
#define BootStart          0x3800

//verify flash's data while write
//ChipCheck will only take effect while BootStart enable
#define ChipCheck          1

//Bootloader launch  0:comport password  1:port level
#define LEVELMODE          0

#define LEVELPORT          C
#define LEVELPIN           PC0
//port level  1:High  0:Low
#define PINLEVEL           0

//max wait password time = TimeOutCnt * timeclk
//timeout count
#define TimeOutCnt         20

//basic timer interval(ms)
#define timeclk            500

//max wait data time = TimeOutCntC * timeclk
//send 'C' command count
#define TimeOutCntC        40

//password length
#define CONNECTCNT         0

//password
#if LEVELMODE == 0
unsigned char KEY[] = {'d', 0x0E, 0x1C, 0x39, 0x14, 0x28, 0x57, 0xAA};
#endif

//comport number: 0/1/2..
#define COMPORTNo          0

//enable watchdog
#define WDGEn              0

//enable RS485/RS422 mode
#define RS485              1
//RS485/RS422 send control port
#define RS485PORT          D
#define RS485TXEn          PD2

//enable LED indication
#define LEDEn              1
//LED control port
#define LEDPORT            C
#define LEDPORTNo          PC6

//some kind of AVR need this special delay after comport initialization
#define InitDelay          0

//communication checksum mode   0:CRC16  1:add up
#define CRCMODE            0

//Verbose mode: display more prompt message
#define VERBOSE            1

#endif


Сделал загрузчик товарищ Шао в Avrstudio4. При желании можно конвертировать в 6ую версию студии одним кликом. Для этого в 6й версии есть специальная функция конвертации.

Нарыл еще 2й загрузчик, немецкий. Вот ссылка на оригинал.
Тоже продвинутый донельзя. Но там уже не все так прозрачно как хотелось бы. Автор зажимает исходники. Ну это его право. Нет проблем. Зато он выложил *.hex файлы для каждого МК AVR. Качаешь готовый кекс файл для своей модели МК, заливаешь в чип, подключаешь чип через USART к утилите


и все сразу должно заработать. По крайней мере у меня заработало все сразу, но слегка криво. Не разбирался в чем дело ибо китайский загрузчик меня устраивал полностью. Но если вам нужны все же исходники, например чтоб изменить пин управления для изменения передачи данных для RS485. То автор может их подогнать за пару баксов.

Вот еще ссылка на загрузчики для AVR.
Файлы в топике: BOOT из Китая.zip

Комментарии (23)

RSS свернуть / развернуть
Хмм… Немцы, яапонцы… Свой чтоли написать? Интересно, моя лень позволит мне это сделать?
+3
А почему бы и нет. Только судя по этим двум, это не так просто, как мне показалось. По уму надо написать загрузчик ну и софтину к нему удобную, это труд. Что б проверить его на разных типах AVR, тоже труд и время и силы…
0
Ну софтина (даже кросплатформенная, благо шарповые проги работают ща хде угодно) это неделька — две работы по вечерам (а я шарп знаю нуу, на средне-начальном уровне) ну и сам загрузчик — тут в общем тоже не сложно, ибо его и на «С» запилить можно, исполузуя ASM вставки. Просто честно говоря мне лень, хотя по работе в ближайшие 3-4 месяца скорее всего придётся писать и софтину и загрузчик, тогда наверное и выложу :)
0
Ну напиши, еще одним загрузчиком больше на свете станет, только уровень должен быть не ниже того что уже есть.
+1
Китайский загрузчик хорош, дорабатывал его напильником 2 года назад — один маленький глюк при работе по RS485 (декларация порта пина Tx-Rx). Работает стабильно и быстро, рекомендую.
Вообще-то написание загрузчика под Авр дело нетрудное, только время это можно потратить с большей пользой, создавая что-то новое и ценное для сообщества.
0
TIFRREG |= (1 << OCF1A);
Нет, китайские товарищи,TIFR так не сбрасывают. Идите лесом…
0
Братуха, я лично сам с ним переписывался. Он самый настоящий китаец.
0
Что китаец — верю! Что написал что-либо путное — не очень. Но посмотрю на досуге из уважения к КПК. Кстати, раз переписываетесь — напишите ему про TIFR.
0
Так это уже давно было, хотя какая разница, адрес его у меня все равно есть.
0
Я для PIC и AVR использую загрузчики, что идут с компиляторами МикроЭлектроники. Простенькие, удобные, ничего лишнего.

Наличие исходников на МикроПаскале позволяет легко перекомпилировать на любую частоту тактирования, скорость порта, способ запуска. Для любого контроллера PIC или AVR, поддерживающего самопрограммирование.

За несколько лет использования — проблем не было.
Обычно программу отлаживаю через RS232, через него же и прошивку меняю.
Или прямо из компилятора, или отдельной утилиткой.
0
  • avatar
  • SWG
  • 07 июля 2013, 23:16
У меня не получилось заставить китайский загрузчик грузить прошивку через RS485. Кто-нибудь настраивал?
0
А это не оно?
0
Ну я когда то настраивал давно, у меня все работало.
0
Посмотри декларацию порта пина управления TXRX. У меня была похожая проблема, оказалось порт задекларирован от СИДа, т.е. работало только если СИД и пин направления передачи были на одном порту.
0
Проверь декларацию порта пина управления направлением передачи TXRX. У меня была проблема — порт декларировался такой же как порт индикаторного светодиода, и работало только если пин направления передачи и СИД были на том же порту.
0
+1
  • avatar
  • qic
  • 08 июля 2013, 00:15
Работает с AVRProg, использую только UART.
0
Чем не устраивают загрузчики от Атмела? Зачем какие-то сторонние искать, да ещё и без исходников? Нэпонатна…
0
А можно ссылку глянуть, что за звери? Исходники они прилагают? Утилиты для работы удобные для использования?
0
А можно ссылку глянуть, что за звери?
Их много:
Atmel AVR1327
Atmel AVR1605: XMEGA Boot Loader Quick Start Guide
Atmel AVR1622: TWI Boot Loader for XMEGA
Atmel AVR1916: USB DFU Boot Loader for Atmel XMEGA
Atmel AVR947: Single-Wire Bootloader for any MCU with Self Programming Capability
Atmel AVR2054: SerialBootloader User Guide
Atmel AVR076: AVR CAN — 4K Boot Loader
Atmel AVR112: TWI Bootloader for Devices without Boot Section
Atmel AVR231: AES Bootloader
AVR230: DES Bootloader on tinyAVR and megaAVR devices
Исходники они прилагают?
Всё с исходниками, в основном для IAR.
Утилиты для работы удобные для использования?
Тут хуже, предлагают, но удобнее и проще своё написать.
0
У меня есть исходники немецкого бута chip45. Их можно официально на их сайте купить за 800 рублей. Если кому нужно — пишите почту в личку, я пришлю. Сам в них не ковырялся, но краем глаза глядел, там все оч грамотно сделано))
0
Тут Версия 4,5 китайского загрузчика добавлено шифрование PC1 и AES и безопасный режим обновления (с записью метки в EEPROM) полезно когда до устройства просто так не добраться. Впрочем я так и не смог заставить его работать на Mega128a делает вид что пишет, а по факту флэш не изменяется ни на байт. Проверил на Mega162 со всеми плюшками, включая шифрование — работает. Что ему надо в 128 меге — ХЗ.
0
  • avatar
  • IIK
  • 14 августа 2013, 20:01
у китайского загрузчика есть один недобаг. Он не сбрасывает настройки таймера после таймаута. Я в это вляпался недавно, когда пытался понять, почему у меня в webbotlib не хотят сервы инициализироваться после старта без перепрошивки. Поправил функцию quit() в загрузчике, стало все ок. Списывался с автором либы, он считает, что код инициализации всего и вся не нужен, т.к. есть в доках на контроллеры инфа, что после старта вся периферия стерильна. Вобщем, код сброса всего к дефолтам автор библиотеки отказался добавлять. Пришлось поправить бутлоадер.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.