Cortex-M33

问题描述

我可以使用一些帮助来理解如何为 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) 和 10040FFF (S) 和 10040FFF (0x0040F_FFFF)。 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。既然只是评论,我想也无所谓了。

在这里很困惑。提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)