我可以使用一些帮助来了解如何为 M33 配置 MPC。我使用带有 AN505 (IOTKit_CM33) 的 MPS2+ 板。我运行 uVision Pack 安装程序提供的示例 TrustZone 代码。
背景:器件 AN505 具有 SSRAM1 (4MB) 和 SSRAM3 (2MB)。SSRAM1 映射到 1) 0x0000_0000 - 0x003F_FFFF (NS) 2) 0x0040_0000 - 0x007F_FFFF (NS) 3) 0x1000_0000 - 0x103F_FFFF (S) 和 4) 0x1040_0000 - 0x107F_FFFF (S)。SSRAM3 映射到 1) 0x2820_0000 - 0x283F_FFFF (NS) 和 2) 0x3820_0000 - 0x383F_FFFF (S)。SSRAM1 的 MPC 块大小为 128KB。SSRAM3 的块大小为 64KB。
我们将 SSRAM1 的一半配置为普通世界,将整个 SSRAM3 配置为普通世界。
示例代码显示
/* configure unsecure code area MPSSSRAM1 (0x00200000 - 0x003FFFFF) */
// blk_max = IOTKIT_MPCSSRAM1->BLK_MAX; /* = 0x1 */
// blk_cfg = IOTKIT_MPCSSRAM1->BLK_CFG; /* = 0xC */
// blk_size = 1UL << (blk_cfg + 5U); /* = 0x20000 = 128 kB, 4MB / 128kB = 32 bit*/
// blk_cnt = 0x200000U / blk_size; /* = 0x10 */
IOTKIT_MPCSSRAM1->CTRL &= ~(1UL << 8U); /* clear auto increment */
IOTKIT_MPCSSRAM1->BLK_IDX = 0; /* write LUT index */
IOTKIT_MPCSSRAM1->BLK_LUT = 0xFFFF0000UL; /* configure blocks. 0x00200000-0x003fffff: non-secure; 0x00000-0x1ffff: secure, alias to 0x10000000-0x101fffff*/
/* configure unsecure data area MPSSSRAM3 (0x28200000 - 0x283FFFFF) */
// blk_max = IOTKIT_MPCSSRAM3->BLK_MAX; /* = 0x1 */
// blk_cfg = IOTKIT_MPCSSRAM3->BLK_CFG; /* = 0xB */
// blk_size = 1UL << (blk_cfg + 5U); /* = 0x10000 = 64 kB, 2MB / 64 kB = 32 bit */
// blk_cnt = 0x200000U / blk_size; /* = 0x20 */
IOTKIT_MPCSSRAM3->CTRL &= ~(1UL << 8U); /* clear auto increment */
IOTKIT_MPCSSRAM3->BLK_IDX = 1; /* write LUT index */
IOTKIT_MPCSSRAM3->BLK_LUT = 0xFFFFFFFFUL; /* configure blocks */
这对我来说没有意义:
SSRAM3 为 2MB。它应该有 2048KB/64KB = 32 个块。所以,我们应该只需要 1 个 BLK_LUT。因此,我们应该设置 BLK_IDX = 0。但是代码将 BLK_IDX 设置为 1。
在设置 SSRAM1 的注释中,它说“blk_cnt = 0x10”。这是一个错误吗?不应该是 0x400000/blk_size = 0x20。由于这只是一个评论,我想无论如何都没关系。
我在这里很困惑。先感谢您。