[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Форум » форумы » Готовые проекты » Mega8 bootloader (128 word size) & soft (Бутлоадер для M8 и программа на ПК для загрузки прошивки)
Mega8 bootloader (128 word size) & soft
topДата: Суббота, 17.08.2013, 16:30 | Сообщение # 1
Группа: Друзья
Сообщений: 146

Статус: Offline
Увлекла меня статья exersizze'а по поводу использования загрузчика) Начал разбираться что и к чему. Для готовых устройств удобно использовать бутлоадер, никаких тебе SPI для прошивки и прочей навесной мишуры. Достаточно UART'а. Ну чем не сказка? В поисках крохотного бутлоадера нашел старинный аппнот номер 141 где для восьмой меги требовалось всего ничего 128 слов для бута. Стоит поступить честно и сразу предупредить что такой малый размер (возможно, может и нет) обеспечен тем, что для загрузки прошивки в МК все же понадобится еще одна ножка - так сказать ножка инициализации. В моей реализации это PC1. Если при подаче питания (или после сброса) PC1 сидит на земле, то стартует загрузчик и ждет когда ему скормят прошивку по UART'у, если же PC1 на плюсе питания то незамедлительно стартует основная программа. Я нисколько не считаю это недостатком, даже наоборот - достоинством! Ибо если основная программа работает с использованием UART то при старте может и путаница возникнуть, бутлоадер будет ждать одного а получать другое, тратится время на проверки и проч. А так мы прямо "в железе" развязаны по старту бутлоадер/осн.программа.

Так вот, в том аппноте есть и программа и исходник бута... но программа у меня не стартанула, не вышло у меня загеристрировать в системе необходимые для её работы библиотеки. Тогда я открыл её исходник, удалил лишние, мешающие, моменты и пользовался ей - все работало. Но меня это почему-то не утроило. МК постоянно присылал запросы на новую строку (символ "?"), эхом отправлял байты обратно на ПК и проч. мелкие моменты. Поэтому решено было написать самому при этом так же подправить код самого бутлоадера. В итоге делюсь с Вами результатами. Программа на ПК написана на visual basic .net 2008, для работы потребуется .net framework (наверное версии 3.5 будет достаточно). Прилагаю исходник, exe'шник лежит в папке bin\debug\

Кто запускал хотя бы раз отпишитесь о работоспособности софта на вашем железе. Такие вещи мне, как разработчику, важно знать)
Остальная информация в самой программе на кнопочке "Инфо"

Спасибо wink
Прикрепления: M8bootloader.rar (100.7 Kb)




Сообщение отредактировал top - Суббота, 17.08.2013, 16:52
 
exersizzeДата: Понедельник, 19.08.2013, 19:32 | Сообщение # 2
Группа: Администраторы
Сообщений: 723

Статус: Offline
top, супер, сегодня вечером попробую. Ничего если заменю частоту на 12МГц? И еще вопрос BootSize ставить 128слов?

 
topДата: Понедельник, 19.08.2013, 21:14 | Сообщение # 3
Группа: Друзья
Сообщений: 146

Статус: Offline
Частоту какую хочешь, только бы со скоростью UART 19200 Бод согласовывалось с минимумом ошибок, впрочем здесь все как всегда wink  
Да, Bootsize 128 слов. Фьюзы BOOTSZ1 = 1,  BOOTSZ0 = 1,  Size = 128


 
KoSS_89Дата: Понедельник, 19.08.2013, 21:38 | Сообщение # 4
Группа: Проверенные
Сообщений: 53

Статус: Offline
У меня программа запустилась Windows XP 2010 SP-3 вот  только при открытии ругается InvalidArgument=Значение "0" недопустимо для "Selectedindex" Имя параметра: SelectedIndex.    Жму продолжить и прога запускается...

 
exersizzeДата: Понедельник, 19.08.2013, 22:48 | Сообщение # 5
Группа: Администраторы
Сообщений: 723

Статус: Offline
Пока не выходит. Бут после подачи питания ждет сброса микроконтроллера? Я сбрасываю вручную (замыкаю проводком ресет сразу после нажатия кнопки "Прошить"), может не успеваю?

Прикрепления: 5801370.png (261.1 Kb)


 
exersizzeДата: Понедельник, 19.08.2013, 22:50 | Сообщение # 6
Группа: Администраторы
Сообщений: 723

Статус: Offline
KoSS_89, у меня тоже ругается (Win7) но после "продолжения" запускается.

 
topДата: Понедельник, 19.08.2013, 23:24 | Сообщение # 7
Группа: Друзья
Сообщений: 146

Статус: Offline
Ребята, последовательность такая:

1. Открываем программу
2. Подключаем питание на схему, просто подключаем питание
3. Выбираем порт и подключаемся
4. Выбираем файл прошивк
5. Первый важный момент: вешаем ногу PC1 на землю
6. Делаем reset (нога PC1 по прежнему весит на земле)
7. В программе должно появится "Получен символ B, МК готов к прошивке"
8. Жмем кнопочку прошить HEX
9. При удачной прошивке в программе появится "Получен символ D, загрузка завершена"
10. Второй важный момент: чтобы прошитая программа запустилась вешаем PC1 на плюс питания (в куске кода, я пиведу его чуть ниже, видно что PC1 итак подтягивается к плюсу внутренним pull-up резиком. Но тем не менее у меня на макетке при длинных проводах куча наводок и шумов, приходилось насильно цеплять на плюс. Сейчас откинул провод от PC1 и простым ресетом сбрасываю МК, основная программа запускается стабильно. С длинным проводом на PC1 была неопределенность от раза к разу, стартовал то бут то основная программа.)
11. Делаем reset (нога PC1 так же по прежнему на плюсе)
12. PROFIT!

Надеюсь смысл в целом понятен:
Когда нога при старте на земле - режим прошивки
Когда нога подтянута к плюсу - режим запуска основной программы

В коде бутлоадера есть следующие строки, которые всецело объясняют то что я написал выше:
_chk_for_bootload: 'Check for bootload, this one uses hardware
cbi DDRC,1 'Clear the data direction bit for input
sbi PORTC,1 'Set the pull-up
sbic PINC,1 'Skip next instruction if pin is clear
jmp $0000 'Pin must be high, run normal code




Сообщение отредактировал top - Понедельник, 19.08.2013, 23:53
 
topДата: Понедельник, 19.08.2013, 23:32 | Сообщение # 8
Группа: Друзья
Сообщений: 146

Статус: Offline
Немного подправил код, скорее всего ошибка из-за автовыбора индекса списка портов.
Прикрепления: Mega8_uart_boot.rar (100.3 Kb)


 
exersizzeДата: Понедельник, 19.08.2013, 23:38 | Сообщение # 9
Группа: Администраторы
Сообщений: 723

Статус: Offline
biggrin
Прикрепления: 6891733.png (38.8 Kb)


 
exersizzeДата: Понедельник, 19.08.2013, 23:49 | Сообщение # 10
Группа: Администраторы
Сообщений: 723

Статус: Offline
да, ошибка при запуске программы пропала.

 
exersizzeДата: Понедельник, 19.08.2013, 23:54 | Сообщение # 11
Группа: Администраторы
Сообщений: 723

Статус: Offline
top, постоянно при сбросе приходит символ "255", портС.1 на земле

upd: выложи скомпилированную прошивку для мк которую зашивал сам. Перебросил тактирование от внутреннего RC 8МГц.


 
topДата: Вторник, 20.08.2013, 00:02 | Сообщение # 12
Группа: Друзья
Сообщений: 146

Статус: Offline
exersizze, это МК шлет при сбросе, когда PC1 на земле? Похоже на ошибки передачи по UART. Попробуй перезапустить программу. Если такая беда продолжится подцепись к своему COM порту на скорости 19200 через тот же терминал от Bray, и посбрасывай МК, должен возвращаться символ B (английская заглавная вторая буква алфавита)

PS я добавил немного инфы в сообщении #7, чтобы не вводить в заблуждения.


 
topДата: Вторник, 20.08.2013, 00:03 | Сообщение # 13
Группа: Друзья
Сообщений: 146

Статус: Offline
Вот КЕКС которым я прошивал. Прошил его сейчас себе на макетке, все работает)
Прикрепления: Mega8bootloader.hex (22.4 Kb)


 
exersizzeДата: Вторник, 20.08.2013, 00:04 | Сообщение # 14
Группа: Администраторы
Сообщений: 723

Статус: Offline
top, заработала! Перекомпилил на 8 МГц и усе пошло. Загруженная программа работает - мигает светодиодик.
Прикрепления: 7721597.png (31.5 Kb)


 
exersizzeДата: Вторник, 20.08.2013, 00:12 | Сообщение # 15
Группа: Администраторы
Сообщений: 723

Статус: Offline
Повторил фокус - все четко! Респект за проделанную работу!
значит не пошло именно из-за 12и мегагерцового кварца...


 
topДата: Вторник, 20.08.2013, 00:14 | Сообщение # 16
Группа: Друзья
Сообщений: 146

Статус: Offline
Значит на 8 Мегаперцах работает) Пожалуй стоит заняться тестированием сего чуда на разных частотах тактирования. 
Вот что еще хочу добавить, поистине смешная вещь: Теоретически моей программы на ПК даже и не надо, потому что прошить можно и через Брэевский терминал (там есть функция отправить файл). Вот сейчас проверил. Но не поперло, а все потому что МК не успевает обрабатывать принятое, вычислять контрольные суммы и писать во флэш, поэтому возвращает символы "#" - это означает ошибку вычисления контрольной суммы. У меня же в программе этого нет, лишь потому что выставлена задержка в 3 мс между отправкой каждого байта. 
Отсюда еще одно предположение что если уменьшить скорость передачи по UART то МК будет успевать укладываться в промежутки между принятием байтов. Займусь этими экспериментами)


 
exersizzeДата: Вторник, 20.08.2013, 00:23 | Сообщение # 17
Группа: Администраторы
Сообщений: 723

Статус: Offline
ну если сбавить скорость до 1200 или ниже думаю может получится  smile

 
topДата: Вторник, 20.08.2013, 00:27 | Сообщение # 18
Группа: Друзья
Сообщений: 146

Статус: Offline
exersizze, но шиииить будет "немного" медленнее) Я знаешь что еще заметил, в коде бутлоадера строка с выбором частоты кварца ЗАКОММЕНТИРОВАНА  wacko И вот и как это понимать? Или в данном случае МК инвариантен к объявлению частоты в коде? Похоже Ассемблер как танк - берёз вдоль дороги не замечает biggrin

 
exersizzeДата: Вторник, 20.08.2013, 00:30 | Сообщение # 19
Группа: Администраторы
Сообщений: 723

Статус: Offline
ага, будет строчить как печатная машинка символ за символом)) я у себя в коде расскоментировал строки $crystal и $baud (видно на первом скриншоте).  Может там в настройках самого компилятора уже все стоит как надо, а может и вправду ему пофиг.

 
topДата: Вторник, 20.08.2013, 00:32 | Сообщение # 20
Группа: Друзья
Сообщений: 146

Статус: Offline
exersizze, было бы здорово попробовать зашить ту прошивку что я скинул, но в Казаме выставить тактирование от 12 Мегулек happy Авось?

 
exersizzeДата: Вторник, 20.08.2013, 00:34 | Сообщение # 21
Группа: Администраторы
Сообщений: 723

Статус: Offline
щас сделаем)

 
exersizzeДата: Вторник, 20.08.2013, 00:45 | Сообщение # 22
Группа: Администраторы
Сообщений: 723

Статус: Offline
Прошил твоим файлом, подключил кварц, перепрошил фьюзы.. Не пошло, контроллер отправляет что угодно, но не "В".
Снова перепрошил фьюзы на 8 МГц, выдернул кварц (прошивку не трогал), перезагрузил контроллер и загрузчик заработал, так что получается к частоте привязан сильно.


 
topДата: Вторник, 20.08.2013, 00:48 | Сообщение # 23
Группа: Друзья
Сообщений: 146

Статус: Offline
exersizzecry Эх а было бы то как здорово) Ну ничего, свежая пища для ума) Будем разруливать почему такая привязка к частоте... Хотя при 12 МГц ошибка UART 0.16%, как и при 8 МГц. У меня есть кварц на 16 МГц, сейчас испытаю.

 
exersizzeДата: Вторник, 20.08.2013, 00:51 | Сообщение # 24
Группа: Администраторы
Сообщений: 723

Статус: Offline
вот и я думаю unsure кварц новый, с ним контроллер отлично работает (светодиодом мигает, в терминал данные шлет верные), процент ошибки не выше чем при 8МГц,  а загрузчик не хочет с ним работать..
но где-то собака зарыта, это не с проста))


 
topДата: Вторник, 20.08.2013, 00:59 | Сообщение # 25
Группа: Друзья
Сообщений: 146

Статус: Offline
exersizze, Да батенька, при 16 МегаГенрихГерцах шлет мусор: символы 241 250 и проч, явно не то)  И это еще не все, при тактировании от внутренних 4 МГц  тоже неадэкват, все кроме символа готовности "B".  Чует мое чутье, что где-то в закаулках этого ассемблерного кода спрятаны строки отвечающие за частоту тактирования... но с другой стороны это абсурдное предположение) 
Завтра в универе покажу код своему науч. руководителю - гуру Ассемблера) Может чего подскажет)


 
exersizzeДата: Вторник, 20.08.2013, 01:03 | Сообщение # 26
Группа: Администраторы
Сообщений: 723

Статус: Offline
ок, держи в курсе))))

 
topДата: Вторник, 20.08.2013, 19:58 | Сообщение # 27
Группа: Друзья
Сообщений: 146

Статус: Offline
Разобрался, все исправил wink
Проблемка то оказалась совсем простая, вот небольшое пояснение из книги "Евстифеев А.В. Микроконтроллеры AVR семейства Mega 2007"



Как видно значение регистра UBRR зависит как от скорости так и от частоты. Нас интересует самая первая формула, её я и использовал. 

Добавил в программу возможность рассчета установочных констант (а именно значения регистра UBRR, разбитого на два байта, старший и младший). В исходнике просто прописываем новые, нужные нам значения, компилируем и шьем в МК.

Так же провелил предположение о возможности прошить через Terminal by Bray. Все верно, можно) Я шил на скорости 1200 Бод при частоте 8 МГц. Аж обидно становится, зачем сам програмку писал? cry

Чтобы прошить через терминал, следуем инструкции:
1. Питание на схему, коннектимся в терминале к нашему порту
2. Ногу PC1 на землю, ресет
3. В терминале наблюдаем символ "B"
4. Жмем кнопку "Send file"
5. Выбираем файл прошивки
6. Не шевелимся и терпеливо ждем появления в терминале символа "D"
7. PC1 на плюс (или в "воздух"), ресет
8. PROFIT
Прикрепления: 5462312.jpg (39.9 Kb) · M8boot_VER2.rar (110.8 Kb)


 
exersizzeДата: Среда, 21.08.2013, 23:13 | Сообщение # 28
Группа: Администраторы
Сообщений: 723

Статус: Offline
значит для  скорости 1200 бод нужно прописать Ubrrh_value = 1  и Ubrrl_value = 160, если правильно посчитал?
сейчас попробую тоже брэем прошить)


 
exersizzeДата: Среда, 21.08.2013, 23:42 | Сообщение # 29
Группа: Администраторы
Сообщений: 723

Статус: Offline
ага, получилось прошить через терминал! happy тестовый хекс занимает всего 3% а загружается на скорости 1200 секунд 10 biggrin но работает же!

 
topДата: Четверг, 22.08.2013, 02:02 | Сообщение # 30
Группа: Друзья
Сообщений: 146

Статус: Offline
exersizze, В программе считал или по формулам сам? Программу я поверял, считает правильно)
Вот вроде и разобрались с ним, пойдет под лозунгом "Бутлоадер в массы!". Не зря ведь его называют generic  biggrin
Логическим продолжением считаю написание бута для других популярных МК, например... ?


 
exersizzeДата: Четверг, 22.08.2013, 08:42 | Сообщение # 31
Группа: Администраторы
Сообщений: 723

Статус: Offline
Считал по формуле выше, только сейчас увидел в программе новую фишку)
Цитата (top)
Логическим продолжением считаю написание бута для других популярных МК, например... ?
Ну ходовыми контроллерами являются tiny2313, mega8/16/32/64/128


 
radanДата: Понедельник, 17.02.2014, 11:01 | Сообщение # 32
Группа: Свой человек
Сообщений: 16

Статус: Offline
Top, есть успехи для других контроллеров, или "померла так померла"?

 
topДата: Четверг, 20.02.2014, 16:07 | Сообщение # 33
Группа: Друзья
Сообщений: 146

Статус: Offline
radan, как раз назрела необходимость бута для 32й меги) как только придет посылка с заказанными МК, примусь за модернизацию. И конечно же отпишусь)

 
RA3MAHДата: Среда, 20.12.2017, 14:59 | Сообщение # 34
Группа: Пользователи
Сообщений: 1

Статус: Offline
Добрый день. Очень хороший бутлоадер, на Меге8 работает отлично. Но вот не могу перекомпилировать для Меги16. Адреса вроде изменил, в протеусе успешно входит в бут режим и принимает прошивку, но потом программа не стартует, подскажите, пожалуйста, что еще исправить?
Прикрепления: Mega16bootloade.bas (16.3 Kb)


 
Форум » форумы » Готовые проекты » Mega8 bootloader (128 word size) & soft (Бутлоадер для M8 и программа на ПК для загрузки прошивки)
  • Страница 1 из 1
  • 1
Поиск: