টু-ওয়্যার ইন্টারফেস: অ্যাড্রেস, পেজ, ব্যাংক ও টাইমিং
প্রতিটি প্লাগেবল মডিউল একই দুটি তারের মাধ্যমে পরিচালিত হয়: একটি সিরিয়াল ক্লক ও একটি সিরিয়াল ডেটা লাইন। স্পেসিফিকেশনে এই I²C প্রোটোকলকে বলা হয় টু-ওয়্যার ইন্টারফেস (TWI)। SFP, QSFP, XFP ও CMIS মডিউলের মধ্যে পার্থক্য হলো এর ওপরে অ্যাড্রেস স্পেস কীভাবে সাজানো: আলাদা ডিভাইস, পেজড মেমোরি, নাকি পেজের ব্যাংক। এই লেখায় প্রোটোকল স্তরের যে চিত্র আছে, তার ওপর প্রোগ্রামার, হোস্ট ও CodingBox সবাই নির্ভর করে।
ভৌত স্তর
- দুটি ওপেন-ড্রেন লাইন, SCL ও SDA, হোস্টের দিকে পুল-আপ করা; 3.3 V লজিক।
- মডিউল সবসময় স্লেভ; হোস্ট (বা প্রোগ্রামার) মাস্টার এবং ক্লক তৈরি করে।
- মাইক্রোকন্ট্রোলার ডেটা আনার সময় মডিউল ক্লক স্ট্রেচ করতে পারে (SCL নিম্ন রাখে); স্পেসিফিকেশনে সর্বোচ্চ 500 µs অনুমোদিত।
- উপস্থিতি ও নির্বাচন আলাদা পিনে হয়, বাস ট্রানজ্যাকশনে নয়: MOD_ABS (SFP), ModPrsL ও ModSelL (QSFP শ্রেণি ও CMIS)। ModSelL-এর কারণে কয়েকটি মডিউল একটি বাস ভাগ করতে পারে; SFP-এ সিলেক্ট পিন নেই, তাই হোস্ট প্রতিটি কেজকে আলাদা বাস বা একটি মাল্টিপ্লেক্সার দেয়।
স্পেসিফিকেশন অনুযায়ী অ্যাড্রেস স্পেস
| পরিবার | ডিভাইস অ্যাড্রেস (8-বিট রাইট / 7-বিট) | গঠন | পেজ সিলেক্ট |
|---|---|---|---|
| SFP, SFP+, SFP28 (SFF-8472) | A0h / 50h শনাক্তকরণ তথ্য, A2h / 51h ডায়াগনস্টিকস | A0h: 256 ফ্ল্যাট বাইট; A2h: 128 ফ্ল্যাট + ঐচ্ছিক পেজড উপরের অর্ধেক | A2h-এর বাইট 127, যদি A0h-এর বাইট 64-এর বিট 4 সেট থাকে |
| 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 A0h-এর বাইট 92-এর বিট 2 সেট করে (“অ্যাড্রেস পরিবর্তন প্রয়োজন”) এবং A2h সাড়া দেওয়ার আগে একটি ভেন্ডর-নির্দিষ্ট ক্রম চায়।
ট্রানজ্যাকশন
| অপারেশন | ক্রম | মন্তব্য |
|---|---|---|
| র্যান্ডম রিড | START · ডিভাইস অ্যাড্রেস+W · বাইট অফসেট · START · ডিভাইস অ্যাড্রেস+R · ডেটা… · STOP | প্রতিদিনের পড়া; অফসেট নিজে থেকে বাড়ে |
| সিকোয়েন্সিয়াল রিড | প্রথম বাইটের পরেও ক্লক চালিয়ে যাওয়া | বর্তমান ডিভাইস/পেজ ভিউয়ের ভেতরে 255 → 0-তে ঘুরে আসে |
| কারেন্ট-অ্যাড্রেস রিড | START · ডিভাইস অ্যাড্রেস+R · ডেটা | শেষ অফসেট থেকে চলতে থাকে; অন্য মাস্টার হস্তক্ষেপ করলে ভঙ্গুর |
| বাইট রাইট | START · অ্যাড্রেস+W · অফসেট · ডেটা · STOP | তারপর t_WR অপেক্ষা করুন |
| পেজ রাইট | START · অ্যাড্রেস+W · অফসেট · ডেটা × n · STOP | মেমোরি ডিভাইস দ্বারা সীমিত (সাধারণত 4–16 বাইট) এবং এর অভ্যন্তরীণ পেজ সীমা পার করা চলবে না |
| অ্যাকনলেজ পোলিং | মডিউল ACK না দেওয়া পর্যন্ত START + অ্যাড্রেস+W পাঠানো | রাইট চক্র শেষ হয়েছে কি না জানার দ্রুততম উপায় |
আপার পেজ পড়তে সবসময় দুটি ট্রানজ্যাকশন লাগে: প্রথমে পেজ-সিলেক্ট বাইটে লিখুন (127, আর CMIS ব্যাংকের জন্য 126), তারপর 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 অ্যাসার্ট হওয়া পর্যন্ত |
| ডেটা রেডি | বাইট 110-এর বিট 0 (SFP), বাইট 2-এর বিট 0 (QSFP) | সেট থাকা অবস্থায় পরিমাপকৃত মানে ভরসা করবেন না |
সাধারণ সমস্যা ও সমাধান
| লক্ষণ | প্রোটোকলগত কারণ | প্রতিকার |
|---|---|---|
| সবকিছু FFh | ACK নেই: ভুল ডিভাইস অ্যাড্রেস, পেজ বাস্তবায়িত নয়, মডিউল অনুপস্থিত | A0h বনাম A2h, পেজ বিট এবং মডিউলের বসানো যাচাই করুন |
| ভুল বিষয়বস্তু | পুরোনো পেজ/ব্যাংক সিলেক্ট | আপার পেজে প্রতিবার ঢোকার আগে 127 (এবং 126) লিখুন |
| নষ্ট বাইট | ক্লক খুব দ্রুত, লম্বা তার, DDM পোল করা হোস্টের সঙ্গে সংঘর্ষ | গতি কমান, ছোট ক্যাবল ব্যবহার করুন, চালু সুইচে নয়, টেস্ট বেঞ্চে পড়ুন |
| লেখা “সফল” হয়, কিন্তু পড়লে পুরোনো মান আসে | খুব দ্রুত লেখা, t_WR উপেক্ষা করা, পেজ-রাইটের সীমা পার করা | বাইট রাইট বা ছোট অংশে লেখা, মাঝে অপেক্ষা সহ; ACK পোলিং |
| বাস আটকে যায়, SCL বা SDA নিম্ন অবস্থায় আটকে থাকে | ট্রানজ্যাকশন মাঝপথে থেমে গেছে | নয়টি SCL পালস দিন, তারপর STOP দিন; মডিউলের পাওয়ার বন্ধ করে আবার চালু করুন |
| সুইচে কাজ করে, প্রোগ্রামারে সাড়া দেয় না | মডিউল LPMode মুক্ত অবস্থা বা সিলেক্ট পিনের সংকেত আশা করে | ModSelL/LPMode মেনে চলুন; t_init সময় দিন |
এগুলোর টেস্ট বেঞ্চ-পর্যায়ের ডায়াগনস্টিকস EEPROM পড়া ও লেখার ত্রুটি পেজে একত্র করা আছে; বাসের ওপর চলা সুরক্ষা ব্যবস্থা (পাসওয়ার্ড, হার্ডওয়্যার WP, সেভ কমান্ড) আছে লেখা-সুরক্ষার ধরন পেজে।
চালু সিস্টেমে পড়া
হোস্ট কয়েক সেকেন্ড পরপর DDM পোল করে এবং ফ্ল্যাগে সাড়া দেয়; একই বাসে দ্বিতীয় মাস্টার (প্রোগ্রামার ক্লিপ, ইন-ব্যান্ড টুল) থাকলে সংঘর্ষ, ভুল ঠিকানায় লেখা এবং সবচেয়ে খারাপ ক্ষেত্রে ভুল অফসেটে পেজ রাইট পড়ায় মডিউল অচল (ব্রিক) হতে পারে। বাধ্য হলে চালু অবস্থাতেই পড়ুন; লিখুন টেস্ট বেঞ্চে।
CodingBox-এ
CodingBox প্রতিটি ফর্ম ফ্যাক্টরের অ্যাড্রেস মডেল নিজে সামলায়: SFP-এর জন্য A0h/A2h, QSFP ও XFP-এর জন্য পেজিং, CMIS-এর জন্য ব্যাংক + পেজ। প্রতিটি প্রোগ্রামার প্রোফাইলে বাস-গতি ও লেখার টাইমিং ঠিক করা যায়, আর প্রতিটি লেখা ফেরত পড়ে যাচাই করা হয় (মডিউলে লেখা)।