Я пытаюсь настроить MPU SAMD51 (Cortex-M4) для защиты 1 КБ FLASH от любого доступа и 1 КБ SRAM от доступа для записи, который будет содержать конфиденциальную информацию, доступ к которой никогда не должен быть поврежден (с ПО).ошибка или любой другой способ).
Я хочу защитить эти разделы, даже в привилегированном (программное обеспечение не имеет ОСРВ и всегда будет в привилегированном режиме).
Поскольку код будет выполняться в привилегированномВ режиме я использую флаг MPU_CTRL_PRIVDEFENA_Msk
и хочу перезаписать доступ только для моих двух областей.
Я проверил требования к выравниванию этих разделов:
- Область 0 (в FLASH) @
0x0001d400
(выровнено 1k) - Область 1 (в SRAM) @
0x20000000
(выровнено 1k)
Найдите ниже мой код для настройки MPU:
__disable_irq();
//
// Region0
//
__DSB();
__ISB();
MPU->RNR = 0;
MPU->RBAR = (0x0001d400 << MPU_RBAR_ADDR_Pos);
// 1k size - log2(1k) = 10
MPU->RASR = ((10 - 1) << MPU_RASR_SIZE_Pos);
// Normal; Not shareable; Cacheable; Inner Write back; no write allocate
MPU->RASR |= ((0x4 << MPU_RASR_TEX_Pos) | (1 << MPU_RASR_C_Pos) | (1 << MPU_RASR_B_Pos));
// No priviledged or unpriviledge access
MPU->RASR |= (0UL << MPU_RASR_AP_Pos);
// Enable
MPU->RASR |= 1UL;
//
// Section 1
//
__DSB();
__ISB();
MPU->RNR = 1;
MPU->RBAR = (0x20000000 << MPU_RBAR_ADDR_Pos);
// 1k size - log2(1k) = 10
MPU->RASR = ((10 - 1) << MPU_RASR_SIZE_Pos);
// Normal; Not shareable; Cacheable; Inner Write back; no write allocate
MPU->RASR |= ((0x4 << MPU_RASR_TEX_Pos) | (1 << MPU_RASR_C_Pos) | (1 << MPU_RASR_B_Pos));
// Read-Only Priviledged or unpriviledge access
MPU->RASR |= (6UL << MPU_RASR_AP_Pos);
// Enable
MPU->RASR |= 1UL;
// Enable MPU
MPU->CTRL = MPU_CTRL_ENABLE_Msk | MPU_CTRL_HFNMIENA_Msk | MPU_CTRL_PRIVDEFENA_Msk;
// Enable MemFault handler
SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk;
__DSB();
__ISB();
__enable_irq();
Похоже, что конфигурация игнорируется, и она никогда не генерирует ошибку при доступе к настроенному региону.
Я много раз читал документацию ARM и не вижу, что не так ...
- Является лиВ моем коде есть ошибка?
- Не верна ли конфигурация кеша / памяти для SAMD51?
- Чего я не хочу достичь, оставаясь в привилегированном режиме?
Спасибо за помощь!