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\
Кто запускал хотя бы раз отпишитесь о работоспособности софта на вашем железе. Такие вещи мне, как разработчику, важно знать) Остальная информация в самой программе на кнопочке "Инфо"
Спасибо
Сообщение отредактировал 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 Бод согласовывалось с минимумом ошибок, впрочем здесь все как всегда Да, 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
| Пока не выходит. Бут после подачи питания ждет сброса микроконтроллера? Я сбрасываю вручную (замыкаю проводком ресет сразу после нажатия кнопки "Прошить"), может не успеваю?
|
|
| |
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
| Немного подправил код, скорее всего ошибка из-за автовыбора индекса списка портов.
|
|
| |
exersizze | Дата: Понедельник, 19.08.2013, 23:38 | Сообщение # 9 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
|
|
|
| |
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
| Вот КЕКС которым я прошивал. Прошил его сейчас себе на макетке, все работает)
|
|
| |
exersizze | Дата: Вторник, 20.08.2013, 00:04 | Сообщение # 14 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| top, заработала! Перекомпилил на 8 МГц и усе пошло. Загруженная программа работает - мигает светодиодик.
|
|
| |
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 или ниже думаю может получится
|
|
| |
top | Дата: Вторник, 20.08.2013, 00:27 | Сообщение # 18 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| exersizze, но шиииить будет "немного" медленнее) Я знаешь что еще заметил, в коде бутлоадера строка с выбором частоты кварца ЗАКОММЕНТИРОВАНА И вот и как это понимать? Или в данном случае МК инвариантен к объявлению частоты в коде? Похоже Ассемблер как танк - берёз вдоль дороги не замечает
|
|
| |
exersizze | Дата: Вторник, 20.08.2013, 00:30 | Сообщение # 19 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| ага, будет строчить как печатная машинка символ за символом)) я у себя в коде расскоментировал строки $crystal и $baud (видно на первом скриншоте). Может там в настройках самого компилятора уже все стоит как надо, а может и вправду ему пофиг.
|
|
| |
top | Дата: Вторник, 20.08.2013, 00:32 | Сообщение # 20 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| exersizze, было бы здорово попробовать зашить ту прошивку что я скинул, но в Казаме выставить тактирование от 12 Мегулек Авось?
|
|
| |
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
| exersizze, Эх а было бы то как здорово) Ну ничего, свежая пища для ума) Будем разруливать почему такая привязка к частоте... Хотя при 12 МГц ошибка UART 0.16%, как и при 8 МГц. У меня есть кварц на 16 МГц, сейчас испытаю.
|
|
| |
exersizze | Дата: Вторник, 20.08.2013, 00:51 | Сообщение # 24 |
Группа: Администраторы
Сообщений: 723
Статус: Offline
| вот и я думаю кварц новый, с ним контроллер отлично работает (светодиодом мигает, в терминал данные шлет верные), процент ошибки не выше чем при 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
| Разобрался, все исправил Проблемка то оказалась совсем простая, вот небольшое пояснение из книги "Евстифеев А.В. Микроконтроллеры AVR семейства Mega 2007"
Как видно значение регистра UBRR зависит как от скорости так и от частоты. Нас интересует самая первая формула, её я и использовал.
Добавил в программу возможность рассчета установочных констант (а именно значения регистра UBRR, разбитого на два байта, старший и младший). В исходнике просто прописываем новые, нужные нам значения, компилируем и шьем в МК.
Так же провелил предположение о возможности прошить через Terminal by Bray. Все верно, можно) Я шил на скорости 1200 Бод при частоте 8 МГц. Аж обидно становится, зачем сам програмку писал?
Чтобы прошить через терминал, следуем инструкции: 1. Питание на схему, коннектимся в терминале к нашему порту 2. Ногу PC1 на землю, ресет 3. В терминале наблюдаем символ "B" 4. Жмем кнопку "Send file" 5. Выбираем файл прошивки 6. Не шевелимся и терпеливо ждем появления в терминале символа "D" 7. PC1 на плюс (или в "воздух"), ресет 8. PROFIT
|
|
| |
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
| ага, получилось прошить через терминал! тестовый хекс занимает всего 3% а загружается на скорости 1200 секунд 10 но работает же!
|
|
| |
top | Дата: Четверг, 22.08.2013, 02:02 | Сообщение # 30 |
Группа: Друзья
Сообщений: 146
Статус: Offline
| exersizze, В программе считал или по формулам сам? Программу я поверял, считает правильно) Вот вроде и разобрались с ним, пойдет под лозунгом "Бутлоадер в массы!". Не зря ведь его называют generic Логическим продолжением считаю написание бута для других популярных МК, например... ?
|
|
| |
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. Адреса вроде изменил, в протеусе успешно входит в бут режим и принимает прошивку, но потом программа не стартует, подскажите, пожалуйста, что еще исправить?
|
|
| |