Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 05.12.2011, 12:52  
svad0
Прописка
 
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
svad0 на пути к лучшему
По умолчанию Бутлоадер Attiny85, как?

Для контроллера attiny85 нужно написать бутлоадер по spi. Но есть небольшой нюанс: у тини нет фьюзов BOOTSZ и BOOTRST,как у меги. Непонятен механизм старта бутлоадера в этом случае.
Попробовал в начало flash-памяти записать основную программу, а в конец записать бутлоадер. Т.е сначала грузится основная программа с адреса 0, потом мастер контроллер выдает команду по spi и происходит старт бутлоадера командой #asm ("rjmp 0x0C00"); , где 0x0C00 - начальный адрес области памяти куда прошит бутлоадер. Не работает.
Прошивал кодэвижином Tools-›Chip Programmer, где указывал стартовый и конечный адрес flash.
Если кто писал бутлоадер для тини, я вообще правильно делаю?
Реклама:
svad0 вне форума  
Сказали "Спасибо" svad0
warel (28.06.2019)
Непрочитано 05.12.2011, 17:32  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 4,807
Сказал спасибо: 1,586
Сказали Спасибо 1,902 раз(а) в 1,323 сообщении(ях)
ForcePoint на пути к лучшему
Лампочка Re: Бутлоадер Attiny85, как?

В tiny44 делал на ассемблере (по мотивам AVR910 - через программный UART).
Для обеспечения "неубиваемости" загрузчика - поставил его в начале памяти. Таблица прерываний заполнена rjmp на ближайший блок со стартовым адресом кратным странице записи через SPM, лежащим за бутлодером.
Прикладная программа, соответственно, имеет .org не от 0, а от этого-же адреса.
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
warel (28.06.2019)
Непрочитано 05.12.2011, 17:41  
svad0
Прописка
 
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
svad0 на пути к лучшему
По умолчанию Re: Бутлоадер Attiny85, как?

Цитата:
Для обеспечения "неубиваемости" загрузчика - поставил его в начале памяти.
А если в конце сделать будет "убиваемый"?
А как Вы шили основную программу? Если она начинается с какого-то сдвига, как этот сдвиг учитывается? Он указывается в компиляторе?

Проблема в том, что я использую CodeVision, а он для attiny85 по определению шьет программу только с 0-ого адреса. Записать программу в с другого адреса пока мне не представляется возможным. Перелазил все настройки CodeVision и AVRStudio, ничего похожего на указание сдвига не нашел.
svad0 вне форума  
Сказали "Спасибо" svad0
warel (28.06.2019)
Непрочитано 05.12.2011, 19:44  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,046
Сказал спасибо: 60
Сказали Спасибо 3,944 раз(а) в 2,306 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Бутлоадер Attiny85, как?

Сообщение от ForcePoint Посмотреть сообщение
Для обеспечения "неубиваемости" загрузчика - поставил его в начале памяти.
Для программы серьезней мигания диодом прерывания обязательны, поэтому бутлодырь можно ставить Только в конец памяти. В самом начале размещены жизненно важные для бутлодыря прерывания, эти ячейки бутлодырем никогда не прошиваются. С ближайшего круглого адреса (0100 например - для удобства) размещены остальные прерывания и код основной программы, которые могут перепрошиваться. Программирую в АлгоритмБилдере, он дает полную свободу - любой код можно размещать по любому адресу
niXto вне форума  
Сказали "Спасибо" niXto
warel (28.06.2019)
Непрочитано 05.12.2011, 22:12  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 4,807
Сказал спасибо: 1,586
Сказали Спасибо 1,902 раз(а) в 1,323 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" ForcePoint
warel (28.06.2019)
Непрочитано 06.12.2011, 09:31  
svad0
Прописка
 
Регистрация: 14.11.2007
Сообщений: 150
Сказал спасибо: 3
Сказали Спасибо 47 раз(а) в 43 сообщении(ях)
svad0 на пути к лучшему
По умолчанию Re: Бутлоадер Attiny85, как?

Вопрос такой. Если у меня в основной программе и бутлоадере есть прерывания. То где конкретно будет располагаться их обработчик?
Пока у меня 2 варианта:
1) Располагаются ниже соответствующего стартового адреса. Т.е если основная программа имеет стартовый адрес Адр1, а бутлоадер Адр2, то прерывания основной программы будут располагаться меду Адр1 и Адр2, а прерывания бутлоадера ниже Адр2.
2) Прерывания программы и бутлоадера всегда располагаются в одной области памяти и происходит перетирание при прошивке.
Как правильно?

Решил проблему размещения бутлоадера в конец флэша создав в codevision проект для Atmega8 и в типе приложения выбрал bootloader-1024, потом просто заменил сишные файлы. Теперь компилится правильно, бутлоадер шьется с адреса 0хС00.

Вообще возможно прыгать из основной программы в какую-нибудь область памяти? Почему у атмеля во всех примерах всегда должен обязательно грузиться первым бутлоадер который проверяет какую-то ножку. Не легче ли сделать переход на бутлоадер из пользовательской программы по событию?
svad0 вне форума  
Сказали "Спасибо" svad0
warel (28.06.2019)
Непрочитано 06.12.2011, 09:47  
niXto
Почётный гражданин KAZUS.RU
 
Аватар для niXto
 
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,046
Сказал спасибо: 60
Сказали Спасибо 3,944 раз(а) в 2,306 сообщении(ях)
niXto на пути к лучшему
По умолчанию Re: Бутлоадер Attiny85, как?

Сообщение от svad0 Посмотреть сообщение
Не легче ли сделать переход на бутлоадер из пользовательской программы по событию?
Конечно легче, а если почитать даташит то вообще все элементарно
Бит ИВСЕЛ

На АСМе можно все, делайте вставку
niXto вне форума  
Сказали "Спасибо" niXto
warel (28.06.2019)
Непрочитано 06.12.2011, 10:44  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 4,807
Сказал спасибо: 1,586
Сказали Спасибо 1,902 раз(а) в 1,323 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Бутлоадер Attiny85, как?

Сообщение от niXto Посмотреть сообщение
Конечно легче, а если почитать даташит то вообще все элементарно
Бит ИВСЕЛ
В tiny85 всё намного проще и такого бита нету...
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
warel (28.06.2019)
Непрочитано 06.12.2011, 10:50  
ForcePoint
Почётный гражданин KAZUS.RU
 
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 4,807
Сказал спасибо: 1,586
Сказали Спасибо 1,902 раз(а) в 1,323 сообщении(ях)
ForcePoint на пути к лучшему
По умолчанию Re: Бутлоадер Attiny85, как?

Сообщение от svad0 Посмотреть сообщение
Вопрос такой. Если у меня в основной программе и бутлоадере есть прерывания. ....
проект для Atmega8 ....
Так мы всё ещё о tiny85 говорим или уже о mega8 ?
Сообщение от svad0 Посмотреть сообщение
Вообще возможно прыгать из основной программы в какую-нибудь область памяти? Почему у атмеля во всех примерах всегда должен обязательно грузиться первым бутлоадер который проверяет какую-то ножку. Не легче ли сделать переход на бутлоадер из пользовательской программы по событию?
Можно прыгать как хочется. Можно делать загрузчик, вызываемый только из приложения.
Смотря какая задача ставится. Я себе ставил задачу - "насколько возможно неубиваемый загрузчик для tiny".
ForcePoint вне форума  
Сказали "Спасибо" ForcePoint
warel (28.06.2019)
Непрочитано 06.12.2011, 11:03  
_guardianangel
Почётный гражданин KAZUS.RU
 
Регистрация: 01.04.2009
Адрес: Рязань
Сообщений: 1,302
Сказал спасибо: 22
Сказали Спасибо 701 раз(а) в 378 сообщении(ях)
_guardianangel на пути к лучшему
По умолчанию 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 вне форума  
Сказали "Спасибо" _guardianangel
warel (28.06.2019)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 23:32.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd. Перевод: zCarot