Цитата(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 на адрес реального обработчика прерывания.
Вот такие мысли.