本资源的原文使用英文撰写。 为方便起见,TI 提供了译文;由于翻译过程中可能使用了自动化工具,TI 不保证译文的准确性。 为确认准确性,请务必访问 ti.com 参考最新的英文版本(控制文档)。
本文档是 DS160PR810 八通道 PCI-Express 第 4 代线性转接驱动器的编程参考。本文档包含与 DS160PR810 高级配置选项相关的详细信息。目标受众包括从事系统诊断和控制软件工作的软件工程师。
TI 建议读者熟悉 DS160PR810 数据表。本文档以及与 DS160PR810 转接驱动器相关的所有其他配套资料数据(应用手册、模型等)可从 TI 网站下载。此外,可以联系您当地的德州仪器 (TI) 现场销售代表。
设计人员可以通过两种方式来访问 DS160PR810。这两种方法为:
可通过标准 SMBus 协议访问 DS160PR810 内部寄存器。DS160PR810 具有两个通道组,即组 0(通道 0 - 3)和组 1(通道 4-7),每个通道都具有单独的寄存器集并需要唯一的 SMBus 从地址。在上电时会根据 EQ0_0 / ADDR1 和 EQ1_0 / ADDR0 引脚的配置来确定 SMBus 从地址对(每个通道组一个)。当内部上电复位信号置为无效后,上电时读取引脚状态。
EQ0_0 / ADDR1 和 EQ1_0 / ADDR0 引脚以及 MODE、GAIN0、GAIN1、EQ0_1、EQ1_1 和 RX_DET 引脚均为 4 级输入引脚,用于控制器件的配置。这些四电平输入使用电阻分压器来帮助设置四个有效电平,如表 1-1 所示。
引脚电平 | 引脚设置 |
---|---|
L0 | 1kΩ 至 GND |
L1 | 13kΩ 至 GND |
L2 | 59kΩ 至 GND |
L3 | 浮点 |
可通过在 EQ0_0 / ADDR1 和 EQ1_0 / ADDR0 引脚上放置外部电阻器搭接,可以为器件分配 16 个唯一的 SMBus 从地址对(每个通道组一个地址),如表 1-2 所示。当多个 DS160PR810 器件位于同一 SMBus 接口总线上时,每个器件的每个通道组必须配置一个唯一的 SMBus 从地址对。
ADDR1 引脚电平 | ADDR0 引脚电平 | 组 0:通道 0-3: 7 位地址 [HEX] | 组 1:通道 4-7: 7 位地址 [HEX] |
---|---|---|---|
L0 | L0 | 0x18 | 0x19 |
L0 | L1 | 0x1A | 0x1B |
L0 | L2 | 0x1C | 0x1D |
L0 | L3 | 0x1E | 0x1F |
L1 | L0 | 0x20 | 0x21 |
L1 | L1 | 0x22 | 0x23 |
L1 | L2 | 0x24 | 0x25 |
L1 | L3 | 0x26 | 0x27 |
L2 | L0 | 0x28 | 0x29 |
L2 | L1 | 0x2A | 0x2B |
L2 | L2 | 0x2C | 0x2D |
L2 | L3 | 0x2E | 0x2F |
L3 | L0 | 0x30 | 0x31 |
L3 | L1 | 0x32 | 0x33 |
L3 | L2 | 0x34 | 0x35 |
L3 | L3 | 0x36 | 0x37 |
DS160PR810 可在上电时自动从 EEPROM 读取其初始配置。有关此器件的 EEPROM 十六进制文件生成的详细信息,请参阅了解 DS160PR810 PCI-Express 4.0 线性转接驱动器的 EEPROM 编程 应用报告。
DS160PR810 具有两种类型的寄存器:
单个通道组的共享寄存器和通道寄存器都包含在单个寄存器页面中,如表 2-1 所示。
地址范围 | 通道组 0 访问 | 通道组 1 访问 |
---|---|---|
0x00 - 0x03 | 通道 0 寄存器 | 通道 4 寄存器 |
0x20 - 0x23 | 通道 1 寄存器 | 通道 5 寄存器 |
0x40 - 0x43 | 通道 2 寄存器 | 通道 6 寄存器 |
0x60 - 0x63 | 通道 3 寄存器 | 通道 7 寄存器 |
0x80 - 0x83 | 广播写入通道组 0 寄存器、读取通道 0 寄存器 | 广播写入通道组 1 寄存器、读取通道 4 寄存器 |
0xA0 - 0xA3 | 广播写入通道 0-1 寄存器、读取通道 0 寄存器 | 广播写入通道 4-5 寄存器、读取通道 4 寄存器 |
0xC0 - 0xC3 | 广播写入通道 2-3 寄存器、读取通道 2 寄存器 | 广播写入通道 6-7 寄存器、读取通道 6 寄存器 |
0xE2 - 0xE3、 0xF0 - 0xF1 |
组 0 共享寄存器 | 组 1 共享寄存器 |
DS160PR810 具有高度的可编程性,并可针对多种应用进行定制。以下各节提供了针对某些常见应用对 DS160PR810 进行编程的指导。
每个序列中提供了以下信息:
DS160PR810 需要手动 CTLE 调优。可通过修改每个 CTLE 级(EQ1 和 EQ2)的值或绕过 EQ1 级来更改 CTLE 增益电平。CTLE 电平可针对每个通道单独设定或者广播至所有通道。表 3-1 显示了一个示例序列,通过对每个通道单独执行写入操作,将组 0 通道上的 CTLE 增益电平设置为 5.0dB(8GHz 时)(CTLE 指数 2),并将组 1 通道上的 CTLE 增益电平设置为 7.0dB(CTLE 指数 4)。使用表 3-3 中提供的寄存器值将 CTLE 增益电平设置为任何其他可用值。
步骤 | 寄存器组 | 操作 | 寄存器地址 [十六进制] |
寄存器值 [十六进制] |
写入掩码 [十六进制] |
备注 |
---|---|---|---|---|---|---|
1 | 组 0:通道 0 | 写入 | 0x01 | 0x08 | 0x3F | 将通道 0 上的 CTLE 设为指数 2。 |
2 | 组 0:通道 1 | 写入 | 0x21 | 0x08 | 0x3F | 将通道 1 上的 CTLE 设为指数 2。 |
3 | 组 0:通道 2 | 写入 | 0x41 | 0x08 | 0x3F | 将通道 2 上的 CTLE 设为指数 2。 |
4 | 组 0:通道 3 | 写入 | 0x61 | 0x08 | 0x3F | 将通道 3 上的 CTLE 设为指数 2。 |
5 | 组 1:通道 4 | 写入 | 0x01 | 0x11 | 0x3F | 将通道 4 上的 CTLE 设为指数 4。 |
6 | 组 1:通道 5 | 写入 | 0x21 | 0x11 | 0x3F | 将通道 5 上的 CTLE 设为指数 4。 |
7 | 组 1:通道 6 | 写入 | 0x41 | 0x11 | 0x3F | 将通道 6 上的 CTLE 设为指数 4。 |
8 | 组 1:通道 7 | 写入 | 0x61 | 0x11 | 0x3F | 将通道 7 上的 CTLE 设为指数 4。 |
假设 0x18 和 0x19 分别是通道组 0 和 1 的 SMBus 地址,以下是表 3-1 中序列的 XML 批处理脚本:
<i2c_write addr="0x18" count="0" radix"16">01 08</i2c_write>
<i2c_write addr="0x18" count="0" radix"16">21 08</i2c_write>
<i2c_write addr="0x18" count="0" radix"16">41 08</i2c_write>
<i2c_write addr="0x18" count="0" radix"16">61 08</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">01 11</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">21 11</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">41 11</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">61 11</i2c_write>
表 3-2 显示了一个示例序列,通过对每个通道组单独执行广播写入操作,将组 0 通道上的 CTLE 增益电平设置为 5.0dB(8GHz 时)(CTLE 指数 2),并将组 1 通道上的 CTLE 增益电平设置为 7.0dB(CTLE 指数 4)。
步骤 | 寄存器组 | 操作 | 寄存器地址 [十六进制] |
寄存器值 [十六进制] |
写入掩码 [十六进制] |
备注 |
---|---|---|---|---|---|---|
1 | 组 0:通道 0-3 | 写入 | 0x81 | 0x08 | 0x3F | 将通道 0-3 上的 EQ 设置为指数 2。 |
2 | 组 1:通道 4-7 | 写入 | 0x81 | 0x11 | 0x3F | 将通道 4-7 上的 EQ 设置为指数 4。 |
假设 0x18 和 0x19 分别是通道组 0 和 1 的 SMBus 地址,以下是表 3-2 中序列的 XML 批处理脚本:
<i2c_write addr="0x18" count="0" radix"16">81 08</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">81 11</i2c_write>
表 3-3 提供了 CTLE 控制寄存器值与 CTLE 指数 (0 - 15) 之间的函数关系图。表 3-1 和表 3-2 中提供了示例 CTLE 控制寄存器地址。
CTLE 指数 | 4GHz 时的 CTLE 增益 (dB) | 8GHz 时的 CTLE 增益 (dB) | CTLE 控制寄存器值 [十六进制] |
---|---|---|---|
0 | 0.0 | -0.2 | 0x40 |
1 | 1.5 | 4.5 | 0x43 |
2 | 2.0 | 5.5 | 0x08 |
3 | 2.5 | 6.5 | 0x0A |
4 | 2.7 | 7.0 | 0x11 |
5 | 3.0 | 8.0 | 0x12 |
6 | 4.0 | 9.0 | 0x13 |
7 | 5.0 | 10.0 | 0x1A |
8 | 6.0 | 11.0 | 0x1B |
9 | 7.0 | 12.0 | 0x23 |
10 | 7.5 | 13.0 | 0x2B |
11 | 8.0 | 13.5 | 0x2C |
12 | 8.5 | 15.0 | 0x2D |
13 | 9.5 | 16.5 | 0x35 |
14 | 10.0 | 17.0 | 0x36 |
15 | 11.0 | 18.0 | 0x3F |
可为所有通道手动复位 RX 检测状态机。
步骤 | 寄存器组 | 操作 | 寄存器地址 [十六进制] | 寄存器值 [十六进制] | 写入掩码 [十六进制] | 备注 |
---|---|---|---|---|---|---|
1 | 组 0:通道 0-3 | 写入 | 0x89 | 0x04 | 0x04 | 将 RX 检测复位位设置为:1(复位 RX 检测状态机) |
2 | 组 1:通道 4-7 | 写入 | 0x89 | 0x00 | 0x04 | 将 RX 检测复位位设置为:0(清除设置位) |
假设 0x18 和 0x19 分别是通道组 0 和 1 的 I2C/SMBus 地址,以下是表 3-4 中用于复位所有通道上 RX 检测状态机的序列的 XML 批处理脚本:
<i2c_write addr="0x18" count="0" radix"16">89 04</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">89 04</i2c_write>
<i2c_write addr="0x18" count="0" radix"16">09 00</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">09 00</i2c_write>
CTLE 直流增益值可针对每个通道单独设定或者广播至所有通道。
步骤 | 寄存器组 | 操作 | 寄存器地址 [十六进制] |
寄存器值 [十六进制] |
写入掩码 [十六进制] |
备注 |
---|---|---|---|---|---|---|
1 | 组 0:通道 0-3 | 写入 | 0x82 | 0x00 | 0x04 | 将组 0 通道上的直流增益设置为:0dB(默认值)。 |
0x04 | 0x04 | 将组 0 通道上的直流增益设置为:3.5dB。 | ||||
2 | 组 1:通道 4-7 | 写入 | 0x82 | 0x00 | 0x04 | 将组 1 通道上的直流增益设置为:0dB(默认值)。 |
0x04 | 0x04 | 将组 1 通道上的直流增益设置为:3.5dB。 |
假设 0x18 和 0x19 分别是通道组 0 和 1 的 I2C/SMBus 地址,以下是表 3-5 中用于将直流增益广播为 3.5dB 的序列的 XML 批处理脚本:
<i2c_write addr="0x18" count="0" radix"16">82 04</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">82 04</i2c_write>
如果需要,可修改 DS160PR810 驱动器的差分输出电压。
步骤 | 寄存器组 | 操作 | 寄存器地址 [十六进制] |
寄存器值 [十六进制] |
写入掩码 [十六进制] |
备注 |
---|---|---|---|---|---|---|
1 | 组 0:通道 0-3 | 写入 | 0x82 | 0x00 | 0x03 | 将组 0 通道上的 VOD 设置为:-6dB |
0x01 | 0x03 | 将组 0 通道上的 VOD 设置为:-3.5dB | ||||
0x10 | 0x03 | 将组 0 通道上的 VOD 设置为:-1.6dB | ||||
0x11 | 0x03 | 将组 0 通道上的 VOD 设置为:0dB(默认值) | ||||
2 | 组 1:通道 4-7 | 写入 | 0x82 | 0x00 | 0x03 | 将组 1 通道上的 VOD 设置为:-6dB |
0x01 | 0x03 | 将组 1 通道上的 VOD 设置为:-3.5dB | ||||
0x10 | 0x03 | 将组 1 通道上的 VOD 设置为:-1.6dB | ||||
0x11 | 0x03 | 将组 1 通道上的 VOD 设置为:0dB(默认值) |
假设 0x18 和 0x19 分别是通道组 0 和 1 的 I2C/SMBus 地址,以下是表 3-6 中用于通过广播将 VOD 设为 -3.5dB 的序列的 XML 批处理脚本:
<i2c_write addr="0x18" count="0" radix"16">82 01</i2c_write>
<i2c_write addr="0x19" count="0" radix"16">82 01</i2c_write>