реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Bootloader - с чего начать
Aleks17
сообщение Feb 21 2006, 12:44
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



bootloader - как начать.

Есть у меня несколько устройств в CAN сети и есть желание обновлять их ПО в этой же сети. То есть нужно написать bootloader. На сейчас собираюсь взять Atmel- овские библиотеки для записи/чтения FLASH, добавить свою обертку для CAN протокола и всяких опций и сваять эту радость на IAR C/C++.

Вопросы такие: как в IAR указать другие адреса памяти для линковки? (или надо править xcl файл).

Как описать и организовать прервывания в области загрузчика? Как это прошивать ? (т.е. как я понимаю я прошиваю по JTAG-у Bootloader а уже с его помощью шью программу, или всё таки они (программа и bootloader) компонуются и шьются совместно)

Т.е. просьба поделиться опытом.
Go to the top of the page
 
+Quote Post
maegg
сообщение Feb 21 2006, 14:10
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 129
Регистрация: 22-06-04
Из: S. Peterburg
Пользователь №: 103



Править XCL нужно. У меня такая строчка
/* Code memory */
-Z(CODE)INTVEC=1FC00-(_..X_INTVEC_SIZE-1+1FC00)
Затем написал ассемблерную функцию по мотивам атмеловского апнота.
Затем заполняю буфер и вызываю Do_spm_all( buf )
Это мой усеченный вариант, а видел и продвинутые см. bootexa, не знаю автора.
Прикрепленные файлы
Прикрепленный файл  spm.zip ( 2.79 килобайт ) Кол-во скачиваний: 113
Прикрепленный файл  bootexa1.zip ( 1.65 килобайт ) Кол-во скачиваний: 130
 
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Feb 21 2006, 14:18
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



Дак а где такая строчка, в XCL как я понимаю?

Или в options?
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 21 2006, 17:26
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(Aleks17 @ Feb 21 2006, 14:44) *
Как описать и организовать прервывания в области загрузчика? Как это прошивать ? (т.е. как я понимаю я прошиваю по JTAG-у Bootloader а уже с его помощью шью программу, или всё таки они (программа и bootloader) компонуются и шьются совместно)

Я делаю два проекта в одном workspace - бутлоадер и приложение.
Связывает их только положение границы адресного пространства между ними и необходимая общая периферия (UART например).
Зашивать бутлоадер по JTAG можно, но если потребуется зашитить программу, то это придётся делать из бутлоадера.
Я зашиваю бутлоадер и fuse-биты и lock-биты через ISP за один проход.
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Feb 22 2006, 03:52
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



Вот родилось ещё два вопроса:

1) По поводу xcl файлов. Как подключать нестандартный я знаю (options/linker/config/ovveride default). А вот как процессор выбирает стандартные. Пристальный взгляд на каталог template и работу линковщица показал, что линковщик использует два файла (cfgcan128.xcl и cfg3s.xcl), на каком основании он их взял? И можно ли создать свою конфигурацию из набора стандартных.

2) По поводу запуска программы. Я хочу реализвать следующую схему: стартуем в бутлоадере, проверяем флаг записи - если true то переходим к режиму записи, false - в режим работы. Устанавливать флаг я хочу по сути в рабочем режиме (по получении команды на запись перехожу к bootloader-у), сбрасывать его по окончании загрузки (т.е. в варианте пропадание питания у меня недозакачанная программа запускаться не должна, только загрузчик). Собственно вопрос: где лучше разместить этот флаг с тем, чтобы можно было его читать/писать из bootloader-а.
Go to the top of the page
 
+Quote Post
defunct
сообщение Feb 22 2006, 04:16
Сообщение #6


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(Aleks17 @ Feb 22 2006, 05:52) *
2) .... Собственно вопрос: где лучше разместить этот флаг с тем, чтобы можно было его читать/писать из bootloader-а.


в EEPROM, например, в последнюю ячейку..
в основной программе пишем флаг, после чего устанавливаем WDT и зацикливаемся.. После сброса попадаем в bootloader читаем флаг и ...
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 22 2006, 08:41
Сообщение #7


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Для проверки недозакачанности да и вообще целостности программы хорошо применять контрольные суммы.
ИАР позволяет это автоматизировать (см. опции линкера).
Go to the top of the page
 
+Quote Post
Aleks17
сообщение Feb 22 2006, 09:32
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 238
Регистрация: 17-01-05
Из: Новосибирск
Пользователь №: 2 003



Цитата(IgorKossak @ Feb 22 2006, 14:41) *
Для проверки недозакачанности да и вообще целостности программы хорошо применять контрольные суммы.
ИАР позволяет это автоматизировать (см. опции линкера).


Ну наверное тоже вариант - при запуске бутлоадера проверять контрольную сумму FLASH. Но это довольно большая задержка при включении (порядка 0.1 - 0.5 с). И опять же надо где-то хранить справочную сумму, наверное резонно в том же FLASH.

Может стоит её считать один раз при выходе из режима загрузки?

В-общем ответ немного не по теме. Я спрашивал "где", а вы говорите "что".
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Feb 22 2006, 09:43
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Ну если уж строго по вопросу, то флаг перехода на бутлоадер\программу надёжнее хранить в ЕЕПРОМ, выделив для него отдельный сегмент в обоих проектах.
В том же сегменте полезно держать также счётчик перезаписей (уж извините за отвлечение от вопроса wink.gif ).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 7th July 2025 - 23:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01461 секунд с 7
ELECTRONIX ©2004-2016