الواجهة الثنائية الأسلاك: العناوين والصفحات والبنوك والتوقيت
تُدار كل وحدة قابلة للإدخال عبر السلكين نفسيهما — خط ساعة تسلسلي وخط بيانات تسلسلي — باستخدام بروتوكول I²C الذي تسمّيه المواصفات الواجهة الثنائية الأسلاك (TWI). والفرق بين وحدات SFP وQSFP وXFP وCMIS هو كيفية تنظيم مساحة العناوين فوق هذا البروتوكول: أجهزة منفصلة، أو ذاكرة مقسَّمة إلى صفحات، أو بنوك من الصفحات. وهذه المادة هي المنظور على مستوى البروتوكول الذي تعتمد عليه المبرمجات والمضيفات وCodingBox جميعًا.
الطبقة الفيزيائية
- خطان بمخرج مفتوح (open-drain)، SCL وSDA، مسحوبان لأعلى من جهة المضيف؛ منطق 3.3 V.
- الوحدة هي دائمًا التابع (slave)؛ والمضيف (أو المبرمج) هو المتحكم (master) ويولّد الساعة.
- يجوز للوحدات إطالة الساعة (clock stretching) (إبقاء SCL منخفضًا) أثناء جلب المتحكم الدقيق للبيانات — وتسمح المواصفات بحد أقصى 500 µs.
- الحضور والاختيار طرفان منفصلان، لا معاملتان على الناقل: MOD_ABS (في SFP)، وModPrsL وModSelL (في فئة QSFP وCMIS). ويتيح ModSelL لعدة وحدات مشاركة ناقل واحد؛ ولا يملك SFP طرف اختيار، فتخصّص المضيفات لكل قفص ناقله الخاص أو مقسّمًا (multiplexer).
مساحة العناوين حسب المواصفة
| العائلة | عناوين الجهاز (كتابة 8 بت / 7 بت) | التنظيم | اختيار الصفحة |
|---|---|---|---|
| SFP، وSFP+، وSFP28 (SFF-8472) | بيانات التعريف A0h / 50h، والتشخيصات A2h / 51h | A0h: 256 بايت مسطّحة؛ A2h: 128 بايت مسطّحة + نصف علوي اختياري مقسَّم إلى صفحات | البايت 127 من A2h، إذا كان البت 4 من البايت 64 في A0h مضبوطًا |
| XFP (INF-8077i) | A0h | 128 بايت مسطّحة + «جداول» علوية مقسَّمة إلى صفحات | البايت 127 |
| QSFP+، وQSFP28 (SFF-8636) | A0h | 128 بايت مسطّحة + 128 بايت علوية مقسَّمة إلى صفحات | البايت 127 |
| QSFP-DD، وOSFP، وSFP-DD… (CMIS) | A0h | 128 بايت مسطّحة + بنوك × صفحات من الـ128 بايت العلوية | البايت 126 للبنك، والبايت 127 للصفحة |
لذلك تحتاج وحدة SFP إلى عنوانَي جهاز اثنين ولا تحتاج تقسيمًا إلى صفحات في الأساسيات؛ في حين يستخدم كل ما بعد XFP عنوانًا واحدًا وتقسيمًا إلى صفحات. وتضبط بعض وحدات SFP القديمة البت 2 من البايت 92 في A0h («يلزم تغيير العنوان») وتحتاج تسلسلًا خاصًا بالمورّد قبل أن تستجيب A2h.
المعاملات
| العملية | التسلسل | ملاحظات |
|---|---|---|
| قراءة عشوائية | START · عنوان الجهاز+W · إزاحة البايت · START · عنوان الجهاز+R · بيانات… · STOP | القراءة المعتادة؛ تتزايد الإزاحة تلقائيًا |
| قراءة تسلسلية | مواصلة التوقيت (clocking) بعد البايت الأول | تلتف من 255 → 0 ضمن عرض الجهاز/الصفحة الحالي |
| قراءة عند العنوان الحالي | START · عنوان الجهاز+R · بيانات | تكمل من آخر إزاحة — هشّة إذا تدخّل متحكم آخر |
| كتابة بايت | START · العنوان+W · الإزاحة · بيانات · STOP | ثم انتظر t_WR |
| كتابة صفحة | START · العنوان+W · الإزاحة · بيانات × n · STOP | محدودة بجهاز الذاكرة (عادةً 4–16 بايت) ويجب ألا تتجاوز حدود صفحته الداخلية |
| استطلاع الإقرار (ACK) | إصدار START + العنوان+W حتى تُقرّ الوحدة (ACK) | أسرع طريقة لمعرفة انتهاء دورة الكتابة |
قراءة صفحة علوية هي دائمًا معاملتان: الكتابة في بايت اختيار الصفحة (127، و126 لبنوك CMIS)، ثم قراءة 128–255. ويبقى الاختيار قائمًا حتى يتغيّر، ولهذا يُعَدّ اختيار الصفحة القديم مصدرًا كلاسيكيًا لقراءات «المحتوى الخطأ».
السرعة
| المواصفة | الساعة |
|---|---|
| SFF-8472 (SFP) | 100 kHz أساسًا؛ وتتحمّل بعض الوحدات 400 kHz |
| INF-8077i (XFP) | 100 kHz |
| SFF-8636 المراجعة 2.x (QSFP) | حتى 400 kHz |
| مواصفات عتاد CMIS / QSFP-DD / OSFP | حتى 400 kHz |
الأبطأ مسموح به دائمًا. وفي الكتابة تخفض معظم المبرمجات الساعة كثيرًا دون القيمة الاسمية — إلى نطاق الكيلوهرتز المنخفض — لأن دورات كتابة EEPROM والوحدات التي يتوسّطها متحكم دقيق أكثر حساسية للتوقيت من القراءة بكثير.
التوقيتات المهمة
| المُعامل | الحد النموذجي | الدلالة |
|---|---|---|
| t_init (SFP) | 300 ms | من التشغيل / إلغاء تفعيل TX_DISABLE حتى تصبح الوحدة جاهزة تمامًا للعمل ويستجيب الناقل |
| t_init (QSFP) | 2 s | حتى تكتمل التهيئة ويُمسح Data_Not_Ready |
| MgmtInit (CMIS) | ≤ 2 s وفق مواصفات العتاد | حتى تخرج الوحدة من MgmtInit وتصبح بيانات التعريف صالحة |
| t_WR | 40 ms | أقصى مدة لدورة كتابة بايت أو كتابة تسلسلية؛ استطلع ACK أو انتظر |
| t_clock_hold | 500 µs | أقصى إطالة للساعة من الوحدة |
| ton_IntL | 200 ms | من حدث العلم إلى تفعيل IntL |
| جاهزية البيانات | البت 0 من البايت 110 (SFP)، والبت 0 من البايت 2 (QSFP) | لا تثق بالقيم المقيسة أثناء ضبطه |
المطبّات وإصلاحاتها
| العَرَض | سبب البروتوكول | الإصلاح |
|---|---|---|
| كل القيم FFh | بلا ACK — عنوان جهاز خطأ، أو صفحة غير مطبَّقة، أو الوحدة غائبة | تحقّق من A0h مقابل A2h، وبتات الصفحة، والتركيب في المقبس |
| محتوى خطأ | اختيار صفحة/بنك قديم | اكتب في 127 (و126) قبل كل وصول إلى صفحة علوية |
| بايتات تالفة | ساعة سريعة جدًا، وأسلاك طويلة، وتنازع مع مضيف يستطلع DDM | أبطئ الساعة، وقصّر الكبل، واقرأ على منصة الاختبار لا في مبدّل قيد التشغيل |
| الكتابة «تنجح» لكن القراءة تُظهر القديم | كتابة سريعة جدًا، وتجاهل t_WR، وتجاوز حدود كتابة الصفحة | كتابة بايت بايت أو بأجزاء صغيرة مع انتظار؛ واستطلاع ACK |
| تجمّد الناقل، وSCL أو SDA عالقان منخفضين | معاملة مقطوعة | أصدر تسع نبضات SCL، ثم STOP؛ وأعد تدوير قدرة الوحدة |
| تعمل في المبدّل، ولا تستجيب على المبرمج | تتوقّع الوحدة تحرير LPMode أو طرف اختيار | راعِ ModSelL/LPMode؛ وامنح الوقت لـ t_init |
التشخيصات الخاصة بمنصة الاختبار لهذه الحالات مجموعة في أخطاء قراءة وكتابة EEPROM؛ وأنظمة الحماية التي تعمل فوق الناقل (كلمات المرور، والحماية العتادية من الكتابة، وأوامر الحفظ) في أنواع الحماية من الكتابة.
القراءة في نظام قيد التشغيل
يستطلع المضيف DDM كل بضع ثوانٍ ويتفاعل مع الأعلام؛ ووجود متحكم ثانٍ على الناقل نفسه (مِلقط مبرمج، أو أداة في النطاق) يسبّب تصادمات، وكتابات بعنوان خاطئ، وفي أسوأ الأحوال تعطّل الوحدة بسبب كتابة صفحة تقع على إزاحة خاطئة. اقرأ في الموضع نفسه إن لزم الأمر؛ واكتب على منصة الاختبار.
في CodingBox
تتعامل CodingBox مع نموذج العناوين حسب عامل الشكل تلقائيًا — A0h/A2h لـ SFP، والتقسيم إلى صفحات لـ QSFP وXFP، والبنك + الصفحة لـ CMIS — وتتيح لك ضبط سرعة الناقل وتوقيت الكتابة حسب ملف تعريف المبرمج، وتتحقق من كل كتابة بقراءتها مرة أخرى (كتابة وحدة).