一、SFP光模块概述
大家好,我是老张。做光模块固件开发十几年了,今天咱们聊聊SFP光模块的基础知识。说实话,很多新手一上来就扎进I2C协议细节里,结果连SFP的引脚是干嘛的都没搞清楚。嗯,这不行。万丈高楼平地起,咱们先把地基打牢。
1.1 SFP标准的演进
SFP,全称Small Form-factor Pluggable,小封装可插拔光模块。这东西最早是2001年由SFF委员会搞出来的标准。我入行那会儿,用的还是GBIC模块,个头大得像块砖头。后来SFP一出来,体积直接缩小了一半多,端口密度翻倍,大家都很兴奋。
标准演进大致是这样的:
- SFP (INF-8074i):第一代,速率最高4.25Gbps,定义了基本引脚和I2C接口
- SFP+ (SFF-8431):速率提升到10Gbps,增强了信号完整性要求
- SFP28:25Gbps速率,兼容SFP+接口
- SFP56:50Gbps速率,PAM4调制技术
- SFP-DD:双密度,速率可达100Gbps
你想想看,从4G到100G,二十多年翻了25倍。但有意思的是,引脚定义基本没变。这说明什么?说明当初的设计很有远见。
核心要点:SFP标准的核心是SFF-8472,它定义了I2C的存储器映射。这个文档我翻了不下百遍,每次做新项目都要拿出来对照。
1.2 光模块分类
光模块的分类方式很多,我按最常见的几种给大家捋一捋:
按速率分
| 类型 | 速率 | 典型应用 |
|---|---|---|
| SFP | 100M-4.25G | 千兆以太网、1G/2G FC |
| SFP+ | 8.5G-10G | 10G以太网、8G/16G FC |
| SFP28 | 25G | 25G以太网、100G(4通道) |
| SFP56 | 50G | 50G以太网、200G(4通道) |
按传输距离分
- SR(短距):几百米,多模光纤,850nm波长
- LR(长距):10公里,单模光纤,1310nm波长
- ER(超长距):40公里,单模光纤,1550nm波长
- ZR(极长距):80公里以上,需要外置光放大器
我记得有一次项目,客户非要拿SR模块跑10公里链路。我说不行,他不信。结果一测,误码率惨不忍睹。后来乖乖换了LR模块。所以啊,选型别图省事,距离和波长必须匹配。
1.3 SFP引脚定义与功能
SFP模块有20个引脚,编号从1到20。我习惯把它们分成几组:
| 引脚 | 名称 | 功能 | 方向 |
|---|---|---|---|
| 1 | VeeT | 发射器地 | - |
| 2 | Tx_Fault | 发射故障告警 | 输出 |
| 3 | Tx_Disable | 发射关断控制 | 输入 |
| 4 | SDA | I2C数据线 | 双向 |
| 5 | SCL | I2C时钟线 | 输入 |
| 6 | Mod_ABS | 模块在位检测 | 输出 |
| 7-10 | RS0, RS1, RX_LOS, VeeR | 速率选择、接收告警、接收器地 | 输入/输出 |
| 11-14 | VeeR, VeeR, RD-, RD+ | 接收器地、差分数据输出 | 输出 |
| 15-20 | VccR, VccT, VeeT, TD+, TD-, VeeT | 电源、发射器地、差分数据输入 | 输入 |
个人经验:引脚4和5(SDA/SCL)是I2C总线,这是咱们固件开发的核心。我建议在设计电路板时,这两根线要加4.7kΩ上拉电阻到3.3V。曾经有个项目没加上拉电阻,I2C死活不通,查了两天才发现。
1.4 I2C总线在SFP中的作用
I2C总线在SFP模块里扮演什么角色?说白了,就是主机(交换机/路由器)和模块之间的通信通道。通过它,主机可以:
- 读取模块信息:厂商名、型号、序列号、速率能力等
- 监控运行状态:温度、电压、偏置电流、发射功率、接收功率
- 控制模块行为:关断发射、速率切换、数字诊断使能
- 告警上报:温度超标、电压异常、光功率过低等
SFP模块的I2C地址是固定的:
- A0h:读取模块基本信息(128字节)
- A2h:读取诊断监控数据(128字节)
为什么会用两个地址?因为SFF-8472标准把存储空间分成了两块。A0h存的是出厂固化信息,只读。A2h存的是实时监控数据,可读写。我刚开始做的时候,老是把A0h和A2h搞混,读出来的数据完全不对。后来养成了习惯,每次读写前先确认地址。
避坑指南:我曾经遇到过一个问题——模块插上后I2C通信正常,但读出来的温度值永远是0。查了半天,发现是A2h地址的校验和没更新。很多模块在出厂时校验和是错的,导致主机端校验失败,直接丢弃了数据。解决办法是重新计算校验和并写入。
知识体系结构图
下面这张图是我自己画的,把SFP光模块的知识体系串起来了。你看一眼就能明白各个知识点之间的关系:
这张图把咱们今天讲的内容都串起来了。你看,标准演进是时间线,分类是选型依据,引脚是硬件接口,I2C是通信手段。四者缺一不可。
总结一下:SFP光模块的I2C通信,本质上就是通过两根线(SDA/SCL)访问模块内部的存储器。A0h地址存的是模块的"身份证",A2h地址存的是模块的"体检报告"。搞清楚了这两个地址,你就掌握了SFP固件开发的一半。
好了,第一章就到这里。内容不多,但都是基础中的基础。下一章咱们会深入I2C协议的细节,包括时序、读写操作、以及常见的坑。到时候见。