CodingBox Q&A Ask question

برمجة استطلاع DDM عبر I2C: أي بايتات A2h تحمل القيم الحية وأيها العتبات

Asked Active Viewed 319 AI translation from English
7

أكتب أداة استطلاع صغيرة تسحب درجة الحرارة والجهد والانحياز (bias) والقدرة البصرية مباشرة من الوحدات على أجهزتنا whitebox، لنحصل على خط اتجاه بدلاً من أن يراقب أحدهم رابطًا بعد أن بدأ بالفعل بإصدار أخطاء. يطبع نظام التشغيل الشبكي (NOS) قيمًا مُنسَّقة، لكنني أريد الأرقام الخام مع عتبات المورد بجانبها حتى تكون مستويات الإنذار متسقة عبر بصريات مختلطة بدلاً من كتابتها يدويًا لكل طراز.

الإعداد:

  • مضيف Linux، أقفاص الوحدات خلف مضاعف I2C عادي، الناقل 1
  • بصريات مختلطة من SFP وSFP+ وSFP28 من ثلاثة موردين
  • القراءة باستخدام i2c-tools فقط، بلا SDK من المورد

أقرأ صفحة التشخيصات هكذا:

# i2cdump -y 1 0x51

وهذا محلِّلي (parser) المسوَّد، وهنا حيث لست متأكدًا:

temp = s16(a2[96:98]) / 256.0
vcc  = u16(a2[98:100]) * 100e-6
bias = u16(a2[100:102]) * 2e-6

ما فعلته بالفعل:

  • قارنت قيمي المحسوبة بما يطبعه NOS: قريبة على بعض الوحدات، وخاطئة بوضوح على أخرى
  • قرأت SFF-8472، لكن لا أستطيع تحديد بثقة أين تنتهي كتلة العتبات وأين تبدأ منطقة المعايرة
  • استبعدت المضاعف بتفريغ نفس الوحدة على ناقل مباشر، نفس الأرقام

إذًا: ما هي الخريطة الفعلية لـ A2h، وأين تعيش العتبات، وأين تبدأ القيم الآنية، وهل توجد راية (flag) في أي مكان تخبرني ما إذا كانت الوحدة تتوقع مني فعل شيء بتلك الكلمات الخام قبل أن أثق بها؟

Comments 7

أي القيم هي الخاطئة بوضوح، الأربع كلها أم فقط الانحياز (bias) والقدرات؟ هذا عادة يحسم الإجابة كلها. أيضًا فرّغ A0h بينما أنت في ذلك وانظر إلى البايت 92: يخبرك ما إذا كانت الوحدة تبلغ عن تشخيصات إطلاقًا، وما إذا كانت معايرة داخليًا أم خارجيًا. إذا كان جزء من أسطولك معايرًا خارجيًا ومحلِّلك يعامل الجميع بنفس الطريقة، فعدم التطابق سلوك متوقع وليس خطأ في حسابك.

1 United Statescoaxhawk46US Show original (English) AI translation

سحبت البايت 92 من A0h عبر الصينية كاملة وهو غير موحّد. بعض الوحدات تُعلِم بمعايرة خارجية، وبعضها لا، والتي تختلف مع مخرجات NOS هي بالضبط الخارجية. درجة الحرارة والجهد ضمن حدود الضوضاء على كل شيء؛ الانحياز والقدرتان هما ما ينحرف. إذًا يبدو أنني أفتقد خطوة بدلاً من قراءة الإزاحات الخاطئة. ماذا يجب أن أفعل فعليًا بالكلمات الخام على تلك المجموعة الفرعية؟

2 South KoreanetrunnerKR Show original (English) AI translation

A2h عند 0x51 ينقسم إلى أربع كتل تهمّك:

  • البايتات 0-55: عتبات الإنذار والتحذير، عالية ومنخفضة لكل من درجة الحرارة، الجهد، الانحياز، قدرة الإرسال وقدرة الاستقبال
  • البايتات 56-95: ثوابت المعايرة الخارجية
  • البايتات 96-105: القيم الآنية
  • البايت 110: الحالة والتحكم، بما في ذلك TX disable وTX fault وRX LOS

الوحدات في الكتلة الحية: درجة الحرارة موقّعة (signed)، 1/256 درجة مئوية لكل LSB؛ الجهد 100 مايكروفولت لكل LSB؛ الانحياز 2 مايكروأمبير؛ قدرة الإرسال والاستقبال 0.1 مايكروواط. مقتطفك يُطبّق هذا التحجيم بشكل صحيح بالفعل، إذًا الإزاحات ليست مشكلتك.

القطعة المفقودة هي الراية (flag) التي وجدتها للتو. على وحدة معايرة خارجيًا، الكلمات عند 96-105 هي مخرج ADC خام، ويجب تطبيق الثوابت عند 56-95 قبل أن تعني شيئًا؛ وحدة معايرة داخليًا قامت بذلك بالفعل نيابة عنك. ذلك الفرع هو الفرق بين مجموعتيك.

إذا أردت مخططًا للتحقق مقابله بدلاً من الوثوق بكلامي، فإن ملف الترويسة sff8472.h في FreeBSD وpy-sfp-eeprom كلاهما يوضّحان الإزاحات حقلًا حقلًا. لا أزال أنصح بالتحقق من وحدة واحدة لكل مورد مقابل قيمة تثق بها قبل أن تُعلّق إنذارات عليها.

3 United Statesporttech22US Show original (English) AI translation

يستحق الإضافة لماذا كتلة العتبات هي النصف المثير للاهتمام. القيم في 0-55 بنفس وحدات الكتلة الحية، إذًا بمجرد أن يكون تحجيمك صحيحًا تحصل على نقاط إنذار وتحذير المورد نفسه مجانًا ولا تضطر أبدًا لاختراع حدود لكل طراز. هذا وحده يبرر قراءة A2h مباشرة بدلاً من تحليل مُنسِّق طباعة شخص آخر.

ملاحظة عملية واحدة من تشغيل هذا على صينية مختلطة: أبقِ فترة الاستطلاع معتدلة. تلك الصفحة قراءة I2C عادية ومتحكم الوحدة ليس سريعًا. قصف كل وحدة كل ثانية على ناقل يقع أيضًا خلف مضاعف طريقة جيدة لجمع قراءات قصيرة تبدو بالضبط مثل بصريات متذبذبة في رسومك البيانية.

1 Brazilopticnerd31BR Show original (English) AI translation

احذر كيف تصيغ ذلك، لأن الناس يقرؤونه كـ "طبّق الثوابت دائمًا" ثم يتساءلون لماذا ساءت أرقامهم. الثوابت عند 56-95 تُطبَّق فقط عندما يقول البايت 92 في A0h إن الوحدة معايرة خارجيًا. طبّقها على وحدة معايرة داخليًا وستحوّل قراءات سليمة تمامًا إلى هراء، لأن الوحدة قامت بذلك العمل بالفعل. اقرأ الراية أولاً، تفرّع بناءً عليها، احتفظ بكلا المسارين في المحلِّل وسجّل أي مسار سلكته وحدة معينة حتى تستطيع التمييز بين نمطي الفشل لاحقًا.

نفس فئة الفخ مع درجة الحرارة: إنها موقّعة (signed). حلّلها كغير موقّعة وأي شيء تحت الصفر يعود كرقم مرتفع بشكل جنوني، وهذا مسلٍّ في أول صباح بارد يستدعيك عبر الاستدعاء (page).

4 United StatesqsfpwolfUS Show original (English) AI translation

تحديث من جانبي. تفرّعت بناءً على البايت 92 في A0h وأطبّق الثوابت فقط حيث تقول الوحدة إنها خارجية. الانحياز وكلتا القدرتين تتبع الآن ما يطبعه NOS على كل وحدة استطعت المقارنة معها، ودرجة الحرارة والجهد لم تكونا مشكلة من البداية. وحدتان لا تزالان تبلغان عن وجود تشخيصات لكن تعيدان عتبات لا أثق بها، فبالنسبة لهما أتراجع إلى حدودي الخاصة وأضع علامة على الوحدة في الجرد بدلاً من التظاهر. لا أعتبر الأمر كله مغلقًا، لكن الخريطة أعلاه كانت بالضبط ما كنت أفتقده.

3 South KoreanetrunnerKR Show original (English) AI translation

شيء آخر قبل أن يدخل هذا الإنتاج. البايت 110 يقع في نفس الصفحة وهو الحالة بالإضافة إلى التحكم، ونصف التحكم يشمل TX disable. لا شأن لأداة استطلاع بالكتابة إلى A2h إطلاقًا، لكن إذا كانت مكتبتك تنفذ قراءة-تعديل-كتابة في أي مكان، أو أخطأت إصبعك في i2cset أثناء الاختبار على صندوق حي، يمكنك إسقاط رابط عميل من مساحة المستخدم. افتح الناقل للقراءة فقط في أداة الاستطلاع واحتفظ بأي مسار كتابة في أداة منفصلة يجب عليك تشغيلها عمدًا.

نفس البايت يعطيك TX fault وRX LOS، وكلاهما يستحق التصدير بجانب القيم التناظرية. وحدة تجلس عند قدرة استقبال معقولة مع تفعيل LOS تخبرك بقصة مختلفة تمامًا عن واحدة تقرأ منخفضة ببساطة.

0 Indiawaverunner21IN Show original (English) AI translation
Log in to comment. Log in