在启用TrustZone的LPC55S69项目中,SD_CardInit()陷入无限循环的可能原因及解决方案如下:
解决方案:
SDIF1或SDIO)的SEC_CFG标记为安全外设。GPIO0)被设置为安全。security.c中):
/* 设置SDMMC控制器为安全 */
SYSCON->AHBCLKCTRLSET[0] = SYSCON_AHBCLKCTRL_SDIO_MASK;
SYSCON->SECCTRLSET = SYSCON_SECCTRL_SDIOSEC_MASK;/ 设置GPIO端口为安全 /
SYSCON->AHBCLKCTRLSET[0] |= SYSCON_AHBCLKCTRL_GPIO0_MASK;
GPIO->SECCTRL[0] |= (1U << pin_number); // 设置具体引脚为安全
SD_CardInit()中时钟分频配置是否适合当前SD卡版本(如HS/Default模式)。SDMMC_CLK引脚是否有波形输出。sd_card_config_t)定义在安全内存区域(如.sdata或显式标记为安全的内存)。.ld文件),确认安全侧代码和数据的地址范围正确。IOCON->PIO[]寄存器)。BOARD_Init()函数,检查是否存在缺失的初始化步骤。SD_CardInit()中的具体位置(如等待CMD0响应超时)。SDMMC->STATUS寄存器,确认是否有错误标志(如CMD_TIMEOUT)。SDMMC->CLOCK和SDMMC->POWER寄存器配置是否生效。security.c、clock_config.c、pin_mux.c文件差异。| 配置项 | 安全侧要求 |
|---|---|
| SDMMC控制器 | 标记为安全外设(SEC_CFG) |
| GPIO引脚 | 复用为SD功能 + 安全权限 |
| 时钟 | 启用SDMMC时钟 + 正确分频 |
| 数据缓冲区 | 位于安全内存区域 |
通过上述步骤逐一排查,应能解决SD卡初始化卡死的问题。
举报
更多回帖