[i] Начало работы с криптоядром микроконтроллера «К1986ВК01GI »
Для работы с криптоядром на отладочной плате предусмотрен разъем для подключения отладчика – «SWD Crypto». Но для того, чтобы криптоядро стало доступно, необходимо включить его тактирование с помощью основного ядра Cortex-M4. Таким образом, понадобятся два отладчика – один из которых будет подключен к соответствующему разъему для JTAG-отладчика ядра Cortex-M4 (позиционное обозначение разъема намеренно не указано, так как на различных версиях плат обозначение может отличаться друг от друга), а другой – к разъему для отладки криптосопроцессора «SWD Crypto».
В статье используются два проекта (архивы и sfr-файлы для просмотра регистров находятся в конце статьи):
-Cryptoclock (включение частоты криптоядра);
-Cryptohello (запуск периферийного блока криптосопроцессора – генератора случайных чисел).
Для того чтобы отлаживать программы криптосопроцессора, нужно выполнить следующую последовательность действий:
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;
В проекте 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