أخطاء قراءة وكتابة EEPROM على المبرمج
قبل أن يمكن تشخيص وحدة أو ترميزها يجب قراءتها — ثم، غالبًا، كتابتها. وتفشل كلتا الخطوتين بطرق مميزة. تربط هذه الصفحة كل عطل بسببه وبالإعداد أو الإجراء الذي يُصلحه، من عدم رؤية الوحدة إطلاقًا إلى كتابة «تنجح» ثم تختفي بهدوء.
الوحدة غير مكتشَفة
| الفحص | السبب |
|---|---|
| التركيب والحاضنة | يجب أن تستقر الوحدة تمامًا في الموصل؛ استخدم المهايئ الخاص بعامل شكلها — فوحدة SFP في حاضنة QSFP لن تُكتشَف |
| وقت بدء التشغيل | تحتاج الوحدات حتى ~2 s (SFP) أو أكثر (CMIS) بعد الإدخال قبل أن يستجيب الناقل الثنائي الأسلاك |
| إشارة حضور الوحدة | يجب أن تُفعَّل MOD_ABS / ModPrsL؛ الدبوس المثني أو الوحدة التي تفتقر إلى الإشارة تبدو غائبة |
| حالة الطاقة المنخفضة (CMIS) | بيانات التعريف قابلة للقراءة في LowPwr، لكن بعض المضيفات/المبرمِجات تتوقع الحالة Ready للوصول الكامل |
| سرعة الناقل | ابدأ عند 100 kHz أو أقل؛ بعض الوحدات تُصدر NACK عند 400 kHz |
| وحدة ميتة | لا DDM، ولا بيانات تعريف عند أي سرعة — تأكّد على لوحة ثانية قبل الحكم عليها بالتلف |
القراءات تُرجِع FFh أو 00h أو بيانات عشوائية
| العَرَض | السبب | الإصلاح |
|---|---|---|
| كل القيم FFh | NACK من I²C — لا جهاز عند ذلك العنوان، أو الصفحة غير موجودة | تحقّق من العنوان (بيانات تعريف A0h مقابل تشخيص A2h في SFP؛ وA0h واحد بتقسيم صفحات في QSFP/CMIS) |
| كل القيم 00h | الوحدة غير مزوَّدة بالطاقة / في وضع إعادة الضبط؛ أو EEPROM فارغة فعليًا | تحقّق من الطاقة إلى الحاضنة، ومن حضور الوحدة؛ فالوحدات الفارغة موجودة فعلًا (مخزون غير مُرمَّز) |
| الطول صحيح، لكن المحتوى خطأ | قراءة صفحة مختلفة عن المقصودة | اكتب بايت اختيار الصفحة (127) وأعد القراءة؛ وفي CMIS اكتب أيضًا اختيار البنك (126) |
| بايتات مشوَّشة / منزاحة | الناقل سريع جدًا، أو كبل طويل، أو تنازع مع مضيف | اخفض السرعة إلى ≤ 100 kHz؛ استخدم أسلاكًا قصيرة؛ اقرأ على منصة الاختبار، لا في مبدّل قيد التشغيل |
| قراءات A2h تفشل، وA0h سليمة | وحدة بلا تشخيص، أو كتلة تشخيص محمية | تحقّق من البايت 92 البت 6 في A0h (DDM مُنفَّذ)؛ بعض أنواع الحماية من الكتابة تستجيب لِـA0h فقط |
| القيم تتغيّر بين قراءة وأخرى | قيم مقيسة حيّة — طبيعي؛ أو البيانات غير جاهزة | من المفترض أن تتغيّر بايتات DDM؛ تحقّق من بت جاهزية البيانات قبل الوثوق بلقطة واحدة |
فشل الكتابة تمامًا
WRITE FAIL، أو NACK على البيانات، أو قراءة البايت لاحقًا دون تغيير:
| السبب | كيفية التعرّف عليه | ما العمل |
|---|---|---|
| مطلوبة كلمة مرور (متحكم بالبرنامج الثابت) | تُرفض الكتابة إلى أن توضع القيمة الصحيحة في عنوان كلمة المرور (SFP A2h 0x7B–0x7E، وQSFP 123–126، وCMIS 122–125) | أدخل كلمة مرور الوحدة في الذاكرة المحمية من الكتابة وكلمات المرور؛ وتُطبَّق كلمات مرور الموردين المعروفة من قاعدة البيانات |
| حماية كتابة عتادية | للقراءة فقط بصرف النظر عن كلمة المرور، وتبقى عبر إعادة تدوير الطاقة | يجب أن تتحكم لوحة المبرمج في دبوس WP — البرمجيات وحدها لا تكفي؛ راجع أنواع الحماية من الكتابة |
| التوقيت | أعطال متقطعة، وكتابة جزئية للصفحات | أبطئ الساعة (~1 kHz غالبًا مطلوبة لكتابة EEPROM موثوقة)، واحترم زمن دورة الكتابة (5–10 ms) بين البايتات/الصفحات، وأضف تأخيرات بين الكتل |
| منطقة للقراءة فقط | بايتات معيّنة لا تتغيّر أبدًا (المجاميع الاختبارية، والعتبات في بعض القطع، ومنطقة المورّد) | تملك EEPROM منطقة محمية بالتصميم؛ اكتب فقط الحقول التي تسمح بها الوحدة |
| حالة خطأ | قد تتطلب وحدات CMIS حالة LowPwr، أو تعطيل مسار البيانات، قبل قبول الكتابة | ضع الوحدة في الحالة المطلوبة أولًا |
| الصفحة غير مُختارة | كتبتَ إلى الإزاحة الصحيحة لكن على صفحة خطأ | اضبط البايت 127 (و126) قبل الكتابة، وتحقّق بإعادة قراءة بايت اختيار الصفحة |
الكتابة «تنجح» لكنها لا تثبت
- تتراجع بعد إعادة تدوير الطاقة — تخزّن الوحدة الكتابات في ذاكرة مؤقتة وتحتاج أمر حفظ خاصًا بالمورّد؛ فبدونه تعود الصورة القديمة. يُعالَج ذلك بواسطة سكربت برمجة (النوع 4 من الحماية من الكتابة).
- تتراجع فورًا — يعكس المتحكم محتوى EEPROM من مخزنه الخاص ويستبدل بايتاتك؛ ويتطلب هذا خوارزمية الشركة المصنِّعة (النوع 5).
- بعض البايتات تثبت وأخرى لا — خريطة محمية جزئيًا؛ اكتب حقلًا حقلًا وتحقّق من كل واحد.
المضيف يرفض الوحدة بعد كتابة ناجحة
| السبب | الإصلاح |
|---|---|
| المجاميع الاختبارية قديمة — CC_BASE (البايت 63)، وCC_EXT (95)، وCC_DMI (A2h، البايت 95)، وQSFP (191/223) | أعد حسابها؛ يقوم CodingBox بذلك تلقائيًا عند الكتابة (خريطة الذاكرة) |
| بيانات التعريف أصبحت غير متسقة — كتغيير المورّد بينما تشير رموز التوافق أو الطول الموجي إلى عتاد مختلف | حافظ على اتساق بيانات التعريف مع الضوئيات الفعلية (السرعة والمعدل، تعارضات الطبقة الفيزيائية) |
| كتابة إلى مخطط نوع وحدة خطأ | XFP كُتبت كأنها SFP، أو خلط في صفحات QSFP — استعد من النسخة الاحتياطية |
الوحدة ميتة بعد الكتابة
كتابة بيانات عشوائية فوق ثوابت المعايرة أو العتبات أو منطقة المورّد الخاصة (حيث تحتفظ بعض المتحكمات بإعداداتها) قد تُعطِّل الوحدة نهائيًا. مسار الاستعادة: استعد النسخة الاحتياطية التي أخذها CodingBox قبل الكتابة من code database، ثم اكتب فقط الحقول المقصودة.
القواعد الذهبية
- اقرأ واحفظ أولًا — يجب أن تسبق كل كتابة قراءة كاملة تصل إلى قاعدة البيانات.
- حدِّد نوع الحماية قبل أول محاولة كتابة (أنواع الحماية من الكتابة).
- تمهَّل — إذ يحل توقيت الساعة والفاصل بين البايتات معظم الأعطال «العشوائية».
- اكتب فقط ما تقصده — حقولًا، لا صفحات كاملة، ما لم تكن تستعيد صورة.
- تحقّق بإعادة القراءة بعد إعادة تدوير الطاقة.
في CodingBox
يقرأ CodingBox الوحدات بالعنوان الصحيح وتقسيم الصفحات المناسب لعامل الشكل، ويعرض البايتات الخام والمفكوكة الترميز في EEPROM editor، ويعيد حساب المجاميع الاختبارية عند الكتابة، ويخزّن نسخة احتياطية تلقائيًا، ويدعم إدخال كلمة المرور وسكربتات البرمجة للوحدات المحمية ووحدات أمر الحفظ (كتابة وحدة). إذا اشتُبه في عطل على مستوى اللوحة، راجع استكشاف الأخطاء وإصلاحها الخاص بالمنتج.
آلية عمل الناقل وراء هذه الأعطال — العناوين، واختيار الصفحة، وزمن دورة الكتابة، وإطالة الساعة (clock stretching): واجهة الإدارة الثنائية الأسلاك.
لماذا تستجيب الوحدة بالطريقة التي تستجيب بها — ذاكرة يحاكيها MCU، ونافذة الإقلاع، وإطالة الساعة (clock stretching)، والمناطق المحمية: المتحكم والبرنامج الثابت.