Перейти к содержанию
    

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

 

Заранее благодарен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

К сожалению в отличии от других процев у 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Плохо понимаете. Есть 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

 

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

 

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Благодарю за совет!) Буду разбираться, правда, время поджимает, судя по ответам похоже этим либо занимались либо редко, либо никто.. А вот по поводу перемешаемых векторов я как то не подумал, спасибо, что обратили внимание на этот факт...)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел на http://tech.groups.yahoo.com/group/msp430/

Коментарий: "Code for an ISR jump table in RAM"

может поможет.

vectors.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел на 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Дык как обычно Гугель рулит ;)

http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Дык как обычно Гугель рулит ;)

http://pages.interlog.com/~speff/usefulinfo/Hexfrmt.pdf

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Неужели останусь без ответа и привета?;)

Изменено пользователем asket

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Узнать размер именно функции нельзя.

Но можно указать компилятору разместить интересующую функцию в отдельном сегменте

#pragma location="MYSEGMENT"

 

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

 

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

__segment_begin(segment) и __segment_end(segment)

 

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

-Z(CODE)MYSEGMENT=....

 

Читайте EW430_CompilerReference.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Если программа написана на ассемблере, то размер можно узнать:

поставить метки в начале и конце функции, а где необходимо -- вычислить разность меток, это и будет "размер" или точнее "размер кода" функции. Пример:

    mov #STOP,R7
    sub #START,R7
START:        ; просто любая функция
    push R4
    push R5
    mov R5,R4
    pop R5
    pop R4
STOP:
    ret

 

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

Изменено пользователем gotty

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще такой вопрос по поводу сегментации флеш-памяти, компилер IAR по умолчанию ставит сегмент CODE и размещает туда все функции, если они явно пользователем не указаны в каком сегменте их расположить, но мне не понравилось тот факт, что IAR без ведома пихает стандартные функции, и если его стереть, то фактически программа без них не будет нормально работать. Как указать компилятору в какой сегмент нужно раположить эти функции?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще такой вопрос по поводу сегментации флеш-памяти, компилер IAR по умолчанию ставит сегмент CODE и размещает туда все функции, если они явно пользователем не указаны в каком сегменте их расположить, но мне не понравилось тот факт, что IAR без ведома пихает стандартные функции, и если его стереть, то фактически программа без них не будет нормально работать. Как указать компилятору в какой сегмент нужно раположить эти функции?

 

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

-Z(CODE)MYCODE=4000-5000

Изменено пользователем gotty

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно изменить сегмент 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 мне понравилось тем, что распределение по сегментам определяется один раз, достаточно наверху с помошью прагмы указать сегмент и тогда все функции данного модуля окажутся в этом сегменте, а новой версии этого почему-то не нашел, приходится объявлять сегмент каждой функции, что не есть хорошо..

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...