| 
				
				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 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: 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 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | Пока не выходит. Бут после подачи питания ждет сброса микроконтроллера? Я сбрасываю вручную (замыкаю проводком ресет сразу после нажатия кнопки "Прошить"), может не успеваю? 
    
 
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Понедельник, 19.08.2013, 22:50 | Сообщение # 6 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: 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 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 |      
 
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Понедельник, 19.08.2013, 23:49 | Сообщение # 10 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | да, ошибка при запуске программы пропала.
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Понедельник, 19.08.2013, 23:54 | Сообщение # 11 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: 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 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | top, заработала! Перекомпилил на 8 МГц и усе пошло. Загруженная программа работает - мигает светодиодик.    
 
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Вторник, 20.08.2013, 00:12 | Сообщение # 15 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | Повторил фокус - все четко! Респект за проделанную работу!   значит не пошло именно из-за 12и мегагерцового кварца...
 
  
 |  
 
 |   | 
  |    | 
| top | Дата: Вторник, 20.08.2013, 00:14 | Сообщение # 16 |  
 
Группа: Друзья 
 
Сообщений: 146 
 
 
Статус: Offline 
 
 | Значит на 8 Мегаперцах работает) Пожалуй стоит заняться тестированием сего чуда на разных частотах тактирования.    Вот что еще хочу добавить, поистине смешная вещь: Теоретически моей программы на ПК даже и не надо, потому что прошить можно и через Брэевский терминал (там есть функция отправить файл). Вот сейчас проверил. Но не поперло, а все потому что МК не успевает обрабатывать принятое, вычислять контрольные суммы и писать во флэш, поэтому возвращает символы "#" - это означает ошибку вычисления контрольной суммы. У меня же в программе этого нет, лишь потому что выставлена задержка в 3 мс между отправкой каждого байта.    Отсюда еще одно предположение что если уменьшить скорость передачи по UART то МК будет успевать укладываться в промежутки между принятием байтов. Займусь этими экспериментами)
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Вторник, 20.08.2013, 00:23 | Сообщение # 17 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | ну если сбавить скорость до 1200 или ниже думаю может получится   
 
  
 |  
 
 |   | 
  |    | 
| top | Дата: Вторник, 20.08.2013, 00:27 | Сообщение # 18 |  
 
Группа: Друзья 
 
Сообщений: 146 
 
 
Статус: Offline 
 
 | exersizze, но шиииить будет "немного" медленнее) Я знаешь что еще заметил, в коде бутлоадера строка с выбором частоты кварца ЗАКОММЕНТИРОВАНА    И вот и как это понимать? Или в данном случае МК инвариантен к объявлению частоты в коде? Похоже Ассемблер как танк - берёз вдоль дороги не замечает  
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Вторник, 20.08.2013, 00:30 | Сообщение # 19 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | ага, будет строчить как печатная машинка символ за символом)) я у себя в коде расскоментировал строки $crystal и $baud (видно на первом скриншоте).  Может там в настройках самого компилятора уже все стоит как надо, а может и вправду ему пофиг.
 
  
 |  
 
 |   | 
  |    | 
| top | Дата: Вторник, 20.08.2013, 00:32 | Сообщение # 20 |  
 
Группа: Друзья 
 
Сообщений: 146 
 
 
Статус: Offline 
 
 | exersizze, было бы здорово попробовать зашить ту прошивку что я скинул, но в Казаме выставить тактирование от 12 Мегулек   Авось?
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Вторник, 20.08.2013, 00:34 | Сообщение # 21 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | щас сделаем)
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Вторник, 20.08.2013, 00:45 | Сообщение # 22 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: 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 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | вот и я думаю   кварц новый, с ним контроллер отлично работает (светодиодом мигает, в терминал данные шлет верные), процент ошибки не выше чем при 8МГц,  а загрузчик не хочет с ним работать..   но где-то собака зарыта, это не с проста))
 
  
 |  
 
 |   | 
  |    | 
| top | Дата: Вторник, 20.08.2013, 00:59 | Сообщение # 25 |  
 
Группа: Друзья 
 
Сообщений: 146 
 
 
Статус: Offline 
 
 | exersizze, Да батенька, при 16 МегаГенрихГерцах шлет мусор: символы 241 250 и проч, явно не то)  И это еще не все, при тактировании от внутренних 4 МГц  тоже неадэкват, все кроме символа готовности "B".  Чует мое чутье, что где-то в закаулках этого ассемблерного кода спрятаны строки отвечающие за частоту тактирования... но с другой стороны это абсурдное предположение)    Завтра в универе покажу код своему науч. руководителю - гуру Ассемблера) Может чего подскажет)
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Вторник, 20.08.2013, 01:03 | Сообщение # 26 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: 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 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | значит для  скорости 1200 бод нужно прописать Ubrrh_value = 1  и Ubrrl_value = 160, если правильно посчитал?   сейчас попробую тоже брэем прошить)
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Среда, 21.08.2013, 23:42 | Сообщение # 29 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: Offline 
 
 | ага, получилось прошить через терминал!   тестовый хекс занимает всего 3% а загружается на скорости 1200 секунд 10   но работает же!
 
  
 |  
 
 |   | 
  |    | 
| top | Дата: Четверг, 22.08.2013, 02:02 | Сообщение # 30 |  
 
Группа: Друзья 
 
Сообщений: 146 
 
 
Статус: Offline 
 
 | exersizze, В программе считал или по формулам сам? Программу я поверял, считает правильно)   Вот вроде и разобрались с ним, пойдет под лозунгом "Бутлоадер в массы!". Не зря ведь его называют generic      Логическим продолжением считаю написание бута для других популярных МК, например... ?
 
  
 |  
 
 |   | 
  |    | 
| exersizze | Дата: Четверг, 22.08.2013, 08:42 | Сообщение # 31 |  
 
Группа: Администраторы 
 
Сообщений: 720 
 
 
Статус: 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. Адреса вроде изменил, в протеусе успешно входит в бут режим и принимает прошивку, но потом программа не стартует, подскажите, пожалуйста, что еще исправить?
 
 
  
 |  
 
 |   | 
  |    |