48730

[i] Начало работы с криптоядром микроконтроллера «К1986ВК01GI »

Дата последнего изменения: 07.06.2022 11:13:55

Для работы с криптоядром на отладочной плате предусмотрен разъем для подключения отладчика – «SWD Crypto». Но для того, чтобы криптоядро стало доступно, необходимо включить его тактирование с помощью основного ядра Cortex-M4. Таким образом, понадобятся два отладчика – один из которых будет подключен к соответствующему разъему для JTAG-отладчика ядра Cortex-M4 (позиционное обозначение разъема намеренно не указано, так как на различных версиях плат обозначение может отличаться друг от друга), а другой – к разъему для отладки криптосопроцессора «SWD Crypto».

Криптоядро поддерживает только интерфейс SWD.

В статье используются два проекта (архивы и sfr-файлы для просмотра регистров находятся в конце статьи):

-Cryptoclock (включение частоты криптоядра);

-Cryptohello (запуск периферийного блока криптосопроцессора – генератора случайных чисел).

Для использования sfr-файлов необходимо задать корректный путь к ним в настройках каждого проекта. В Options for Target -> Target - > поле "System Viewer File". 

Для того чтобы отлаживать программы криптосопроцессора, нужно выполнить следующую последовательность действий:

1. подключить отладчик для Cortex-M4 к разъему – JTAG A или JTAG B (в зависимости от выбранного режима загрузки), второй отладчик – к разъему «Crypto SWD»;

2. подать питание на плату;

3. запустить проект Cryptoclock. Основные настройки проекта представлены на рисунках 1 и 2.

 Рисунок 1 - Настройки проекта для ядра Cortex M4 в Keil (Options for Target->Device).

 Рисунок 2 - Настройки проекта для ядра Cortex M4 в Keil (Options for Target->Target).

 Рисунок 3 - Настройки проекта для ядра Cortex M4 в Keil (Options for Target->C/С++). В поле Include Paths указан путь, по которому лежит заголовочный файл cm4ikmcu.h

 Рисунок 4 - Настройки проекта для ядра Cortex M4 в Keil (Options for Target->Debug)

 Рисунок 5 - Настройки проекта для ядра Cortex M4 в Keil (Options for Target->Debug->Settings->Flash Download) 

Остальные настройки аналогичны основным настройкам проекта, как, например, Настройки проекта для 1986ВЕ9х.

В проекте Cryptoclock настраивается тактирование криптоядра. Криптоядро относится к группе периферийных блоков, имеющих асинхронную тактовую частоту. Адрес асинхронного регистра задания частоты блока CRPT 0х4000 01E0. Общее описание асинхронного регистра управления частотой периферийного блока представлено в спецификации в таблице с аналогичным названием. По сбросу по питанию источником тактовой частоты является HSI. Для записи в регистра блока CLK_CNTR необходимо записать в регистр KEY значение 0х8555AAA1.

4. запустить режим отладки;

5. открыть в System Viewer Windows регистры CLK_CNTR.

6. запустить программу на выполнение и убедиться, что в CRPT_CLK поле EN_CLK выставилось в «1». После этого на отладочной плате необходимо обязательно нажать кнопку KEY RESET. Если кнопка не была нажата, то в проекте Cryptohello ядро будет не определено.

 Рисунок 6 - Результат запуска проекта Cryptoclock

7. открыть проект Cryptohello;

Если при попытке запустить проект выдается сообщение об ошибке, то необходимо проверить была ли нажата кнопка "KEY RESET". 
В настройках проекта необходимо убедиться, что выбран корректный отладчик (именно тот, который подключен к криптоядру). Проверить, что выставлен режим работы SWD, задан файл инициализации RAM.ini.

В проекте Cryprohello настраивается работа генератора случайных чисел. При запуске в режиме отладки можно увидеть изменяющиеся значения в регистрах блока.

8. запустить проект Cryptohello в режиме Debug;

 Рисунок 7 - Результат исполнения программы криптосопроцессора

Работа с прерываниями

Как уже известно, в ядрах Cortex M0 таблица прерываний непереносима и всегда расположена по адресу 0x0. В приведённой выше конфигурации мы загружаем программу начиная с адреса 0x20000000, следовательно в виду непереносимости таблицы, прерывания работать не будут. Чтобы работа с прерываниями была возможна необходимо располагать программу по тому же адресу, что и таблица с векторами - по адресу 0x0. Но при старте в этой области памяти располагается внутренний загрузчик. В криптоядре данного контроллера есть возможность сделать "remap" ram памяти на адресное пространство с 0-го адреса. Для этого необходимо, перед загрузкой программы с помощью отладчика, установить соответствующий бит в регистре  SYS->MMAP, предварительно разрешив тактирование. Итого, чтобы работали прерывания необходимо изменить файл инициализации *.ini


FUNC void Setup (unsigned int region) {

  region &= 0xFFFFF000;
  SP = _RDWORD(region);                          // Setup Stack Pointer
  PC = _RDWORD(region + 4);                          // Setup Program Counter
}



FUNC void SetupRemap (void) {
    
  _WDWORD(0x40200008, 0x007FFFFF);                   // ckl enable
  _WDWORD(0x40200014, 0x00000001);                  // remap

}

/*-------------------------------------------*/
/* Executes upon software RESET;             */
/*  (Use the function name as is)            */
/*-------------------------------------------*/
FUNC void OnResetExec(void)  {       
  Setup(0x0); 
}  

SetupRemap();
LOAD $L%L INCREMENTAL 
Setup(0x00000000); // Get ready to execute image in SRAM or whatever region it is in
g,main

и изменить адреса, под которые компилируется программа.
 Рисунок 8 -  Измененные настройки проекта для ядра Cortex M4 в Keil (Options for Target->Target).
Сохранить статью в PDF

Файлы для скачивания

Документация

Теги

Была ли статья полезной?