Bir programlayıcı satın almak yerine Raspberry Pi I2C bus'ı üzerinden SFP EEPROM okuma ve yeniden yazma
Evde çıkarılmış SFP'lerden bir raf tutuyorum ve EEPROM'larını okuyabilmek, checksum'ı bozulmuş bir modülü onarabilmek, ve ara sıra vendor string'leri konusunda titiz bir switch için birini yeniden kodlayabilmek istiyorum. Yılda bir avuç modül için ticari bir programlayıcı satın almak burada mantıklı değil, o yüzden kendi yaptığım bir düzeneğin gerçekte ne kadar ileri gittiğini çözmeye çalışıyorum.
Tezgahta olanlar:
- I2C bus'ı kendim kabloladığım bir SFP kafesine çıkarılmış bir Raspberry Pi
- bir BIOS işinden kalma bir CH341A USB programlayıcı kartı
- karışık bir 1G ve 10G SFP/SFP+ modül yığını, artı bakmak istediğim iki QSFP+ modül
Okumalar en azından bus'ta bir şeyin yanıt vermesi anlamında çalışıyor:
$ 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
Şimdiye kadar yaptıklarım:
- A0h'yi elle dump ettim ve byte'ları SFF-8472 alan offset'lerine karşı karşılaştırdım, bu yavaş ve yanlış yapması kolay
- CH341A ile birkaç byte yazdım: iniyorlar, ama checksum'ları benim için hiçbir şey yeniden hesaplamıyor, yani modül kendim yamalayana kadar çöp olarak geri geliyor
- QSFP+ modüllerine dokunmadım, çünkü yaptığım kafes sadece SFP alıyor
Peki bunun için açık kaynak araçlar gerçekte neye benziyor: bellek düzenini bilen, bir yazmadan sonra checksum byte'larını doğrulayan, ve bir QSFP+ yuvasını da sürebilen bir şey var mı? Ve ev yapımı bir düzenek nerede yetmemeye başlıyor?
Comments 4
Sade SFP/SFP+ işi için Pi yeterli. Modül sadece iki I2C cihazı, ki bu tam olarak senin i2cdetect çıktının 0x50 ve 0x51'de gösterdiği şey, ve bunun ötesinde sihirli hiçbir şey olmuyor. Byte saymaktan seni kurtaran şey sfppi: Pi'nin I2C bus'ını sürüyor, alanları senin için decode ediyor, ve CC_BASE ile CC_EXT'i kontrol edip bir yazmadan sonra düzeltmeyi teklif ediyor. Bu tam olarak CH341A'nın senin için yapmadığı adım. CH341A işe yaramaz değil, düzgün okuyor ve yazıyor, sadece byte'ların ne anlama geldiğine dair hiçbir fikri yok, yani her checksum senin sorunun olarak kalıyor.
QSFP+ için lehimlediğin kafes yardımcı olmayacak. Topluluğun işaret ettiği tasarım Hubble, SFP olanın yanında bir QSFP yuvası olan açık bir programlayıcı, yani o iki modüle dokunmak istiyorsan yön bu. Yazmaları toptan reddeden modüllerde write parolalarını brute force etmek için kullanılan yalın bir Reveltronics yapısı da var. Ben o birine kendim hiç ihtiyaç duymadım, o yüzden bunu bir işaret olarak al ve kaybetmeyi göze alabildiğin bir donanımda kontrol et.
Bu, burada gördüğümle örtüşüyor. İkinci sayfa da canlı, yani belleğin her iki yarısı da okumak için orada:
Kafes kablolamasını düzgünce yeniden yapacağım ve sonra tutmak istediğim herhangi bir şeye dokunmadan önce checksum yolunu önemsemediğim bir modülde deneyeceğim. QSFP+ şimdilik beklemede, yılda iki modül için ikinci bir kafes yapmak haklı çıkarması zor, o yüzden Hubble'ın çabaya değip değmediğine karar verene kadar onlar salt okunur kalacak.
Fiyat aralığının diğer ucundan buna eklemek gerekirse, herkes kendi düzeneğini yapmadığından: günlük kullanımda gördüğün araçlar SNR SFP Writer, SFPTotal Plus serisi, ve tezgahında zaten sahip olduğun aynı chip olan CH341 kartları etrafında kurulmuş çeşitli tek seferlik cihazlar.
Derine inmeden önce bilmeye değer şey, her modülün sade bir EEPROM olmadığı. Bazıları gerçek bir chip'i açığa çıkarmak yerine A0/A2 belleğini emüle eden kendi mikrodenetleyicisini taşıyor, sürekli karşına çıkan örnek içinde bir C8051F392 olan bir Medick SFP-10G-BX. Bunlar write parolaları ya da vendor challenge'ları uygulayabilir, ve bus'ı ne kadar dürtersen dürt onları aptal bir EEPROM'a çevirmez. İnsanların gündeme getirdiği en kötü vaka, anahtarlı HP/Aruba interaktif EEPROM'u.
Kendi kafesin için pratik bir not: pinout'u doğru al yoksa hayaletlerin peşinde koşarsın. TX_Disable pin 3, Mod_Abs pin 6, VeeR pin 9. Özellikle Mod_Abs, herhangi bir şeyin bir modülün var olduğuna inanıp inanmayacağına karar veriyor.
Ve bunun risk tarafı, çünkü biri ölü bir modülle karşılaşana kadar nadiren bahsedilir. Birçok modül bir yazmayı kabul etmeden önce 4 byte'lık bir parola istiyor. Bu parolaların çoğu herkese açık dolaşıyor ve evrensel bir yardımcı program yok, yani sonunda firmware veritabanlarından ya da üreticiden çekilmiş bir yığın üreticiye özel araç ve image'la kalıyorsun. Bunlardan birini yanlış yaparsan programlayıcıdan daha pahalı bir modülü tuğlaya çevirmiş olursun.
O yüzden EEPROM'a hiç dokunmadan önce, modülün gerçekten bozuk olduğunu kanıtla: A0h/A2h'den DDM sıcaklığını, voltajı, bias current'ı ve TX/RX gücünü oku, mandalları, kontakları ve lensleri temizle, bilinen iyi bir modülle değiştir, ve linki iperf3 ile yük testinden geçir. Sözde yeniden flashlanması gereken modüllerin yarısının tek ihtiyacı temizlik.
Lehimlemek yerine ödemeyi tercih edersen, ticari kutuların kendi tuzaklarıyla geldiğinin farkında ol. FS Box gerçekten güzel yeniden kodluyor, insanlar bu şekilde bir Intel X710'da autoselect ile çalışan FS SFP-GE-BX modülleri elde etti, ama sadece FS modüllerini programlıyor ve FS olmayan bir modül takmak kullanıcılara hafta süren hesap kilitlenmelerine mal oldu.