d7d1cd 0 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба Привет всем. Использую МК MSP430F249. В даташите указано следующее: (9) The address 0xFFDE is used as bootstrap loader security key (BSLSKEY). A 0xAA55 at this location disables the BSL completely. A zero disables the erasure of the flash if an invalid password is supplied. (10) The interrupt vectors at addresses 0xFFDE to 0xFFC0 are not used in this device and can be used for regular program code if necessary. Правильно ли я понял, что в пункте 9 говорится о том, что если по адресу 0xFFDE записать значение 0xAA55, то BSL в микроконтроллере отключится полностью, а если записать значение 0x0000, то при запросе по BSL с неправильным паролем, будет стерта вся флешь память? Если так, то при записи 0xFFDE следует, что если прожечь JTAG, то записать новую программу в память МК не удастся никогда. Я правильно понимаю? И еще вопрос. В пункте 10 говорится, что адреса 0xFFDE - 0xFFC0 не используются под вектора прерываний в данном МК и могут быть использованы для кода программы. Но ведь может получится так, что по адресу 0xFFDE запишется какое-то "не нужное" значение (0xAA55 или 0x0000). Или компилятор отслеживает данные казусы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrYuran 16 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба Или компилятор отслеживает данные казусы? Компилятору точно по барабану. Если только целенаправленно в скрипте линкера не залочить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 10 октября, 2013 Опубликовано 10 октября, 2013 · Жалоба Но ведь может получится так, что по адресу 0xFFDE запишется какое-то "не нужное" значение (0xAA55 или 0x0000). Или компилятор отслеживает данные казусы? Если под компилятором подразумевается IAR EW430, то 1) нет - случайно не запишется и 2) нет - компилятор специально не отслеживает. Если посмотреть конфигурацию памяти для линкера IAR в файле lnk430f249.xcl, то можно увидеть, что область Flash, в которой находится ячейка с адресом 0xFFDE, не используется ни под размещение констант, ни под размещение кода. А резервируется лишь под вектора прерываний. // ------------------------------------- // Interrupt vectors // -Z(CODE)INTVEC=FFC0-FFFF -Z(CODE)RESET=FFFE-FFFF Поскольку в MSP430F249 нет периферии, использующей вектор по адресу 0xFFDE, то компилятор сам по себе разместить "что-то не то" туда не сможет. Так что "испортить" ячейку памяти по адресу 0xFFDE сможет лишь программист :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
d7d1cd 0 10 октября, 2013 Опубликовано 10 октября, 2013 (изменено) · Жалоба Спасибо за ответы. Если вас не затруднит, ответьте на вопросы этого абзаца: Правильно ли я понял, что в пункте 9 говорится о том, что если по адресу 0xFFDE записать значение 0xAA55, то BSL в микроконтроллере отключится полностью, а если записать значение 0x0000, то при запросе по BSL с неправильным паролем, будет стерта вся флешь память? Если так, то при записи 0xFFDE следует, что если прожечь JTAG, то записать новую программу в память МК не удастся никогда. Я правильно понимаю? Изменено 10 октября, 2013 пользователем d7d1cd Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 11 октября, 2013 Опубликовано 11 октября, 2013 · Жалоба Спасибо за ответы. Если вас не затруднит, ответьте на вопросы этого абзаца: Не совсем правильно. Вот цитата из MSP430 Programming Via the Bootstrap Loader User's Guide (slau319f.pdf). BSL versions 2.00 and higher have enhanced security features. These features are controlled by the flash data word located beneath the interrupt vector table addresses (for example, for the MSP430F2131, address 0xFFDE). If this word contains: • 0x0000: The flash memory is not erased if an incorrect BSL password has been received by the target. • 0xAA55: The BSL is disabled. This means that the BSL is not started with the default initialization sequence shown in Section 1.3. • All other values: If an incorrect password is transmitted, the entire flash memory address space is erased automatically. - Когда 0x0000, то BSL не будет стирать Flash при неправильно введенном пароле. - Когда 0xAA55, то BSL отключен. Это означает, что BSL не стартует при обычной процедуре его инициализации (и при пережженом в JTAG fuse штатных способов доступа к Flash-памяти МК не будет). - Любое другое значение (отличное ото 0x0000 или 0xAA55) при неправильном вводе пароля доступа вызывает автоматическое стирание всей Flash (т.е. если вы сами ничего не пропишете, то в "секретной" ячейке Flash будет значение 0xFFFF и BSL будет стирать всю Flash-память в отсутствии корректного пароля доступа). Я специально отметил слово "штатный" способ доступа. Ведь никто не мешает вам реализовать нештатный доступ к Flash (из своей пользовательской программы) с помощью какой-то необычной конфигурации состояний входных сигналов (которых в обычных условиях работы прибора быть не должно) или подачей через любой доступный интерфейс одной-единственной уникальной команды - стереть всю Flash. В таком случае, запустив свою нештатную процедуру стирания Flash-памяти, вы вновь активируете BSL и сможете потом загрузить новую программу. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться