Pavel V. 0 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Здравствуйте! Интересно, писал ли кто-нибудь собственный бутлоадер для контроллеров MSP? Хочется обновлять прошивку через стандартный UART, с помощью которого плата общается с управляющим компьютером. Для AVR встречал множество примеров, а для MSP никак не могу найти. По идее технически это возможно, но где бы посмотреть пример? Буду рад любой помощи и ссылке где почитать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VVlad 0 18 мая, 2010 Опубликовано 18 мая, 2010 (изменено) · Жалоба Пробовал по приложенной ссылке, но пока без успеха. bootloader.pdf Изменено 18 мая, 2010 пользователем rezident Нарушение п.3.4 Правил форума. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Для AVR встречал множество примеров, а для MSP никак не могу найти.Портировал AVR231 - никаких проблем. Фактически там надо переписать процедуру записи во флеш, инициализацию и обработку uart. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба По идее технически это возможноТехнически - да, это несложно. Техника самопрограммирования Flash в MSP430 весьма неплохая. Однако, как это часто бывает, "дьявол кроется в мелочах". Во-первых, напомню, что во всех MSP430 (кроме самых маленьких из серии MSP430F20xx) есть встроенный BootStrip Loader, который описан в документации. Если нет нехватки пинов МК, то часто его можно совместить с UART. Добавив два преобразователя уровня для сигналов TEST/TCK и RESET, можно программировать через тот же порт, к которому подключены пины UART. Протокол BSL описан. Имеется возможность патчить его. Тщательно этот вопрос не исследовал, но по-моему имеется возможность перенаправить порт В/В для BSL на один из реальных UART. Во-вторых, следует прояснить, вам нужен bootloader для настольного или "полевого" варианта устройства? Имеется в виду, есть к устройству физический доступ или оно работает где-то в сети и внутрь его влезть невозможно? Если вариант настольный, то я опять же голосую за встроенный BSL. Лично я в устройствах, где не предполагается смена ПО в полевых условиях обычно вывожу 6 пинов для BSL и все. Нужно перепрограммировать - снял крышку с прибора, подключил преобразователь уровней от COM-порта, прижав его разъем к отверстиям в плате, и за пару минут перешил. Если же нужен "полевой" вариант бутлоадера, то следует учитывать такой нюанс. Все вектора прерываний у MSP430 находятся в одном секторе Flash. Следовательно при смене ПО, использующего прерывания, нужно этот сектор стирать и переписывать. Но если сбой произойдет именно в момент стирания/перезаписи, то все. Капут. Ваш бутлоадер уже больше не стартанет, т.к. будет запорчен (стерт) вектор сброса, где располагается адрес перехода на ваш бутлоадер. Поэтому сегмент с прерываниями стирать нельзя крайне нежелательно. Вместо этого сами вектора следует отмаппировать в другой сегмент Flash или в ОЗУ. Тут на форуме где-то уже давали вариант исходника маппирования векторов прерываний в ОЗУ. Но следует учитывать, что компиляторы про такое маппирование даже не будут подозревать, бо это нештатный хук. Поэтому вам самому придется писать ПО с учетом такого маппирования. И соответственно одной из функций бутлоадера должна быть проверка валидности "перемещенных" векторов прерываний. "Перемещенных" в кавычках, т.к. маппирование получается виртуальное и адреса векторов физически не перемещаются. Векторы прерываний при этом лишь содержат адрес ячейки памяти, где должен стоять JMP на адрес реального обработчика прерывания. Вот такие мысли. :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 18 мая, 2010 Опубликовано 18 мая, 2010 · Жалоба Вместо этого сами вектора следует отмаппировать в другой сегмент Flash или в ОЗУ.Все верно. Именно так и делал. Копировал вектора в ОЗУ. Особых сложностей с объяснением компилятору линкеру такого их расположения не возникло. Для приложения все свелось к расположению векторов по другому адресу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 19 мая, 2010 Опубликовано 19 мая, 2010 · Жалоба Нужно перепрограммировать - снял крышку с прибора, подключил преобразователь уровней от COM-порта, прижав его разъем к отверстиям в плате, и за пару минут перешил. А теперь представим, что на складе лежит штук 100 готовых изделий, по 6 винтов в крышечке. Плюс герметизирующая резинка, которая прилипает, и крышку иногда отколупывать приходится с помощью какой-то матери, стараясь не повредить эмаль корпуса. Также представим, что я выпускаю извещение на ПО и иду с ним к регулировщикам... Далее следует непереводимая игра слов... Вот появилась идея вызывать вшитый BSL по какой-либо сервисной команде, тогда для перепрошивки достаточно объединить UART с пинами BSL и перепрошивать без вскрытия через имеющийся канал связи. Но это вариант только для внутреннего применения, т.к. прошивка не шифруется. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shread 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Есть вот такая аппликуха: http://focus.ti.com/general/docs/litabsmul...eNumber=slaa341 Вполне себе работоспособная. Я портировал на 2xx, никаких особых трудностей не возникло: переписал программировние флеш и UART, добавил дефайны для 2xx. Очень удобно, с точки зрения того, что для обновления нужен только терминал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 23 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Есть вот такая аппликуха: [url=http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa341]http://focus.ti.com/general Можно, конечно... Но как минимум, нужно зашифровать вход в монитор, чтобы первый залётный дятел всё не сломал или не слил прошивку. Я в своё время очень хотел в качестве монитора forth-машину встроить, да всё никак времени не было, а сейчас вообще... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pavel V. 0 20 мая, 2010 Опубликовано 20 мая, 2010 · Жалоба Большое спасибо всем за ответы, особенно Сергею и Shread! Мне шифрование сейчас ни к чему (случай как с неуловимым Джо, которого никто не ловит, потому что он никому не нужен), желательно максимально простое решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xgcyo 0 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба Мы делали следующим образом. Бутлоадер зашивался по джэйтэгу, ну а прошивка в зашифрованном виде по уарту. 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 снять. Скопировать файл, который там указан в директорию своего проекта и добавить вышеописанные команды. Вы разберётесь. Вобщем всё это интересно, можно свою мини-ось написать с отдельными экзешниками, мультизадачностью... Был бы вагон времени только. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 136 24 мая, 2010 Опубликовано 24 мая, 2010 · Жалоба "Сдвинутые" прерывания находятся во флеше, сначала были в RAM, но от этой идеи отказались, т.к. возможны неприятные последствия, какие именно уже не помню.У меня с точностью до наоборот - прерывания в ОЗУ чтобы можно было в приложении и в загрузчике использовать разные обработчики на одних и тех же векторах без дополнительных ветвлений. А неприятные последствия только одни - случайное затирание этой таблицы в ОЗУ. Ну так к таким же последствиям может привести и случайное затирание стека. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rud0x1 0 1 февраля, 2013 Опубликовано 1 февраля, 2013 · Жалоба Здравствуйте. Правильно ли я понимаю, что для 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 по окончанию работы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
thodnev 0 4 февраля, 2013 Опубликовано 4 февраля, 2013 · Жалоба Интересно, кто-то заморачивался созданием usb-бутлоадера без всяких преобразователей и с минимальной обвязкой? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shread 0 11 февраля, 2013 Опубликовано 11 февраля, 2013 · Жалоба Интересно, кто-то заморачивался созданием usb-бутлоадера без всяких преобразователей и с минимальной обвязкой? Если речь про процессоры с 55xx, то да - TI заморачивался - юзаем оригинальный(с программной инициализацией)- вполне довольны. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ave 0 4 апреля, 2013 Опубликовано 4 апреля, 2013 · Жалоба Добрый день. Не могли бы подсказать где находится оригинальный bootloader от TI. Сейчас пытаюсь с компилировать из примеров. Компилятор говорит что мало место под прошивку в области BSL. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться