реклама на сайте
подробности

 
 
> STM32 загрузчик и защита от чтения
uriy
сообщение Oct 9 2017, 08:26
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Столкнулся с неожиданной для себя вещью.
Имеется железка на STM32L1.
В ней есть самописный загрузчик и основная программа.
Загрузчик позволяет обновлять прошивку через uart.
Перед переходом из загрузчика в основную программу проверяется ее CRC.
На чип установил защиту от чтения.
Теперь оказывается даже загрузчик не может считать флешку.
Я не могу проверить CRC, при чтении возвращаются нули.
Как решается вопрос о защите прошивки от считывания при наличии самописного загрузчика?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 7)
Сергей Борщ
сообщение Oct 9 2017, 08:45
Сообщение #2


Гуру
******

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



QUOTE (uriy @ Oct 9 2017, 11:26) *
На чип установил защиту от чтения.
Теперь оказывается даже загрузчик не может считать флешку.
Я не могу проверить CRC, при чтении возвращаются нули.
Не может такого быть. В процессе работы программа читает константы (даже адреса регистров) из памяти программ теми же самыми командами, которыми должна считывать содержимое памяти для расчета CRC. Если бы она не могла считывать флешь-память, она просто не смогла бы работать. Никаких специальных механизмов, запрещающих считывать одну облать флешь из другой в этом семействе нет, запрещено только чтение флеш при исполнении кода из ОЗУ, из системной памяти и отладчиком.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
KRS
сообщение Oct 9 2017, 10:07
Сообщение #3


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Так видимо вторичный загрузчик из ОЗУ работает...
Надо разбить и в ОЗУ копировать только ту часть, которая флеш пишет.
Go to the top of the page
 
+Quote Post
adnega
сообщение Oct 9 2017, 11:48
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(uriy @ Oct 9 2017, 11:26) *
Я не могу проверить CRC, при чтении возвращаются нули.

CRC аппаратно считаете? Может, тактирование не разрешили?
Go to the top of the page
 
+Quote Post
uriy
сообщение Oct 10 2017, 07:34
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Что-то непонятное происходит.
Сделал несколько экспериментов.
Первый через JLink
1. Через JFlash стираю всю флешку.
2. Через JFlash заливаю свой загрузчик.
3. В JFlash ставлю защиту от чтения (Target->Secure chip). Проверяю JFlash считать данные не может.
4. Через UART средствами своего загрузчика заливаю прошивку. Все работает.

Второй через STLink
1. В ST-Link utility стираю всю флешку.
2. Заливаю свой загрузчик.
3. Ставлю защиту от чтения Level 1. Загрузчик больше не подает признаков жизни.

Третий через ST-Link
1. В ST-Link utility стираю всю флешку.
2. Заливаю свой загрузчик.
3. Через UART заливаю прошивку. Все работает как надо
4. Ставлю защиту от чтения Level 1. Опять никаких признаков жизни.

JLink и ST-Link дали разные результаты и оба отличаются от того что я получил вчера. Как так?
Цитата
Так видимо вторичный загрузчик из ОЗУ работает...
Надо разбить и в ОЗУ копировать только ту часть, которая флеш пишет.
Я пользуюсь SPL библиотеками от ST. Я знаю все начнут тыкать пальцем. У меня с ней не бывало проблем. Мне казалось там были директивы для размещения функций записи в ОЗУ. Проверил их нет. Посмотрел в дебаггере адреса функций, они лежат во флеш. Кажется при этом были какие-то нюансы. Надо запрещать все прерывания когда функции записи лежат во флеш?
При старте загрузчик читает параметры из EEPROM. Может это вызывает HardFault при включенной защите от чтения? У меня нет вывода отладочной инфы в HardFault handler.

Цитата
CRC аппаратно считаете? Может, тактирование не разрешили?
Нет считаю программно. С CRC возникала проблема только когда включена защита от чтения. Да и ту сегодня уже не могу повторить.

Go to the top of the page
 
+Quote Post
Axel
сообщение Oct 10 2017, 17:25
Сообщение #6


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Option bytes в обоих случаях (J-Link и ST-Link) не сравнивали?
Go to the top of the page
 
+Quote Post
uriy
сообщение Oct 11 2017, 08:03
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Сравнивал только в ST-Link utility для 4 плат она отображала одинаковые значения.
Сегодня считал в JFlash. Оказалось в двух платах стоят биты защиты записи на некторые сектора.
Похоже ST-Link мало что читает в option bytes и просто показывает значения по умолчанию.
Разве полное стирание не должно было сбросить эти биты?
Сейчас привел option bytes к единому значению на всех платах. И теперь все работает.
Могу обновить программу через загрузчик и стоит защита от чтения.
Go to the top of the page
 
+Quote Post
Axel
сообщение Oct 11 2017, 08:23
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 480
Регистрация: 21-11-04
Пользователь №: 1 188



Цитата(uriy @ Oct 11 2017, 12:03) *
Разве полное стирание не должно было сбросить эти биты?

В общем - нет. Вот наоборот - да (но это Вы и сами знаете).
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 16:03
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016