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

 
 
3 страниц V   1 2 3 >  
Reply to this topicStart new topic
> Bootloader для MSP430, как написать бутлоадер для МСП430
asket
сообщение Oct 15 2007, 10:09
Сообщение #1


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Я в этом деле новичок, недавно начал заниматься этой деятельностью, мне поручили написать Bootloader. Задача: имеется шина, будь это COM-порт или собственная шина, не важно какая, нужно по данной шине закачать с компьютера прошивку и залить его во флеш в целях ее обновления, вопрос: как это сделать это по умному? Кто и что посоветует? Может примерчик какой-нить.. К сожалению в отличии от других процев у MSP430 встроенных бутлоадеров я так понимаю нету. Компилятор IAR 3.42.

Заранее благодарен.
Go to the top of the page
 
+Quote Post
VAI
сообщение Oct 15 2007, 10:36
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Цитата
К сожалению в отличии от других процев у MSP430 встроенных бутлоадеров я так понимаю нету.

Плохо понимаете. Есть Bootstrap Loader.
Последний абзац п.п.21 FAQ http://www.gaw.ru/html.cgi/txt/doc/micros/msp430/faq.htm#21

http://focus.ti.com/mcu/docs/mcusupporttec...ctName=slaa089d
http://focus.ti.com/mcu/docs/mcusupporttec...ctName=slaa096d

На русском, немного устарело.. http://www.gaw.ru/html.cgi/txt/app/micros/msp430/slaa089.htm


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 15 2007, 11:12
Сообщение #3


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(VAI @ Oct 15 2007, 14:36) *


Это то понятно, там целое шаманство производить надо и со схемкой, и с программкой, чтоб программить с командной строки, а у меня задача другая стоит: на объекте используется аппарат, который висит на собственной шине, чтоб не ездить за обновлением прошивки, пользователь скачивает из интернета hex, и с помошью нашей же программы закачивает удаленно прошивку по адресу этого устройства, далее я понимаю так, что эту прошивку надо собирать в отдельном файле, проверить контрольную сумму и запустить программный бутлоадер, чтоб он эту прошивку залил, но возможна ситуация, когда на шине пропадает питание, здесь на помошь приходит опять таки бутолоадер, который проверяет CRC прошивки и выдает код ошибки пользователю, то етсь таким образом устройство продолжает работу дальше.. Проблема здесь в том, что как это сделать правильно, у меня попытка очистить флеш по адресу 0x1100 и залить туда код с оперативки (традиционным способом) не увенчалось успехом, после перезагрузки проц вообще перестал работать, приходится перепрошивать чеез JTAG.. Прошивку из шины я пытаюсь сохранять во внешней EEPROM, ибо 64 Кб - маловато для этих целей.. Забыл про проц MSP430f149.

Спасибо.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 15 2007, 12:11
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



asket, вы сначала разберитесь как внутрипрограммно программировать Flash MSP430 в принципе. Когда разберетесь с принципом (на INFO тренируйтесь), то тогда и приступайте к написанию своего BootLoader. Только предполагаю, что вы наверняка наступите на грабли НЕперемещаемых векторов прерываний. Поищите здесь тему про то как в MSP430 организуются перемещаемые вектора. Оно точно тут было год-полтора назад.
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 15 2007, 12:50
Сообщение #5


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(rezident @ Oct 15 2007, 16:11) *
asket, вы сначала разберитесь как внутрипрограммно программировать Flash MSP430 в принципе. Когда разберетесь с принципом (на INFO тренируйтесь), то тогда и приступайте к написанию своего BootLoader. Только предполагаю, что вы наверняка наступите на грабли НЕперемещаемых векторов прерываний. Поищите здесь тему про то как в MSP430 организуются перемещаемые вектора. Оно точно тут было год-полтора назад.


Благодарю за совет!) Буду разбираться, правда, время поджимает, судя по ответам похоже этим либо занимались либо редко, либо никто.. А вот по поводу перемешаемых векторов я как то не подумал, спасибо, что обратили внимание на этот факт...)
Go to the top of the page
 
+Quote Post
VAI
сообщение Oct 15 2007, 13:21
Сообщение #6


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



Нашел на http://tech.groups.yahoo.com/group/msp430/
Коментарий: "Code for an ISR jump table in RAM"
может поможет.
Прикрепленные файлы
Прикрепленный файл  vectors.zip ( 4.73 килобайт ) Кол-во скачиваний: 206
 


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 15 2007, 13:56
Сообщение #7


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(VAI @ Oct 15 2007, 17:21) *
Нашел на http://tech.groups.yahoo.com/group/msp430/
Коментарий: "Code for an ISR jump table in RAM"
может поможет.


Огромное Вам спасибо за помощь!

И еще вопрос: где бы найти описание формата пакета с прошивками например Intel Standart или Intel Extended? Там конечно разбираться то нечего, только вот хотелось бы понять по какому алгоритму считают CRC и что за байт кроется между адресом и данными?

Вот первая строчка откомпилированного кода по стандарту hex-Extended:
101100003140000A3C401A023E407E05B012B4E76E, я понял так что
0x10 - длина данных,
0x1100 - адрес
0x00 - ?
данные - сама прошивка 16 байт
0x6E - CRC
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 15 2007, 18:40
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(asket @ Oct 15 2007, 19:56) *
И еще вопрос: где бы найти описание формата пакета с прошивками например Intel Standart или Intel Extended? Там конечно разбираться то нечего, только вот хотелось бы понять по какому алгоритму считают CRC и что за байт кроется между адресом и данными?

Дык как обычно Гугель рулит wink.gif
http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 19 2007, 08:10
Сообщение #9


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(rezident @ Oct 15 2007, 22:40) *
Дык как обычно Гугель рулит wink.gif
http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf


Окей, спасибо огромное! Кое что стало проясняться.. Еще один вопрос, извиняюсь, чисто ламерский: каким способом программно определить размер той или иной функции? Допустим знаем адрес раположения этой функции, и нужно будет определить размер этой функции, пробывал использовать sizeof(), ругается что операнд не может быть функцией, каким способом можно определить?
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 19 2007, 14:56
Сообщение #10


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Неужели останусь без ответа и привета?wink.gif

Сообщение отредактировал asket - Oct 19 2007, 14:57
Go to the top of the page
 
+Quote Post
SSerge
сообщение Oct 19 2007, 19:16
Сообщение #11


Профессионал
*****

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



Узнать размер именно функции нельзя.
Но можно указать компилятору разместить интересующую функцию в отдельном сегменте
#pragma location="MYSEGMENT"

и потом вычислить размер сегмента.

У IAR для этого есть встроенные псевдо-функции
__segment_begin(segment) и __segment_end(segment)

Кроме того потребуется объяснить линкеру в .xcl-файле что у него появился ещё один сегмент кода
-Z(CODE)MYSEGMENT=....

Читайте EW430_CompilerReference.pdf


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
msalov
сообщение Oct 22 2007, 06:19
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(asket @ Oct 19 2007, 11:10) *
Окей, спасибо огромное! Кое что стало проясняться.. Еще один вопрос, извиняюсь, чисто ламерский: каким способом программно определить размер той или иной функции? Допустим знаем адрес раположения этой функции, и нужно будет определить размер этой функции, пробывал использовать sizeof(), ругается что операнд не может быть функцией, каким способом можно определить?


Если программа написана на ассемблере, то размер можно узнать:
поставить метки в начале и конце функции, а где необходимо -- вычислить разность меток, это и будет "размер" или точнее "размер кода" функции. Пример:
Код
    mov #STOP,R7
    sub #START,R7
START:        ; просто любая функция
    push R4
    push R5
    mov R5,R4
    pop R5
    pop R4
STOP:
    ret


В R7 -- результат

Сообщение отредактировал gotty - Oct 22 2007, 06:20
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 23 2007, 13:27
Сообщение #13


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Еще такой вопрос по поводу сегментации флеш-памяти, компилер IAR по умолчанию ставит сегмент CODE и размещает туда все функции, если они явно пользователем не указаны в каком сегменте их расположить, но мне не понравилось тот факт, что IAR без ведома пихает стандартные функции, и если его стереть, то фактически программа без них не будет нормально работать. Как указать компилятору в какой сегмент нужно раположить эти функции?
Go to the top of the page
 
+Quote Post
msalov
сообщение Oct 23 2007, 14:16
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 24-08-07
Из: Беларусь, Минск
Пользователь №: 30 045



Цитата(asket @ Oct 23 2007, 16:27) *
Еще такой вопрос по поводу сегментации флеш-памяти, компилер IAR по умолчанию ставит сегмент CODE и размещает туда все функции, если они явно пользователем не указаны в каком сегменте их расположить, но мне не понравилось тот факт, что IAR без ведома пихает стандартные функции, и если его стереть, то фактически программа без них не будет нормально работать. Как указать компилятору в какой сегмент нужно раположить эти функции?


Можно изменить сегмент CODE (начальный и конечный адреса), таким образом, что бы он отвечал Вашим требованиям. Это можно проделать при помощи параметра линкера:
Код
-Z(CODE)MYCODE=4000-5000


Сообщение отредактировал gotty - Oct 23 2007, 14:28
Go to the top of the page
 
+Quote Post
asket
сообщение Oct 23 2007, 15:48
Сообщение #15


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

Группа: Участник
Сообщений: 91
Регистрация: 24-08-06
Из: Москва
Пользователь №: 19 809



Цитата(gotty @ Oct 23 2007, 18:16) *
Можно изменить сегмент CODE (начальный и конечный адреса), таким образом, что бы он отвечал Вашим требованиям. Это можно проделать при помощи параметра линкера:
Код
-Z(CODE)MYCODE=4000-5000


Это мне понятно, дело здесь в другом, допустим у нас несколько сегментов:

-Z(CODE)CODE=1100-1200
-Z(CODE)MYCODE=1200-1500

По умолчанию компилятор IAR помещает стандартные и служебные функции в сегмент CODE, то есть это означает, что если программист забыл указать сегмент, то компилятор автоматом поместит в сегмент --Z(CODE)CODE, то есть мне не хотелось сильно зависеть от данного сегмента, ибо большинство функции находятся в сегменте MYCODE, придется тогда над каждой функцией писать #pragma location="MYCODE". В старой версии IAR мне понравилось тем, что распределение по сегментам определяется один раз, достаточно наверху с помошью прагмы указать сегмент и тогда все функции данного модуля окажутся в этом сегменте, а новой версии этого почему-то не нашел, приходится объявлять сегмент каждой функции, что не есть хорошо..
Go to the top of the page
 
+Quote Post

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

 


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


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