CodingBox Q&A Ask question

用树莓派的 I2C 总线读写 SFP EEPROM,而不是去买一台编程器

Asked Active Viewed 84 AI translation from English
4

我家里攒了一架子拆下来的 SFP,想能读它们的 EEPROM,修一个校验和被弄乱的模块,偶尔也想给一台对厂商字符串很挑剔的交换机重编码一个模块。一年就折腾这么几个模块,买台商用编程器实在没必要,所以我在琢磨自己攒一套设备到底能走多远。

工作台上现有的东西:

  • 一台树莓派,I2C 总线接到我自己接线做的 SFP 笼子上
  • 一块做 BIOS 项目剩下的 CH341A USB 编程器板
  • 一堆混杂的 1G 和 10G SFP/SFP+ 模块,外加两个也想顺便看看的 QSFP+ 模块

读取至少在"总线上有东西回应"这个意义上是能用的:

$ i2cdetect -y 1
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 51 -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
$ i2cdump -y 1 0x50

目前做过的事:

  • 手动导出 A0h,逐字节对照 SFF-8472 的字段偏移表核对,又慢又容易出错
  • 用 CH341A 写过几个字节:确实写进去了,但没有任何东西帮我重新计算校验和,所以模块读回来就是垃圾数据,直到我自己手动去改
  • QSFP+ 那两个模块一直没动,因为我搭的这个笼子只吃 SFP

所以这方面开源的工具到底能做到什么程度:有没有东西懂这个内存布局、写入之后能校验校验和字节、还能驱动一个 QSFP+ 插槽?一套自己攒的设备到底能顶到什么地步就不够用了?

Comments 4

对普通的 SFP/SFP+ 来说,树莓派已经够用了。这个模块本质上就是两个 I2C 设备,这正是你 i2cdetect 输出里 0x50 和 0x51 显示的东西,除此之外没什么魔法。能帮你省掉数字节这个步骤的是 sfppi:它驱动树莓派的 I2C 总线,帮你把字段解码出来,而且会检查 CC_BASE 和 CC_EXT,写入之后还能帮你修复。这正是 CH341A 不会帮你做的那一步。CH341A 也不是没用,读写都没问题,它只是根本不知道这些字节代表什么意思,所以校验和永远得你自己操心。

对 QSFP+ 来说,你焊的这个笼子帮不上忙。社区常推荐的方案是 Hubble,一个开源编程器,在 SFP 插槽旁边还带了个 QSFP 插槽,如果你想动那两个模块,可以往这个方向走。另外还有一个简陋的 Reveltronics 方案,是用来暴力破解那些干脆拒绝写入的模块的写密码的。这个我自己没用过,就当个线索,先在一块可以承受报废的硬件上试试。

2 SpaincoreguruES Show original (English) AI translation

跟我这边看到的情况对得上。第二页也在那儿,所以内存的两个部分都可以读到:

$ i2cdump -y 1 0x51

我打算把笼子的接线重新规范地做一遍,然后先在一个我不在意的模块上试一下校验和这条路,再去碰我想留着的东西。QSFP+ 暂时先放一放,为了一年两个模块专门再搭一个笼子实在不划算,所以这两个先只读不写,等我想清楚 Hubble 值不值得折腾再说。

2 Netherlandsoptichub40NL Show original (English) AI translation

从价格区间的另一端补充一点,毕竟不是所有人都自己动手搭:日常能见到的工具有 SNR SFP Writer、SFPTotal Plus 系列,还有各种基于 CH341 板子攒出来的自制设备,跟你工作台上现有的是同一块芯片。

深入之前值得知道的一点是,不是每个模块都是纯粹的 EEPROM。有些模块自带一个微控制器,用来模拟 A0/A2 的内存,而不是直接暴露一颗真正的芯片,一个带 C8051F392 的 Medick SFP-10G-BX 就是经常被提起的例子。这类模块可能实现了写密码或者厂商挑战应答机制,不管怎么戳总线都没法把它们变成一个傻瓜 EEPROM。大家提到最麻烦的例子是带密钥的 HP/Aruba 交互式 EEPROM。

给你自己那个笼子提个实际的建议:引脚定义一定要对,不然你会追着幻影跑。TX_Disable 是第 3 脚,Mod_Abs 是第 6 脚,VeeR 是第 9 脚。Mod_Abs 尤其关键,它决定了任何东西是否会相信有模块存在。

2 IndiagigopsIN Show original (English) AI translation

再说说风险这一面,这个通常要等到有人搞坏一个模块才会被提起。很多模块在接受写入之前要求一个 4 字节密码。这些密码大多数都在网上公开流传,但没有一个通用的工具,所以你最后会攒一堆厂商专属的工具和从固件数据库或厂商那里搞来的镜像。这里面任何一步搞错,你就把一个比编程器还贵的模块变砖了。

所以在动 EEPROM 之前,先证明这个模块真的坏了:从 A0h/A2h 里读出 DDM 的温度、电压、偏置电流和 TX/RX 功率,清洁卡扣、触点和镜头,换一个确认没问题的模块试试,再用 iperf3 做个链路的负载测试。号称需要重刷的模块,有一半其实只是需要清洁。

如果你宁愿花钱也不想焊接,要知道商用设备也有自己的一套规矩。FS Box 重编码效果确实不错,有人用它让 FS SFP-GE-BX 模块在带自动选择的 Intel X710 上工作起来了,但它只能编程 FS 自己的模块,插入非 FS 模块曾经让用户的账号被锁了一整周。

2 Egypttxeng18EG Show original (English) AI translation
Log in to comment. Log in