Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
05.12.2011, 12:52
|
|
Прописка
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
|
Бутлоадер Attiny85, как?
Для контроллера attiny85 нужно написать бутлоадер по spi. Но есть небольшой нюанс: у тини нет фьюзов BOOTSZ и BOOTRST,как у меги. Непонятен механизм старта бутлоадера в этом случае.
Попробовал в начало flash-памяти записать основную программу, а в конец записать бутлоадер. Т.е сначала грузится основная программа с адреса 0, потом мастер контроллер выдает команду по spi и происходит старт бутлоадера командой #asm ("rjmp 0x0C00"); , где 0x0C00 - начальный адрес области памяти куда прошит бутлоадер. Не работает.
Прошивал кодэвижином Tools-›Chip Programmer, где указывал стартовый и конечный адрес flash.
Если кто писал бутлоадер для тини, я вообще правильно делаю?
|
|
|
|
05.12.2011, 17:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
В tiny44 делал на ассемблере (по мотивам AVR910 - через программный UART).
Для обеспечения "неубиваемости" загрузчика - поставил его в начале памяти. Таблица прерываний заполнена rjmp на ближайший блок со стартовым адресом кратным странице записи через SPM, лежащим за бутлодером.
Прикладная программа, соответственно, имеет .org не от 0, а от этого-же адреса.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
05.12.2011, 17:41
|
|
Прописка
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Цитата:
|
Для обеспечения "неубиваемости" загрузчика - поставил его в начале памяти.
|
А если в конце сделать будет "убиваемый"?
А как Вы шили основную программу? Если она начинается с какого-то сдвига, как этот сдвиг учитывается? Он указывается в компиляторе?
Проблема в том, что я использую CodeVision, а он для attiny85 по определению шьет программу только с 0-ого адреса. Записать программу в с другого адреса пока мне не представляется возможным. Перелазил все настройки CodeVision и AVRStudio, ничего похожего на указание сдвига не нашел.
|
|
|
|
05.12.2011, 19:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Сообщение от ForcePoint
|
Для обеспечения "неубиваемости" загрузчика - поставил его в начале памяти.
|
Для программы серьезней мигания диодом прерывания обязательны, поэтому бутлодырь можно ставить Только в конец памяти. В самом начале размещены жизненно важные для бутлодыря прерывания, эти ячейки бутлодырем никогда не прошиваются. С ближайшего круглого адреса (0100 например - для удобства) размещены остальные прерывания и код основной программы, которые могут перепрошиваться. Программирую в АлгоритмБилдере, он дает полную свободу - любой код можно размещать по любому адресу
|
|
|
|
05.12.2011, 22:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Цитата:
|
А если в конце сделать будет "убиваемый"?
А как Вы шили основную программу? Если она начинается с какого-то сдвига, как этот сдвиг учитывается? Он указывается в компиляторе?
|
Зашили ошибочную программу, которая не передаёт управление загрузчику = загрузчик похерен.
Это был ассемблер, где всё решается банальным .org'ом. Насчёт прокрутить такое с Сомпилятором - пока маны не раскуривал.
Цитата:
|
Для программы серьезней мигания диодом прерывания обязательны, поэтому бутлодырь можно ставить Только в конец памяти.
|
Вот такой примерно загрузчик "прибит гвоздями" к началу памяти программ и заботится только об игнорировании попыток записи в себя (несколько первых страниц) без утомительных вычислений "а можно-ли переписать этот вектор прерывания", "а можно-ли этот фрагмент памяти переписать".
Код:
|
.org 0h
rjmp bootloader
rjmp app_start+1
...
rjmp app_start+NN
bootloader:
...
...
rjmp app_start
...
...
end_bootloader:
app_start = (end_bootloader % PAGESIZE)+1)*PAGESIZE |
Благодаря конструкциям app_start+ сразу за ним имеется "копия" таблицы прерываний, выровненная по границе страницы записи (за исключением прерываний, занятых загрузчиком).
Прикладная программа (на ассемблере) начинается не с .org 0h, а с .org app_start (для прикладной программы app_start - константа) и работает ничего не зная о загрузчике. Если интересно - принимает данные с АЦП на максимальной скорости, делает скользяцее среднее по произвоьному числу (что-то вроде от 1 до восьми) выборок, складирует данные в кольцевой буфер, занимающий всё доступное ОЗУ (за вычетом нескольких переменных и произвольного размера данные скользящего среднего) и из буфера через UART (тот, что в загрузчике рализован программно - константами для приложения являются адреса входа в подпрограммы приёма и передачи и регистр с данными для передачи или приёма) передаёт на ПК. 2 такта на лишний RJMP я посчитал приемлемой платой за "неубиваемость" загрузчика.
P.S. Кстати, надуманный мною вариант а можно-ли переписать это вектор прерывания вообще невозможен, т.к. все вектора попадают в одну страницу ПЗУ.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
06.12.2011, 09:31
|
|
Прописка
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Вопрос такой. Если у меня в основной программе и бутлоадере есть прерывания. То где конкретно будет располагаться их обработчик?
Пока у меня 2 варианта:
1) Располагаются ниже соответствующего стартового адреса. Т.е если основная программа имеет стартовый адрес Адр1, а бутлоадер Адр2, то прерывания основной программы будут располагаться меду Адр1 и Адр2, а прерывания бутлоадера ниже Адр2.
2) Прерывания программы и бутлоадера всегда располагаются в одной области памяти и происходит перетирание при прошивке.
Как правильно?
Решил проблему размещения бутлоадера в конец флэша создав в codevision проект для Atmega8 и в типе приложения выбрал bootloader-1024, потом просто заменил сишные файлы. Теперь компилится правильно, бутлоадер шьется с адреса 0хС00.
Вообще возможно прыгать из основной программы в какую-нибудь область памяти? Почему у атмеля во всех примерах всегда должен обязательно грузиться первым бутлоадер который проверяет какую-то ножку. Не легче ли сделать переход на бутлоадер из пользовательской программы по событию?
|
|
|
|
06.12.2011, 09:47
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Сообщение от svad0
|
Не легче ли сделать переход на бутлоадер из пользовательской программы по событию?
|
Конечно легче, а если почитать даташит то вообще все элементарно
Бит ИВСЕЛ
На АСМе можно все, делайте вставку
|
|
|
|
06.12.2011, 10:44
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Сообщение от niXto
|
Конечно легче, а если почитать даташит то вообще все элементарно
Бит ИВСЕЛ
|
В tiny85 всё намного проще и такого бита нету...
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
06.12.2011, 10:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,053
Сказал спасибо: 3,042
Сказали Спасибо 3,212 раз(а) в 2,182 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
Сообщение от svad0
|
Вопрос такой. Если у меня в основной программе и бутлоадере есть прерывания. ....
проект для Atmega8 ....
|
Так мы всё ещё о tiny85 говорим или уже о mega8 ?
Сообщение от svad0
|
Вообще возможно прыгать из основной программы в какую-нибудь область памяти? Почему у атмеля во всех примерах всегда должен обязательно грузиться первым бутлоадер который проверяет какую-то ножку. Не легче ли сделать переход на бутлоадер из пользовательской программы по событию?
|
Можно прыгать как хочется. Можно делать загрузчик, вызываемый только из приложения.
Смотря какая задача ставится. Я себе ставил задачу - " насколько возможно неубиваемый загрузчик для tiny".
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
06.12.2011, 11:03
|
|
Почётный гражданин KAZUS.RU
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,140
Сказал спасибо: 21
Сказали Спасибо 635 раз(а) в 344 сообщении(ях)
|
Re: Бутлоадер Attiny85, как?
По CV ничего не скажу, не понравился. А вот в gcc довольно просто разместить программу по определённому адресу - достаточно создать свой ld script на базе оригинального с секцией бутлодуря и подсунуть его линкеру через опцию -T. В тексте программы бутлодырю явно указывается секция для размещения. К примеру
Код:
|
void bootloader(void) __attribute__ ((section (".bootloader"))) |
Тут еще посмотрите http://forum.easyelectronics.ru/view...php?f=4&t=8060
Последний раз редактировалось _guardianangel; 06.12.2011 в 11:07.
|
|
|
Сказали "Спасибо" _guardianangel
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
встроенный температурный датчик в ATtiny85
|
torjok |
Микроконтроллеры, АЦП, память и т.д |
2 |
09.09.2011 12:27 |
Бутлоадер в стиле "Спектрума"
|
MasterMushi |
Микроконтроллеры, АЦП, память и т.д |
66 |
28.01.2011 13:45 |
Бутлоадер
|
Bf4 |
Микроконтроллеры, АЦП, память и т.д |
5 |
17.12.2010 20:12 |
АЦП на входе RESET Attiny85
|
ESWANT |
Микроконтроллеры, АЦП, память и т.д |
2 |
13.07.2010 14:05 |
Как остановить мк? Как сделать паузу?
|
skllks |
Микроконтроллеры, АЦП, память и т.д |
8 |
27.12.2008 17:27 |
Часовой пояс GMT +4, время: 10:40.
|
|