保姆级图解:DP协议里的SST协议到底怎么组包?从BS、SR到TU单元全拆解
在数字视频传输领域,DisplayPort(DP)协议凭借其高带宽和灵活性已成为行业标准。但对于刚接触SST(Single-Stream Transport)协议的开发者来说,协议文档中抽象的描述往往让人望而生畏。本文将通过全图解方式,带您一步步拆解数据包组装过程,让每个控制符号的作用和插入时机变得一目了然。
1. SST协议基础:七大关键控制符号解析
SST协议的核心在于七种控制符号的精确编排。这些符号就像乐谱中的休止符,虽然不承载实际像素数据,却决定着数据流的节奏与结构。让我们先认识这些"幕后指挥家":
| 符号 | 编码值 | 名称 | 主要作用场景 |
|---|---|---|---|
| BS | 8'hBC | Blanking Start | 垂直消隐期开始/行数据结束标志 |
| BE | 8'hFB | Blanking End | 垂直消隐期结束/行数据开始标志 |
| SR | 8'h1C | Scrambler Reset | 加扰器复位信号(每512个BS替换1次) |
| FS | 8'hFE | Fill Start | TU单元填充区起始标志 |
| FE | 8'hF7 | Fill End | TU单元填充区结束标志 |
| SS | 8'h5C | Stream Start | 音频数据包起始标志 |
| SE | 8'hFD | Stream End | 音频数据包结束标志 |
BS与BE的黄金组合构成了视频数据的"标点符号":
- 每行有效像素结束后插入BS
- 下一行有效像素开始前插入BE
- 在无视频数据时,BS以8192符号为周期维持链路同步
注意:当启用内容保护(CP)模式时,会使用特殊变体CPBS和CPSR,其编码值与标准模式不同。
2. 数据流组装全景图:从像素到传输单元
理解SST协议的关键在于掌握数据从原始像素到线缆上符号流的转换过程。下图展示了典型的数据组装流水线:
[像素数据] → [TU单元划分] → [填充符号插入] → [MSA信息添加] → [加扰处理] → [物理层传输]2.1 TU单元的精妙设计
传输单元(TU)是SST协议的核心容器,每个TU固定为64字节。其内部结构遵循以下规则:
有效数据计算:
valid_symbols = round((packed_data_rate / link_symbol_rate) * 64)其中:
- packed_data_rate = 实际像素数据速率
- link_symbol_rate = 链路符号速率(通常为链路时钟的1/10)
填充规则:
- 当有效数据不足64字节时,用FS/FE标记填充区域
- 单填充符号时仅使用FE
- 双填充符号时使用FS+FE组合
典型TU结构示例:
[有效数据][FS][填充数据][FE][有效数据]...
3. 时序控制:消隐期与加扰复位详解
3.1 垂直消隐期的符号编排
消隐期数据流需要严格遵循以下时序结构:
[BE]...[视频数据]...[BS]...[SR]...[BE]...关键要点:
- 每512个BS必须替换为1个SR(加扰器复位点)
- 音频数据包需用SS/SE包裹后插入消隐区
- MSA(Main Stream Attributes)信息需重复传输4次
3.2 加扰器复位机制图解
加扰是DP协议的重要特性,而SR符号是其同步关键。下图展示了典型的复位时序:
[BS][BS]...[BS][SR][BS]...[BS]... 1 2 511 512 513 1023提示:在FPGA实现中,建议使用计数器监控BS数量,达到511时下一个周期输出SR而非BS。
4. 实战调试:常见问题与信号观测技巧
在实际硬件调试中,以下几个观测点能快速定位问题:
眼图测量点:
- BS/BE符号边缘(检查时序对齐)
- SR符号后的第一个数据符号(验证加扰复位)
逻辑分析仪触发设置:
// 示例:捕获SR符号的Verilog代码 always @(posedge clk) begin if(phy_data == 8'h1C && phy_control) sr_detected <= 1'b1; endTU填充异常排查步骤:
- 检查计算出的valid_symbols值是否合理
- 验证FS/FE符号是否按规则插入
- 确认最后一个TU的填充处理是否正确
通过本文的图解拆解,相信您已经掌握了SST协议组包的核心要点。在实际项目中,建议先用仿真工具构建数据流模型,再逐步移植到硬件平台,这种"先软后硬"的方法能显著提高开发效率。