调试时优先级最高的几个状态位:
## 2.3 HS400模式特点
### 数据速率的飞跃
HS400能把时钟拉到200MHz。你想想看,HS200也是200MHz的时钟,但HS400的吞吐量翻倍——为什么?
**关键就在采样方式上**。
HS200是双数据率吗?不是。HS200其实是单数据率,只在时钟上升沿采样。那HS400呢?它用了**两个时钟边沿都采样**——上升沿和下降沿都传输数据。
说白了,HS400就是HS200的进化版:
- 时钟频率一样,但数据传输率翻倍
- 数据线数不变,靠双沿采样提速
- 增加了**数据选通信号(DS)**,用于同步接收端采样
### DS信号是最大的变化
我刚开始接触HS400模式时,最搞得头疼的就是DS信号。它不是主机发的,是eMMC设备发回来的——专门用来让主机正确采样数据。
- switch_error(bit 7):切换模式失败,HS400进不去先查这个
- ready_for_data(bit 8):设备是否准备好收发数据
- current_state(bits 12-9):当前设备状态,卡在什么状态一查便知
DS信号的频率跟时钟一样,但相位有个讲究:正常传输时,DS的边沿正好对齐数据眼的中心位置。这样主机拿DS去采样数据,采样窗口是最宽的。
### 高速模式对比
| 模式 | 时钟频率 | 数据率 | 采样边沿 | DS信号 | 电压 |
|------|----------|--------|----------|--------|------|
| HS200 | 200MHz | 200MB/s | 仅上升沿 | 无 | 1.8V/1.2V |
| HS400 | 200MHz | 400MB/s | 双沿 | 有 | 1.8V/1.2V |
| DDR50 | 50MHz | 50MB/s | 双沿 | 无 | 1.8V/3.0V |
**这里有个常见的误区**:很多人以为HS400就是DDR模式换个名字。其实不是,HS400的时序要求比DDR50严格得多。
### HS400的启动流程
进HS400不是简单写个寄存器就完事。步骤是这样的:
为什么必须先经过HS200?因为HS400的时序调校需要HS200模式下的训练结果做基准。我曾经调试过一块板子,想跳过HS200直接进HS400,结果设备根本不响应——老老实实按步骤来吧。
### 时序调校
HS400的时序调校,说白了就是**找到最合适的采样相位**。由于PCB走线延迟、PVT差异,主机收到的数据和DS信号不一定对齐在最佳采样点。调校过程会自动扫描不同的相位延迟,选出误码率最低的点。
调校失败时,通常表现为:
## 2.4 本章小结
搞明白eMMC协议基础,理解HS400的双沿采样、DS信号以及启动流程,是调试的根基。说实话这些内容在网上都能查到,但真正碰到问题的时候,能快速回想起来才是本事。下一章我会展开讲HS400模式下常见的时序问题——嗯,基本都是实战中血淋淋的教训。
- CRC错误频频出现
- 偶尔读取的数据是不对的
- 系统容易卡在数据传输阶段