UHS-I的SD卡速度比一般的CLASS10和CLASS8的SD卡速度要快很多。在stm32h7的系列里开始支持UHS-1的SD卡,具体的做法在官方的demo中有示范。电路连接如下:
由于MCU的UHS-I这端的接口与SD的卡的有所区别,所以需要一个转换电路,例子用的是IP4856CX25/C。
UHS-I 模式(SDR12、SDR25、SDR50、SDR104 和 DDR50)需要 1.8V 信号支持。上电 后,卡将以 3.3V 模式启动。CMD11 将调用电压切换序列以切换到 1.8V 模式。当电压序列 成功完成时,卡将以默认 SDR12 进入 UHS-I 模式,卡输入和输出时序将发生变化。
上图中的SD_LDO_SEL(B2)可以控制VLDO(B4)的输出电压。
要执行信号电压切换序列,需按以下步骤进行操作:
1.在启动电压切换过程之前,应将 SDMMC_CK 频率设置在 100 kHz - 400 kHz 范围内
2. 主机通过在发送 CMD11 之前将 VSWITCHEN 位置 1 来启动电压切换过程。
3. 卡返回 R1 响应。
4. 在 R1 响应之后的下一个时钟,卡将 CMD 和 SDMMC_D[3:0] 驱动为低电平。
5. 收到 R1 响应后,主机可以使用 BUSYD0 寄存器位监视 SDMMC_D0 线。SDMMC_D0 线在响应后的两个 SDMMC_CK 时钟周期后进行采样。固件可以读取 CKSTOP 标志后 的 BUSYD0 寄存器位。
6. 检测到 SDMMC_CK 为低电平后,卡会开始将信号电压切换到 1.8V。
7. 主机 SDMMC 硬件将在至少 5 ms 后重新启动 SDMMC_CK。
8. 在检测到 SDMMC_CK 切换后的 1 ms 内,卡会将 CMD 和 DAT[3:0] 驱动为高电平并至 少持续 1 个 SDMMC_CK 周期,然后停止驱动 CMD 和 DAT[3:0]。
9. 在 SDMMC_CK 重启后的 1 ms 后,主机 SDMMC 硬件会将 SDMMC_D0 采样到 BUSYD0 中并生成 VSWEND 标志。
10. 出现 VSWEND 标志时,主机将使用 BUSYD0 寄存器位检查 SDMMC_D0 线,以确认 电压切换序列是否完成。
这些在HAL库里有实现,关键是要加入这个函数
static void SD_DriveTransceiver_1_8V_Callback(FlagStatus status)
{
#if (USE_BSP_IO_CLASS > 0U)
if(status == SET)
{
BSP_IO_WritePin(0, SD_LDO_SEL_PIN, IO_PIN_SET);
}
else
{
BSP_IO_WritePin(0, SD_LDO_SEL_PIN, IO_PIN_RESET);
}
#endif
}
这个就是根据上述流程切换1.8V的使能函数,这个SD_LDO_SEL_PIN这个IO引脚需要根据个人不同的电路图进行修改。