Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » At328P + NRF24 + Bootloader Under 24 or 93 series EEPROM


At328P + NRF24 + Bootloader Under 24 or 93 series EEPROM

Сообщений 1 страница 17 из 17

1

Собственно есть ли возможность ОБНОВИТЬ прошивку камня посредством ВНЕШНЕЙ EEPROM не важно какой серии... 24 или 93.
Суть в том, что чип NRF24 принимает или пепедаёт данные максимум по 32 байта, т.е. за раз никак не получится передать всю прошивку.
Идея такова: собираем прошивку во ВНЕШНЕЙ EEPROM, сверяем контрольки и т.д. И... по волшебной команде через радио-эфир обновляем прошку камня.
Возможно ли ЭТО? Если да, то КАК???

0

2

На самом деле, подобная тема уже на раз рассматривалась на форуме.
Варианта я вижу два:

1. (обычный, часто используемый) МК который должен обновится, переходит в режим самообновления, путем принятия данных через NRF24, запись их в "ВНЕШНЕЙ EEPROM", если всё прошло успешно, то переходит на выполнение кода в области "загрузчика" и от туда начинает сам себе перепрошивать из "ВНЕШНЕЙ EEPROM".
2. собираем микро внешний программатор на маленьком МК (скажем на ATtiny), который будет выполнять все действия программатора, но по воздуху, причем схему можно сделать независимую (для надежности), в итоге "At328P" будет шить внешний программатор по ISP.

Минусы вариантов:

1. трата памяти программ под бутлоадер, тонкая настройка конфигурации, витиеватый алгоритм работы;
2. надо разбираться как шьют через ISP.

0

3

Думаю что вместо EEPROM лучше использовать Сегнетоэлектрическая оперативная память

0

4

НЕее, всё не совсем так. Пример с NRF24 приведён не случайно, возможно он не совсем корректен. Тогда я приведу пример, сравнив свой девайс со спутниковым ресивером. Т.е. ресивер выполняет свои ПРЯМЫЕ функции - Вы смотрите телевизор ничего не подозревая. В это время ресивер собирает из эфира прошивку, например как кирпичный дом, кирпичик за кирпичиком. Как только вся прошивка собрана из ВСЕХ кусочков и проверена на целостность - ресивер предложит Вам обновить её. Как-то так.

В моём случае девайс представляет из себя репитер-маршрутизатор, который стоит на крыше. Он залит эбоксидкой, можно в воду опустить - ничего не будет. Питание скудноватое, аккум. + солнечная панель. Ему нужно выполнять свои функции, т.е. принимать-передавать пакеты данных. Прошивка занимает примерно 84%, так пишет баском при компиляции. Бутлоадер есть в камне, он баскомовский. Возможно его придётся переделать, т.к. кнопку Reset нажимать некому )))

СОБСТВЕННО и вопрос:  32768/32=1024 пакета это максимум. Принимаем не спешно эти пакеты, проверяем на целостность и записываем во ВНЕШНИЙ EEPROM!  Именно не спешно, пусть хоть 20 минут принимаются эти 32 килобайта. Далее через вачдог аппаратно сбрасываем процессор и... вот здесь затык... (((  Вот я и спрашиваю, ВОЗМОЖНО ли обновить прошивку из ВНЕШНЕЙ памяти, похеру какой, хоть нейронной? Есть варианты или нет???

0

5

-NMi- написал(а):

Далее через вачдог аппаратно сбрасываем процессор и... вот здесь затык... (((  Вот я и спрашиваю, ВОЗМОЖНО ли обновить прошивку из ВНЕШНЕЙ памяти, похеру какой, хоть нейронной? Есть варианты или нет???

Есть. Это стандартная логика прошивка МК через бутлоадер. Как вы там организуете считывание из внешней памяти кода и прошивание его в МК - это дело ваше.
Или вы конкретно код спрашиваете?

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

0

6

Конкретно код не нужен, сам смогу.

Т.е. если после Reset-а адрес счётчика команд находится в области бутлоадера - то можно ПЕРЕЗАПИСАТЬ область от 0000h до области начала бутлоадера? Так? Я верно понимаю?

И второе... допустим первое условие выполнилось... т.е. я тупо СЧИТЫВАЮ один байт ИЗ внешней памяти и записываю его в память МК? Так или нет?

И если второе условие тоже выполняется... тогда третье условие: выставляем флаг разрешения прошивки МК в ЕГО ВНУТРЕННЕМ EEPROM-е. При сбросе МК переходим сначала к коду бутлоадера и проверяем наличие/отсутствие данного флага. При отсутствии возвращаем управление в основную программу, при наличии тупо читаем-пишем затем Reset ? Так получается???

0

7

-NMi- написал(а):

Далее через вачдог аппаратно сбрасываем процессор

Можно с помощью Goto перейти в загрузчик без перезапуска МК.

0

8

Иными словами - если я каким-либо способом перейду в область бутлоадера ->>> у меня будет возможность записать/переписать область с 0 и до начала области бутлоадера? Сам бутлоадер сам себя испортить/стереть/переписать как я понял не может? Аппаратно ресетить МК не нужно? можно GoTo 0000h ?

0

9

Так, с работой бутлоадера немного разобрался. Много вопросов практически понятно. На самом деле бутлоадеру ПОФИГУ, откуда брать данные, хоть с порта, хоть с И2Ц илс SPI... пофиг. Вот собственно и вопрос - есть пример на ГОЛОМ ассемблере для чтения внешнего EEPROM, чтобы не использовать СТАНДАРТНЫЕ библиотеки баскома.

Отредактировано -NMi- (2016-06-03 15:52:44)

0

10

А что баском генерит такой большой код, что он не лезет в бутлоадер?

0

11

Нет конечно. Просто попробуйте на рабочем девайсе отключить хоть один проводок с шин I2C или SPI. Будет глюк или зависон. В процедурах обработки этих шин отсутствуют счётчики таймаутов, иными словами процедура будет ждать готовности "до талова". Это не есть гуд, да и бутлоадер из внешнего во внутренний еепром занимать будет строчек 200 максимум, поэтому размер не критичен.

0

12

Не знаю, что в I2C, что в SPI никаких зависонов нет, потому как правило МК в режиме мастера работает. Если у вас он есть, значит вы неправильно строите алгоритм программы.
Для I2C есть переменная "err": http://avrhelp.mcselec.com/index.html?u … otocol.htm
Если вы про режим слэйва, то это уже возможная проблема библиотек, хотя ничего сказать не могу, в этом режиме не работал.

0

13

В самой атмеге показан пример на ASM и на С++ , например ожидания флага TWINT в бесконечном цикле. Можете сами посмотреть в описании 640/1280/2560/2561 на стр. 251 есть кусок кода. Вот на примере этого кода и пишу по всем правилам бутлоадер.

И...  Как я понял читать/писать страницами нужно?
Сколько байт в странице?
Где временно её хранить?

0

14

Я выше дал ссылку на хабру, там написано: сколько и чего.
Так же в примерах баскома есть примеры на эту тему.
Конкретное под 328 можете посмотреть в датащите.

0

15

Там НЕТУ... смотрел ТРИ разные даташиты...

0

16

Как нет?

1. \MCS Electronics\BASCOM-AVR\SAMPLES\BOOT\BootEDBM88p.bas
2. atmega328 bootloader, танцы с бубном.
3. http://avrproject.ru/forum/9-342-1#2929
4. http://www.atmel.com/images/atmel-7810- … asheet.pdf (стр. 229)

На счет повисания, циклов...

-NMi- написал(а):

например ожидания флага TWINT

- никто не заставляет делать на прерывании;
- используйте SPI, там лампово как сапог.

0

17

4-я ссыль особенно "вкусна". Давно я искал и терзал программистов на тему "посмотреть" из софта фьюзы. Там все написано. И про бутлоадер тоже разжёвано. Спасибо.

Отредактировано -NMi- (2016-06-08 06:45:50)

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » At328P + NRF24 + Bootloader Under 24 or 93 series EEPROM