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

CRP защита LPC2300

Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4

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


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

Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4

Нужно записать по соответствующему адресу (0x1FC кажется) число ( например 0x876543321 ) в зависимости от нужного уровня CRP .

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


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

Это все я знаю из даташита, но как грамотно это можно сделать в uvision, на данном этапе я после таблици прерывания добавляю код

 

CRP_Level EQU 0x87654321

IF :LNOT::DEF:NO_CRP

AREA |.ARM.__at_0x01FC|,CODE,READONLY

CRP_Key DCD CRP_Level

ENDIF

 

после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код, больше чем уверен что в микровижене эта прочидура делается более грамотнее.

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


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

Реализация записи константы по определенному адресу от IDE мало зависит. Или Вы ждете волшебного окошечка с галочками? =)

 

PS: Вы должны зарезервировать в линкере область памяти (я создаю секцию под именем crp) и написать что-то типа:

#define NO_CRP 0xFFFFFFFF 
#define CRP1_MAGIC 0x12345678 
#define CRP2_MAGIC 0x87654321
//#define CRP3_MAGIC 0x43218765

#define CURRENT_CRP_SETTING NO_CRP

const unsigned int g_crp_magic_word __attribute__((section("crp"))) = CURRENT_CRP_SETTING;

 

PPS:

после этого видно что по нужному адресу записано нужное значение, но вокруг этого адреса присутсвует код

А что Вы хотите, чтобы было вокруг этого адреса?..

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


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

Реализация записи константы по определенному адресу от IDE мало зависит. Или Вы ждете волшебного окошечка с галочками? =)

 

PS: Вы должны зарезервировать в линкере область памяти (я создаю секцию под именем crp) и написать что-то типа:

#define NO_CRP 0xFFFFFFFF 
#define CRP1_MAGIC 0x12345678 
#define CRP2_MAGIC 0x87654321
//#define CRP3_MAGIC 0x43218765

#define CURRENT_CRP_SETTING NO_CRP

const unsigned int g_crp_magic_word __attribute__((section("crp"))) = CURRENT_CRP_SETTING;

 

PPS:

 

А что Вы хотите, чтобы было вокруг этого адреса?..

 

Ок попробую ваш метод, а в линкере. Но этот метод я видел на сайте KEIL и он почемуто у меня не прокатил, т.к. там отличия в моем sct файле и sct файле в документации.

Вокруг этого адреса я бы хотел видеть, код после векторов прерывания начинался допустим с 0x200 адреса, а промежуток от векторов до CRP в 0xFF

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


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

Реализация записи константы по определенному адресу от IDE мало зависит.

От компилятора и линкера подобные вещи всё-таки зависят.

 

 

Как вариант, можно просто написать

const int CRP __attribute__ ((at(0x1FC))) = ...;

без редактирования скаттер-файла.

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


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

Ок попробую ваш метод, а в линкере. Но этот метод я видел на сайте KEIL и он почемуто у меня не прокатил, т.к. там отличия в моем sct файле и sct файле в документации.

Вокруг этого адреса я бы хотел видеть, код после векторов прерывания начинался допустим с 0x200 адреса, а промежуток от векторов до CRP в 0xFF

Резервирование в линкере области памяти и подразумевает редактирование sct файла.

 

От компилятора и линкера подобные вещи всё-таки зависят.

Для Вас компилятор/линкер и IDE одно и тоже?

Можно компилятор iar/keil прикрутить к ide эклипсу. ;)

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


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

Подскажите как правильно включить CRP защиту для LPC2300 в среде программирования uvision4

 

В файле "LPC2300.s", в самом его конце, перед последней строкой, содержащей слово "END", вставляете вот это:

 

AREA |.ARM.__at_0x01FC|, CODE, READONLY

ABS_ADDRESS DCD 0x87654321

AREA |.text|, CODE, READONLY

 

Больше ничего править не надо. Разумеется, число 0x87654321 для CRP2. Для других режимов защиты примяняйте соответствующуие коды

 

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


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

В файле "LPC2300.s", в самом его конце, перед последней строкой, содержащей слово "END", вставляете вот это:

 

AREA |.ARM.__at_0x01FC|, CODE, READONLY

ABS_ADDRESS DCD 0x87654321

AREA |.text|, CODE, READONLY

 

Больше ничего править не надо. Разумеется, число 0x87654321 для CRP2. Для других режимов защиты примяняйте соответствующуие коды

 

а почему не в сях?

 

я всегда примерно такое вставляю (разумеется, средства для заливки софта есть)

#define IS_DEBUG  0
#define IS_EMC    0
#define IS_WDT    0
#define IS_UART   0
#define IS_SPI    0
#define IS_I2C    0

#if (IS_DEBUG)
unsigned int const CRP3  __attribute__((at(0x1FC))) = 0xFFFFFFFF;
#else
unsigned int const CRP3  __attribute__((at(0x1FC))) = 0x43218765;
#endif

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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