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

Собственный Bootloader для MSP430

Здравствуйте!

 

Интересно, писал ли кто-нибудь собственный бутлоадер для контроллеров MSP? Хочется обновлять прошивку через стандартный UART, с помощью которого плата общается с управляющим компьютером. Для AVR встречал множество примеров, а для MSP никак не могу найти. По идее технически это возможно, но где бы посмотреть пример?

 

Буду рад любой помощи и ссылке где почитать.

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


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

Пробовал по приложенной ссылке, но пока без успеха.

bootloader.pdf

Изменено пользователем rezident
Нарушение п.3.4 Правил форума.

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


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

Для AVR встречал множество примеров, а для MSP никак не могу найти.
Портировал AVR231 - никаких проблем. Фактически там надо переписать процедуру записи во флеш, инициализацию и обработку uart.

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


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

По идее технически это возможно
Технически - да, это несложно. Техника самопрограммирования Flash в MSP430 весьма неплохая. Однако, как это часто бывает, "дьявол кроется в мелочах".

Во-первых, напомню, что во всех MSP430 (кроме самых маленьких из серии MSP430F20xx) есть встроенный BootStrip Loader, который описан в документации. Если нет нехватки пинов МК, то часто его можно совместить с UART. Добавив два преобразователя уровня для сигналов TEST/TCK и RESET, можно программировать через тот же порт, к которому подключены пины UART. Протокол BSL описан. Имеется возможность патчить его. Тщательно этот вопрос не исследовал, но по-моему имеется возможность перенаправить порт В/В для BSL на один из реальных UART.

Во-вторых, следует прояснить, вам нужен bootloader для настольного или "полевого" варианта устройства? Имеется в виду, есть к устройству физический доступ или оно работает где-то в сети и внутрь его влезть невозможно? Если вариант настольный, то я опять же голосую за встроенный BSL. Лично я в устройствах, где не предполагается смена ПО в полевых условиях обычно вывожу 6 пинов для BSL и все. Нужно перепрограммировать - снял крышку с прибора, подключил преобразователь уровней от COM-порта, прижав его разъем к отверстиям в плате, и за пару минут перешил.

Если же нужен "полевой" вариант бутлоадера, то следует учитывать такой нюанс. Все вектора прерываний у MSP430 находятся в одном секторе Flash. Следовательно при смене ПО, использующего прерывания, нужно этот сектор стирать и переписывать. Но если сбой произойдет именно в момент стирания/перезаписи, то все. Капут. Ваш бутлоадер уже больше не стартанет, т.к. будет запорчен (стерт) вектор сброса, где располагается адрес перехода на ваш бутлоадер. Поэтому сегмент с прерываниями стирать нельзя крайне нежелательно. Вместо этого сами вектора следует отмаппировать в другой сегмент Flash или в ОЗУ. Тут на форуме где-то уже давали вариант исходника маппирования векторов прерываний в ОЗУ. Но следует учитывать, что компиляторы про такое маппирование даже не будут подозревать, бо это нештатный хук. Поэтому вам самому придется писать ПО с учетом такого маппирования. И соответственно одной из функций бутлоадера должна быть проверка валидности "перемещенных" векторов прерываний. "Перемещенных" в кавычках, т.к. маппирование получается виртуальное и адреса векторов физически не перемещаются. Векторы прерываний при этом лишь содержат адрес ячейки памяти, где должен стоять JMP на адрес реального обработчика прерывания.

Вот такие мысли. :laughing:

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


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

Вместо этого сами вектора следует отмаппировать в другой сегмент Flash или в ОЗУ.
Все верно. Именно так и делал. Копировал вектора в ОЗУ. Особых сложностей с объяснением компилятору линкеру такого их расположения не возникло. Для приложения все свелось к расположению векторов по другому адресу.

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


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

Нужно перепрограммировать - снял крышку с прибора, подключил преобразователь уровней от COM-порта, прижав его разъем к отверстиям в плате, и за пару минут перешил.

А теперь представим, что на складе лежит штук 100 готовых изделий, по 6 винтов в крышечке.

Плюс герметизирующая резинка, которая прилипает, и крышку иногда отколупывать приходится с помощью какой-то матери, стараясь не повредить эмаль корпуса.

Также представим, что я выпускаю извещение на ПО и иду с ним к регулировщикам...

Далее следует непереводимая игра слов...

Вот появилась идея вызывать вшитый BSL по какой-либо сервисной команде, тогда для перепрошивки достаточно объединить UART с пинами BSL и перепрошивать без вскрытия через имеющийся канал связи.

Но это вариант только для внутреннего применения, т.к. прошивка не шифруется.

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


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

Есть вот такая аппликуха:

http://focus.ti.com/general/docs/litabsmul...eNumber=slaa341

Вполне себе работоспособная. Я портировал на 2xx, никаких особых трудностей не возникло: переписал программировние флеш и UART, добавил дефайны для 2xx. Очень удобно, с точки зрения того, что для обновления нужен только терминал.

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


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

Есть вот такая аппликуха:

[url=http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa341]http://focus.ti.com/general

Можно, конечно...

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

Я в своё время очень хотел в качестве монитора forth-машину встроить, да всё никак времени не было, а сейчас вообще...

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


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

Большое спасибо всем за ответы, особенно Сергею и Shread! Мне шифрование сейчас ни к чему (случай как с неуловимым Джо, которого никто не ловит, потому что он никому не нужен), желательно максимально простое решение.

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


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

Мы делали следующим образом. Бутлоадер зашивался по джэйтэгу, ну а прошивка в зашифрованном виде по уарту. DTR и RTS линии использовалисть для сброса МК и переключения между бутлоадером и рабочей программой соответственно. К МК подключен мост от FTDI, который по 7-8 долларов у нас. Бутлоадер компилировался обычным образом, никаких "перемещений" векторов в нём нет. Функции всех прерываний бутлоадера содержали инструкцию безусловного перехода (branch) по адресам "сдвинутых" прерываний рабочей программы. Эти адреса задавались в скрипте для компоновщика. "Сдвинутые" прерывания находятся во флеше, сначала были в RAM, но от этой идеи отказались, т.к. возможны неприятные последствия, какие именно уже не помню.

Ещё надо разграничить адресное пространство для бутлоадера и рабочей программы, чтоб не перекрывались. Вот команды для компоновщика IAR, включая "перемещённые" вектора прерываний рабочей программы.

 

Для бутлоадера.

// Constant data
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT=EA00-FFDF

// Code
-Z(CODE)CSTART,ISR_CODE=EA00-FFDF
-P(CODE)CODE=EA00-FFDF

// Interrupt vectors
-Z(CODE)INTVEC=0xFFE0-0xFFFF
-Z(CODE)RESET=FFFE-FFFF

 

Для рабочей программы.

// Constant data
-Z(CONST)DATA16_C,DATA16_ID,DIFUNCT=4040-FFFF

// Code
-Z(CODE)CSTART,ISR_CODE=4040-FFFF
-P(CODE)CODE=4040-FFFF

// Interrupt vectors
-Z(CODE)INTVEC=0x4000-0x403F
-Z(CODE)RESET=403E-0x403F

 

Чтоб задействовать в IARе: Project -> Options -> Linker -> Config -> Linker command file -> Override default снять. Скопировать файл, который там указан в директорию своего проекта и добавить вышеописанные команды. Вы разберётесь.

Вобщем всё это интересно, можно свою мини-ось написать с отдельными экзешниками, мультизадачностью... Был бы вагон времени только. :)

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


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

"Сдвинутые" прерывания находятся во флеше, сначала были в RAM, но от этой идеи отказались, т.к. возможны неприятные последствия, какие именно уже не помню.
У меня с точностью до наоборот - прерывания в ОЗУ чтобы можно было в приложении и в загрузчике использовать разные обработчики на одних и тех же векторах без дополнительных ветвлений. А неприятные последствия только одни - случайное затирание этой таблицы в ОЗУ. Ну так к таким же последствиям может привести и случайное затирание стека.

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


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

Здравствуйте.

 

Правильно ли я понимаю, что для F5529, в котором есть remapping таблицы векторов в RAM,я могу сделать следующее:

 

0. Сначала, через JTAG, в контроллер заливается bootloader.

1. Все вектора bootloader во flash (FF80-FFFE), кроме RESET, содержат адреса функций-трамплинов: BR <адрес ф-ции обработчика в главной программе>.

2. На старте bootloader выставляет бит SYSRIVECT. Таблица векторов маппится в RAM.

3. Меняем нужные вектора в RAM на адреса обработчиков bootloader, которые во flash, что б не бедствовать без прерываний в bootloader'е.

4. Используем прерывания в bootloader, заливаем прошивку во flash.

5. Делаем RESET через WDT из bootloader по окончанию работы.

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


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

Интересно, кто-то заморачивался созданием usb-бутлоадера без всяких преобразователей и с минимальной обвязкой?

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


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

Интересно, кто-то заморачивался созданием usb-бутлоадера без всяких преобразователей и с минимальной обвязкой?

Если речь про процессоры с 55xx, то да - TI заморачивался - юзаем оригинальный(с программной инициализацией)- вполне довольны.

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


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

Добрый день.

Не могли бы подсказать где находится оригинальный bootloader от TI.

Сейчас пытаюсь с компилировать из примеров. Компилятор говорит что мало место под прошивку в области BSL.

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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