0

我可以使用一些帮助来了解如何为 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 */

这对我来说没有意义:

  1. SSRAM3 为 2MB。它应该有 2048KB/64KB = 32 个块。所以,我们应该只需要 1 个 BLK_LUT。因此,我们应该设置 BLK_IDX = 0。但是代码将 BLK_IDX 设置为 1。

  2. 在设置 SSRAM1 的注释中,它说“blk_cnt = 0x10”。这是一个错误吗?不应该是 0x400000/blk_size = 0x20。由于这只是一个评论,我想无论如何都没关系。

我在这里很困惑。先感谢您。

4

0 回答 0