Перейти к содержанию
    

STM32F030 Option bytes

Хочу программно устанавливать защиту от копирования прошивки.
Вопрос:
Эта область памяти программируется точно так же, как и вся остальная FLASH ?
Т.е. сначала стираем страницу ?
Если страница где OPTION BYTES стерта, и в этот момент пропало питание, то происходит невозвратный глюк ?
Как понимаю, по адресу 0x1FFF F800  всего 4шт 32х битных регистра, и дальше вся страница пустая ? Т.е. запомнить и перезаписать обратно нужно только их ?
 

Заранее спасибо !

 

11.jpg

22.jpg

33.jpg

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, MiklPolikov сказал:

Эта область памяти программируется точно так же, как и вся остальная FLASH ?

Нет, в руководстве пользователя отдельный раздел про Option Bytes и их программирование/стирание

3 часа назад, MiklPolikov сказал:

сначала стираем страницу ?

Да.

3 часа назад, MiklPolikov сказал:

Если страница где OPTION BYTES стерта, и в этот момент пропало питание, то происходит невозвратный глюк ?

Не совсем - прошивка остается защищенной от чтения, после подачи питания можно изнутри программы вычитать option bytes и поставить в желаемое положение.

3 часа назад, MiklPolikov сказал:

Как понимаю, по адресу 0x1FFF F800  всего 4шт 32х битных регистра, и дальше вся страница пустая ?

Дальше просто ничего нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это такая же по технологии область Flash, но биты управления стиранием/записью другие.

Цитата

Если страница где OPTION BYTES стерта, и в этот момент пропало питание, то происходит невозвратный глюк?

Что такое "невозвратный глюк"? При стертом RDP (0xFF) защита Flash будет соответствовать Level 1.

Вот мой установщик Level 1: вызывается в загрузчике, срабатывает только когда RDP установлен в Level 0

#define MCU_OPT_BEG    0x1FFFF800

#define LockNVMOp()    FLASH->CR      = FLASH_CR_LOCK
#define UnlockROMOp()  FLASH->KEYR    = 0x45670123, FLASH->KEYR = 0xCDEF89AB
#define UnlockOptOp()  FLASH->OPTKEYR = 0x45670123, FLASH->OPTKEYR = 0xCDEF89AB
#define ClrROMOpSReg() FLASH->SR      = FLASH_SR_PGERR | FLASH_SR_WRPERR | FLASH_SR_EOP
#define UpdSysOpt()    FLASH->CR      = FLASH_CR_OBL_LAUNCH
#define isROMBsy()     (FLASH->SR & FLASH_SR_BSY)

void hw_InitOpt(void)
{
#define RDP_LVL0 0xAA
#define RDP_LVL1 0x12
#define WRP_SECT (B1 | B0)
#define RDP(t)   (OPT(t)[0])
#define WRP      (&OPT(u16)[4])
#define OPT(t)   ((volatile t *)MCU_OPT_BEG)
  if(RDP(u8) == RDP_LVL0)
  {
    UnlockROMOp();
    UnlockOptOp();
    FLASH->CR |= FLASH_CR_OPTER;
    FLASH->CR |= FLASH_CR_STRT;
    while(isROMBsy()){} ClrROMOpSReg();
    FLASH->CR = FLASH_CR_OPTPG |
                FLASH_CR_OPTWRE;
    RDP(u16)  = (u8)~RDP_LVL1 << 8 | RDP_LVL1;
    while(isROMBsy()){} ClrROMOpSReg();
    WRP[0] = WRP_SECT << 8 | (u8)~WRP_SECT;
    while(isROMBsy()){} ClrROMOpSReg();
    LockNVMOp();
    UpdSysOpt();
  }
}


P.S. Еще и загрузчик от записи защищает, устанавливая защиту на сектора 1 и 2.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В том же самом RM0360:

3.2.2         Flash program and erase operations

3 часа назад, MiklPolikov сказал:

Если страница где OPTION BYTES стерта, и в этот момент пропало питание, то происходит невозвратный глюк ?

Возвратный :), невозвратным он станет если RPD установится в Level2.

2 минуты назад, Сергей Борщ сказал:

Не совсем - прошивка остается защищенной от чтения, после подачи питания можно изнутри программы вычитать option bytes и поставить в желаемое положение.

"When the RPD is reprogrammed to the value 0xAA to move back to Level 0, a mass
erase of the main Flash memory is performed."

Но это только если снять и снова подать питание (или сделать ресет), потому что option bytes считываются и применяются после сброса, а не сразу после их изменения.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...