|
Собственный Bootloader для MSP430 |
|
|
|
May 18 2010, 10:43
|
Участник

Группа: Участник
Сообщений: 67
Регистрация: 7-12-09
Пользователь №: 54 109

|
Пробовал по приложенной ссылке, но пока без успеха.
Сообщение отредактировал rezident - May 18 2010, 18:17
Причина редактирования: Нарушение п.3.4 Правил форума.
|
|
|
|
|
May 18 2010, 19:04
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Pavel V. @ May 18 2010, 16:01)  По идее технически это возможно Технически - да, это несложно. Техника самопрограммирования Flash в MSP430 весьма неплохая. Однако, как это часто бывает, "дьявол кроется в мелочах". Во-первых, напомню, что во всех MSP430 (кроме самых маленьких из серии MSP430F20xx) есть встроенный BootStrip Loader, который описан в документации. Если нет нехватки пинов МК, то часто его можно совместить с UART. Добавив два преобразователя уровня для сигналов TEST/TCK и RESET, можно программировать через тот же порт, к которому подключены пины UART. Протокол BSL описан. Имеется возможность патчить его. Тщательно этот вопрос не исследовал, но по-моему имеется возможность перенаправить порт В/В для BSL на один из реальных UART. Во-вторых, следует прояснить, вам нужен bootloader для настольного или "полевого" варианта устройства? Имеется в виду, есть к устройству физический доступ или оно работает где-то в сети и внутрь его влезть невозможно? Если вариант настольный, то я опять же голосую за встроенный BSL. Лично я в устройствах, где не предполагается смена ПО в полевых условиях обычно вывожу 6 пинов для BSL и все. Нужно перепрограммировать - снял крышку с прибора, подключил преобразователь уровней от COM-порта, прижав его разъем к отверстиям в плате, и за пару минут перешил. Если же нужен "полевой" вариант бутлоадера, то следует учитывать такой нюанс. Все вектора прерываний у MSP430 находятся в одном секторе Flash. Следовательно при смене ПО, использующего прерывания, нужно этот сектор стирать и переписывать. Но если сбой произойдет именно в момент стирания/перезаписи, то все. Капут. Ваш бутлоадер уже больше не стартанет, т.к. будет запорчен (стерт) вектор сброса, где располагается адрес перехода на ваш бутлоадер. Поэтому сегмент с прерываниями стирать нельзя крайне нежелательно. Вместо этого сами вектора следует отмаппировать в другой сегмент Flash или в ОЗУ. Тут на форуме где-то уже давали вариант исходника маппирования векторов прерываний в ОЗУ. Но следует учитывать, что компиляторы про такое маппирование даже не будут подозревать, бо это нештатный хук. Поэтому вам самому придется писать ПО с учетом такого маппирования. И соответственно одной из функций бутлоадера должна быть проверка валидности "перемещенных" векторов прерываний. "Перемещенных" в кавычках, т.к. маппирование получается виртуальное и адреса векторов физически не перемещаются. Векторы прерываний при этом лишь содержат адрес ячейки памяти, где должен стоять JMP на адрес реального обработчика прерывания. Вот такие мысли.
|
|
|
|
|
May 18 2010, 23:00
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(rezident @ May 18 2010, 22:04)  Вместо этого сами вектора следует отмаппировать в другой сегмент Flash или в ОЗУ. Все верно. Именно так и делал. Копировал вектора в ОЗУ. Особых сложностей с объяснением компилятору линкеру такого их расположения не возникло. Для приложения все свелось к расположению векторов по другому адресу.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
May 19 2010, 06:26
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(rezident @ May 18 2010, 23:04)  Нужно перепрограммировать - снял крышку с прибора, подключил преобразователь уровней от COM-порта, прижав его разъем к отверстиям в плате, и за пару минут перешил. А теперь представим, что на складе лежит штук 100 готовых изделий, по 6 винтов в крышечке. Плюс герметизирующая резинка, которая прилипает, и крышку иногда отколупывать приходится с помощью какой-то матери, стараясь не повредить эмаль корпуса. Также представим, что я выпускаю извещение на ПО и иду с ним к регулировщикам... Далее следует непереводимая игра слов... Вот появилась идея вызывать вшитый BSL по какой-либо сервисной команде, тогда для перепрошивки достаточно объединить UART с пинами BSL и перепрошивать без вскрытия через имеющийся канал связи. Но это вариант только для внутреннего применения, т.к. прошивка не шифруется.
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 20 2010, 10:31
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Shread @ May 20 2010, 12:58)  Есть вот такая аппликуха: [url="http://focus.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa341"]http://focus.ti.com/general Можно, конечно... Но как минимум, нужно зашифровать вход в монитор, чтобы первый залётный дятел всё не сломал или не слил прошивку. Я в своё время очень хотел в качестве монитора forth-машину встроить, да всё никак времени не было, а сейчас вообще...
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
May 24 2010, 13:23
|
Группа: Участник
Сообщений: 8
Регистрация: 9-07-09
Из: Рига, Латвия
Пользователь №: 51 080

|
Мы делали следующим образом. Бутлоадер зашивался по джэйтэгу, ну а прошивка в зашифрованном виде по уарту. 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 снять. Скопировать файл, который там указан в директорию своего проекта и добавить вышеописанные команды. Вы разберётесь. Вобщем всё это интересно, можно свою мини-ось написать с отдельными экзешниками, мультизадачностью... Был бы вагон времени только.
|
|
|
|
|
Feb 1 2013, 11:33
|
Группа: Новичок
Сообщений: 3
Регистрация: 4-12-12
Пользователь №: 74 695

|
Здравствуйте.
Правильно ли я понимаю, что для 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 по окончанию работы.
|
|
|
|
|
Apr 4 2013, 10:52
|
Участник

Группа: Участник
Сообщений: 31
Регистрация: 12-09-05
Пользователь №: 8 478

|
Добрый день. Не могли бы подсказать где находится оригинальный bootloader от TI. Сейчас пытаюсь с компилировать из примеров. Компилятор говорит что мало место под прошивку в области BSL.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|