قراءة وإعادة كتابة EEPROM الخاص بـ SFP عبر ناقل I2C على Raspberry Pi بدلًا من شراء برمجة (programmer)
أحتفظ في المنزل برف من وحدات SFP المسحوبة (pulled)، وأريد أن أتمكن من قراءة EEPROM الخاص بها، وإصلاح وحدة تعرّض checksum فيها للتلف، وأحيانًا إعادة ترميز واحدة لسويتش حساس تجاه نصوص المورّد. شراء برمجة تجارية لعدد قليل من الوحدات سنويًا لا معنى له هنا، لذا أحاول معرفة إلى أي مدى يصل جهاز مبني ذاتيًا فعليًا.
ما هو موجود على الطاولة:
- Raspberry Pi مع ناقل I2C موصول إلى قفص SFP قمت بتوصيله بنفسي
- لوحة برمجة CH341A USB متبقية من عمل على BIOS
- كومة مختلطة من وحدات SFP/SFP+ بسرعة 1G وَ10G، بالإضافة إلى وحدتي 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
ما فعلته حتى الآن:
- أخذت نسخة (dump) من A0h يدويًا وقارنت البايتات مع إزاحات حقول SFF-8472، وهو بطيء وسهل الخطأ فيه
- كتبت بعض البايتات باستخدام CH341A: تصل بنجاح، لكن لا شيء يعيد حساب المجاميع (checksums) لي، لذا تعود الوحدة كبيانات تالفة حتى أصلحها بنفسي
- تركت وحدات QSFP+ دون لمس، لأن القفص الذي بنيته يقبل SFP فقط
إذن كيف تبدو الأدوات المفتوحة فعليًا لهذا العمل: هل هناك شيء يعرف تخطيط الذاكرة، يتحقق من بايتات checksum بعد الكتابة، ويمكنه أيضًا تشغيل فتحة QSFP+؟ وأين يتوقف جهاز مبني منزليًا عن أن يكون كافيًا؟
Comments 4
لعمل SFP/SFP+ العادي، الـPi كافٍ. الوحدة هي ببساطة جهازا I2C، وهذا بالضبط ما تُظهره مخرجات i2cdetect عندك عند 0x50 وَ0x51، ولا شيء سحري يحدث بعد ذلك. ما يوفر عليك عدّ البايتات هو sfppi: يشغّل ناقل I2C الخاص بالـPi، ويفك ترميز الحقول من أجلك، ويتحقق من CC_BASE وَCC_EXT ويعرض إصلاحها بعد الكتابة. هذه بالضبط الخطوة التي لا يقوم بها CH341A من أجلك. CH341A ليس عديم الفائدة، فهو يقرأ ويكتب بشكل جيد، لكنه ببساطة لا يعرف معنى البايتات، لذا يبقى كل checksum مسؤوليتك.
بالنسبة لـQSFP+، القفص الملحوم الذي لديك لن يساعد. التصميم الذي يشير إليه المجتمع هو Hubble، وهو برمجة مفتوحة المصدر تحتوي على فتحة QSFP بجانب فتحة SFP، لذا هذا هو الاتجاه إذا أردت التعامل مع تلك الوحدتين. هناك أيضًا بناء بسيط من Reveltronics يُستخدم لفرض كلمات مرور الكتابة (brute-forcing) على وحدات ترفض الكتابة تمامًا. لم أحتج إليه شخصيًا أبدًا، لذا اعتبره مجرد إشارة وتحقق منه على أجهزة يمكنك تحمّل خسارتها.
هذا يتوافق مع ما أراه هنا. الصفحة الثانية موجودة أيضًا، لذا كلا نصفي الذاكرة متاحان للقراءة:
سأعيد توصيل القفص بشكل صحيح ثم أجرب مسار checksum على وحدة لا أهتم بها قبل لمس أي شيء أريد الاحتفاظ به. QSFP+ ستبقى معلّقة الآن، بناء قفص ثانٍ لوحدتين في السنة صعب التبرير له، لذا ستبقى تلك للقراءة فقط حتى أقرر ما إذا كان Hubble يستحق الجهد.
إضافة إلى ذلك من الطرف الآخر لنطاق الأسعار، لأن ليس الجميع يبني أدواته الخاصة: الأدوات التي تراها في الاستخدام اليومي هي SNR SFP Writer، وسلسلة SFPTotal Plus، وأجهزة متنوعة مبنية حول لوحات CH341، وهي نفس الشريحة الموجودة لديك بالفعل على الطاولة.
الشيء الذي يستحق معرفته قبل أن تتعمق هو أن ليست كل وحدة هي EEPROM بسيط. بعضها يحمل متحكمًا دقيقًا (microcontroller) خاصًا به يحاكي ذاكرة A0/A2 بدلًا من عرض شريحة حقيقية، ووحدة Medick SFP-10G-BX التي تحتوي على C8051F392 بداخلها هي المثال الذي يتكرر ذكره. تلك يمكنها تنفيذ كلمات مرور كتابة أو تحديات خاصة بالمورّد، ولا كمية من التلاعب بالناقل تحوّلها إلى EEPROM بسيط. أسوأ حالة يذكرها الناس هي EEPROM التفاعلي من HP/Aruba بمفاتيح.
ملاحظة عملية لقفصك الخاص: اضبط ترتيب الأطراف (pinout) بشكل صحيح وإلا ستطارد أشباحًا. TX_Disable هو الطرف 3، وMod_Abs هو الطرف 6، وVeeR هو الطرف 9. Mod_Abs بشكل خاص هو من يقرر ما إذا كان أي شيء يعتقد أن هناك وحدة موجودة على الإطلاق.
وجانب المخاطرة في الأمر، لأنه نادرًا ما يُذكر حتى تكون لدى أحدهم وحدة معطلة. الكثير من الوحدات تطلب كلمة مرور من 4 بايتات قبل قبول الكتابة. معظم كلمات المرور هذه متداولة علنًا ولا توجد أداة عالمية، لذا ينتهي بك الأمر بكومة من الأدوات والصور الخاصة بالمورّدين مأخوذة من قواعد بيانات الفيرموير أو من الشركة المصنّعة. إذا أخطأت في أي من ذلك فستكون قد أتلفت (bricked) وحدة تكلف أكثر من البرمجة نفسها.
لذا قبل لمس EEPROM إطلاقًا، أثبت أن الوحدة معطلة فعلًا: اقرأ درجة حرارة DDM والجهد وbias current وطاقة TX/RX من A0h/A2h، نظّف المزالج والملامسات والعدسات، جرّب وحدة معروفة أنها تعمل، واختبر التحميل على اللينك باستخدام iperf3. نصف الوحدات التي يُفترض أنها تحتاج إعادة برمجة تحتاج فقط إلى التنظيف.
إذا كنت تفضل الدفع بدلًا من اللحام، اعلم أن الأجهزة التجارية تأتي بشروطها الخاصة. FS Box تعيد الترميز بشكل جيد، وحصل الناس على وحدات FS SFP-GE-BX تعمل على Intel X710 مع الاختيار التلقائي بهذه الطريقة، لكنها تبرمج وحدات FS فقط، وإدخال وحدة غير FS تسبب لبعض المستخدمين في تجميد الحساب لمدة أسبوع.