第二章:硬件接口与引脚定义
各位工程师朋友,今天我们来聊聊QSFP28模块的硬件接口。这部分内容,说白了就是模块和系统怎么「握手」的。我刚开始接触100G光模块时,总觉得引脚定义就是看看datasheet的事,直到有一次板子打样回来,模块死活不工作……嗯,从那以后,我再也不敢小看这些引脚了。
2.1 金手指引脚排列
QSFP28模块的金手指,一共38个引脚。你想想看,要在这么小的空间里塞下高速信号、电源、控制信号,设计难度其实不小。我个人习惯把引脚分成几类来记:
- 高速信号引脚:TX/RX各4路,每路差分对
- 电源引脚:Vcc、VccTx、VccRx
- 控制引脚:SCL、SDA、ModSelL、ResetL、IntL、ModPrsL
- 地引脚:GND,数量最多
这里有个容易踩的坑——引脚编号是从金手指的「卡扣侧」开始数的。我在项目中遇到过好几次,工程师把引脚编号搞反了,结果飞线飞得想哭。
关键提醒:QSFP28的38个引脚中,有12个是GND。别嫌多,高频信号对地的完整性要求极高,少一个地都可能带来信号完整性问题。
2.2 电源管理:Vcc / VccTx / VccRx
QSFP28模块的电源设计,比我想象中要讲究。它有三个独立的电源域:
| 电源引脚 | 典型电压 | 供电对象 |
|---|---|---|
| Vcc | 3.3V | 模块内部逻辑、MCU、控制电路 |
| VccTx | 3.3V | 发射端激光驱动器、TOSA |
| VccRx | 3.3V | 接收端跨阻放大器、ROSA |
为什么要分开供电?说白了,就是防止串扰。发射端的激光器驱动电流很大,瞬间电流变化能到几十毫安。如果和接收端共用电源,接收灵敏度会受影响。我记得有一次调试,接收端误码率一直下不来,最后发现是VccTx和VccRx在PCB上没做隔离,加了个磁珠就好了。
避坑指南:我曾经遇到过模块上电时序不对导致无法识别的问题。建议先给Vcc供电,再给VccTx和VccRx。虽然QSFP28规范没有严格要求,但很多模块内部有上电复位电路,顺序错了可能锁死。
2.3 I2C总线接口:SCL / SDA
I2C总线是模块和主机通信的「命脉」。QSFP28使用标准的I2C协议,地址是0xA0(写)和0xA1(读)。
这里有几个要点:
- 速率:标准模式100kHz,快速模式400kHz。别跑太快,有些模块扛不住。
- 上拉电阻:SCL和SDA需要上拉到Vcc,阻值通常选4.7kΩ~10kΩ。我习惯用4.7kΩ,兼容性最好。
- 电平:3.3V逻辑,但有些系统用1.8V,需要电平转换。
个人经验:调试I2C时,先量一下SCL和SDA的波形。如果上升沿太缓,说明上拉电阻太大了;如果信号有毛刺,可能是地回路不好。我一般先用示波器抓一下,确认没问题再写代码。
2.4 控制信号详解
这四个控制信号,每个都有自己的脾气。我们来逐个拆解:
ModSelL(模块选择,低有效)
这个信号用来选中模块。当ModSelL为低时,模块的I2C接口才响应。多端口系统中,每个模块的ModSelL是独立的。嗯,这里要注意:ModSelL必须在I2C通信前至少10μs拉低,否则模块可能不响应。
ResetL(复位,低有效)
拉低ResetL至少10μs,模块就会复位。复位后模块会重新初始化,大概需要100ms才能正常工作。我曾经犯过一个错——复位后立刻读寄存器,结果读回来的全是0xFF。后来加了延时就好了。
IntL(中断,低有效)
模块有异常时会拉低IntL,比如温度过高、电压异常、激光器失效等。主机可以通过I2C读取中断状态寄存器,看看具体是什么问题。我个人习惯在中断服务程序里只做标记,不要在里面做复杂的I2C读写。
ModPrsL(模块在位,低有效)
这个信号最简单——模块插进去就拉低,拔出来就变高。可以用来检测模块是否在位。但要注意:ModPrsL只是机械检测,不代表模块已经初始化完成。我见过有人用ModPrsL来判断模块是否就绪,结果吃了亏。
总结一下时序关系:上电后,先等ModPrsL变低,再拉低ModSelL,然后通过I2C读取模块信息。如果一切正常,IntL应该保持高电平。如果IntL变低,就去查中断寄存器。
2.5 知识体系结构图
下面这张图,是我自己整理的知识框架。你可以把它当作调试时的「地图」:
我的调试习惯:拿到一个新模块,我一般先测ModPrsL,确认模块插好了。然后测Vcc电压,3.3V±5%都算正常。接着用逻辑分析仪抓I2C,看看能不能读到模块的ID寄存器。如果这些都过了,再去看高速信号。
好了,这一章的内容就到这里。硬件接口这部分,说白了就是「电源要稳、通信要通、控制要对」。你把这些搞清楚了,后面调试光模块就会顺手很多。
公众号:蓝海资料掘金营,微信deep3321