STM32H750的DLYB是一个专门用于生成移相时钟的硬件模块。它的核心用途是为SDMMC或QSPI等高速接口提供精准的采样时钟,让主控能准确抓取外部设备发来的数据。
本质:一条 12 级(或若干单元)的片上延迟线(Unit Delay Line),输入一个时钟(如 SDMMC_CK、QSPI/OCTOSPI 的反馈时钟或 DQS),输出一个同频但相位可调的时钟。
调节方式:固件写寄存器选 SEL[3:0] 相位 + UNIT[6:0] 微调每级延迟,最多给出 12 个过采样相位。
输入时钟范围:手册写 25–208 MHz(部分 H7 型号 OCTOSPI 相关备注到 250 MHz)。
关键特性:纯硬件延迟,不占 CPU;但延迟量随 PVT(工艺/电压/温度)漂移,不自动补偿,需要软件在初始化或运行中重校准
高速接口里,MCU 发出的时钟到外部器件再带着数据回来,PCB 走线、缓冲器、IO 缓冲都会引入延迟。结果是:
时钟边沿和数据边沿不对齐(常是 edge-aligned)
如果直接用发出去的时钟采返回数据,容易踩在 data eye 的边沿上 → 偶发误码
DLYB 的作用就是:把“用来采接收数据的那一路时钟”人为推迟 1/4 周期左右,让采样沿落在数据最稳的中间位置。
H750 里 DLYB 不是全局只有一个,而是按外设实例绑定:
DLYBYP 位选择旁路还是启用)它不参与 GPIO 通用延时,也不是定时器里的延迟——只服务“高速串行存储/卡接口的输入采样”。
由于DLYB是一个与硬件强相关的底层外设,其操作有严格的顺序,以下是标准的配置流程:
首先,通过设置控制寄存器(DLYB_CR)中的使能位(DEN)来开启DLYB模块。紧接着,在同一寄存器中设置采样使能位(SEN),进入配置状态。此时,输出时钟会被暂时关闭。
通过修改控制寄存器中的UNIT位,可以微调每个单位延迟单元的基础延迟时间。需要注意,这步操作只能在SEN = 1(即配置状态)下进行。
在SEN = 1的状态下,硬件会自动测量并计算出能让延迟链总长度正好覆盖一个输入时钟周期的配置值。这个结果会更新到配置寄存器(DLYB_CFGR)的LNG位,同时硬件会置位长度有效标志位(LNGF),表示校准已完成。
此时,你可以在配置寄存器(DLYB_CFGR)中,通过SEL位来选择你需要的相位节点(即从0到最大相位点之间的某个位置)。同样,这个选择也只能在SEN = 1的配置状态下进行。
最后,清除控制寄存器中的采样使能位(SEN = 0)。这一步会退出配置状态,同时使能输出时钟多路选择器,刚才选定的移相时钟便会出现在dlyb_out_ck引脚上。
初始化顺序:先开自由运行时钟 → 使能 DLYB(DEN=1)→ 测延迟线长度(轮询 LNGF)→ 选中间好相位(SEL)→ 关 SEN 输出时钟。
校准不是配一次就完:温度电压变了,原来“good phase”可能变 fail,长期运行产品要做周期性重校准或上电校准。
DLYBYP=1 是旁路模式,新手调试可以先旁路,稳定后再开 DLYB 找最佳相位。
示波器量不出来 DLYB 内部延迟,只能靠**读数据比对模式(tuning block / read-test-pattern)**判断哪个相位不报错。
SDMMC 跑高速模式
4-bit SD 卡、eMMC 跑到 50 MHz 以上(SDMMC 时钟 100–208 MHz 分频后)
UHS-I 模式(SDR50/DDR50)— ST 明确说可变延迟 UHS-I 卡必须调 DLYB
读数据偶发 CRC 错、用示波器看眼图偏边沿
QSPI / OCTOSPI 外挂 Flash 或 HyperRAM
SDR 模式下 QSPI 时钟较高(>50 MHz)
DTR(双沿)/ DDR 模式、HyperBus、Octal Flash 带 DQS 信号时——DQS 和 DQ 是边沿对齐的,不延迟 DQS 几乎必错
XIP 从外部 Flash 跑代码,要求零重试稳定
PCB 走线较长或阻抗/长度不匹配
CLK 和 DQS/DQ 长度差大,板级延迟不能忽略
用了外部电平转换 IC、缓冲器,额外引入 ns 级偏移
过温/宽压工业环境
开机校准一次不够,需要在运行中定期 recenter 相位
低速 SPI/I2C/UART/GPIO(那些根本不走 DLYB)
QSPI 只在 < 25 MHz 且 SDR,板很短,眼图很宽 → 可以 DLYBYP=1 旁路掉
纯输出场景(只写 Flash 不读,或 SD 只发命令不收大数据)
用 FMC 并行 NOR/NAND(那是另一个时序模型,跟 DLYB 无关)
本文作者:ZeroEngineer
本文链接:
版权声明:文章部分内容来源网络分享知识和经过人工智能加工处理过。如有侵权,请联系 1213190608@qq.com 进行删除。