কন্ট্রোলার ও তার ফার্মওয়্যার: DDM, APC, মেমোরি, সুরক্ষা
প্রতিটি ম্যানেজড ট্রান্সিভারের ভেতরে একটি ছোট কম্পিউটার থাকে। মাইক্রোকন্ট্রোলার (MCU) পরিমাপ করে, নিয়ন্ত্রণ করে ও রিপোর্ট দেয়; আর প্রোগ্রামারের দৃষ্টিতে সবচেয়ে গুরুত্বপূর্ণ কথা হলো, আপনি যে মেমোরি পড়েন ও লেখেন, সেটি স্বয়ং এই MCU। মডিউলে সাধারণ EEPROM আছে, নাকি EEPROM-এর ভান করা একটি MCU, তার ওপর নির্ভর করে মডিউল কীভাবে কোড করা যাবে, কেন কিছু লেখা পাওয়ার সাইকেলের পরে হারিয়ে যায় এবং পাসওয়ার্ড আদৌ কেন আছে। এই পেজে বলা হয়েছে কন্ট্রোলার কী করে এবং তার নকশা টেস্ট বেঞ্চে কীভাবে ধরা পড়ে।
MCU কী করে
| কাজ | বিবরণ | যেভাবে দেখা যায় |
|---|---|---|
| পরিমাপ | 10–12 বিটের ADC দিয়ে প্রতি সেকেন্ডে কয়েকবার তাপমাত্রা (থার্মিস্টর বা অন-চিপ সেন্সর), Vcc, লেজার বায়াস, মনিটর-PD কারেন্ট (Tx) ও রিসিভারের ফটোকারেন্ট (Rx) স্যাম্পল করে; কারখানার ক্যালিব্রেশন প্রয়োগ করে | DDM মান: প্যারামিটার |
| APC (অটোমেটিক পাওয়ার কন্ট্রোল) | মনিটর-PD কারেন্টকে কারখানার টার্গেটের সঙ্গে তুলনা করে ড্রাইভারের বায়াস DAC সমন্বয় করে | Tx পাওয়ার স্থির, বায়াস ক্রমশ বাড়ে: Tx বায়াস ও এজিং |
| তাপমাত্রা ক্ষতিপূরণ | লুক-আপ টেবিল তাপমাত্রার সঙ্গে মডুলেশন কারেন্ট এবং PAM4-এ DSP সেটিং সমন্বয় করে | স্থিতিশীল এক্সটিংকশন রেশিও |
| TEC নিয়ন্ত্রণ | কুলিংযুক্ত মডিউলে লেজারের তাপমাত্রা ধরে রাখার PID লুপ; DWDM-এ তরঙ্গদৈর্ঘ্য লকারের ফিডব্যাক | লেজারের তাপমাত্রা ও TEC কারেন্ট মনিটর |
| থ্রেশহোল্ড ও ফ্ল্যাগ | প্রতিটি মনিটর মানকে অ্যালার্ম/সতর্কতার থ্রেশহোল্ডের সঙ্গে তুলনা করে, ল্যাচ করা ফ্ল্যাগ সেট করে, IntL চালায় | থ্রেশহোল্ড ও অ্যালার্ম |
| লো-স্পিড পিন | TX_DISABLE, RS0/RS1, LPMode, ResetL পড়ে; TX_FAULT, RX_LOS চালায় (অথবা হার্ডওয়্যার সংকেত নিয়ন্ত্রণ করে) | পিনের আচরণ |
| দুই-তারের স্লেভ | A0h/A2h-এ (SFP) বা পেজ/ব্যাংকসহ A0h-এ (QSFP, CMIS) সাড়া দেয় | মেমোরি ম্যাপ: দুই-তারের ইন্টারফেস |
| স্টেট মেশিন | CMIS মডিউল ও ডেটা-পাথ স্টেট; অ্যাপ্লিকেশন নির্বাচন; স্কেলচ | CMIS |
| সুরক্ষা ও ভেন্ডর ফাংশন | পাসওয়ার্ড, লেখা-সুরক্ষিত অঞ্চল, সেভ কমান্ড, ভেন্ডর আনলক, অথেন্টিকেশন সিগনেচার | লেখা-সুরক্ষার ধরন |
| CDB / ফার্মওয়্যার আপডেট | CMIS মডিউলে নতুন ফার্মওয়্যার ইমেজ গ্রহণ করে ও ফ্ল্যাশ করে | ফার্মওয়্যার ভার্সনের বাইট |
সাধারণ যন্ত্রাংশ: কম খরচের SFP/SFP+-এ কয়েক kB ফ্ল্যাশসহ 8-বিট MCU (8051-শ্রেণির); 100G+ ও CMIS মডিউলে 32-বিট Cortex-M শ্রেণির MCU; কিছু ভেন্ডর বিশেষ ট্রান্সিভার-কন্ট্রোলার ASIC ব্যবহার করে, যার ভেতরে ADC, DAC ও দুই-তারের স্লেভ একসঙ্গে থাকে।
মেমোরি তৈরির দুটি উপায়
| নকশা | ম্যাপ কীভাবে সংরক্ষিত হয় | প্রোগ্রামিংয়ে পরিণতি |
|---|---|---|
| আলাদা EEPROM (যেমন AT24C02-শ্রেণি) A0h-এর জন্য, A2h-এর জন্য MCU | A0h-এর শনাক্তকরণ তথ্য থাকে আসল সিরিয়াল EEPROM-এ, যার সঙ্গে হোস্ট ও প্রোগ্রামার সরাসরি কথা বলে; MCU শুধু ডায়াগনস্টিকস সামলায় | A0h-এ লেখা সাধারণ EEPROM-এ লেখার মতোই: t_WR ও পেজের আকার মানতে হয়; হার্ডওয়্যার WP পিন লেখা আটকে দিতে পারে (লেখা-সুরক্ষার ধরন 1–3) |
| MCU-ইমুলেটেড ম্যাপ | MCU প্রতিটি দুই-তারের অনুরোধের উত্তর দেয় RAM থেকে এবং পরিবর্তনগুলো তার অভ্যন্তরীণ ফ্ল্যাশ/EEPROM-এ প্রতিফলিত করে, অথবা করে না | লেখা কোথায় যাবে, তা ঠিক করে ফার্মওয়্যার: গৃহীত হয়, উপেক্ষিত হয়, পাসওয়ার্ডের আড়ালে থাকে, সেভ কমান্ড দেওয়ার পরই সংরক্ষিত হয়, অথবা পরের বুটে ফার্মওয়্যারের নিজের কপি দিয়ে ওভাররাইট হয়ে যায় (ধরন 4–5) |
| হাইব্রিড | ভেন্ডর ব্লকের জন্য EEPROM, পেজ ও পাসওয়ার্ডের জন্য MCU | প্রতিটি বাইট-পরিসরে আলাদা নিয়ম |
টেস্ট বেঞ্চের বেশির ভাগ রহস্যের ব্যাখ্যা এই ইমুলেটেড ম্যাপ: ফার্মওয়্যার যে পেজ বাস্তবায়ন করেনি, সেখান থেকে FFh আসা; “সফল” হওয়া লেখা আবার আগের মানে ফিরে যাওয়া; এক পরিসরে শুধু পড়া যায়, পরের পরিসরে মুক্তভাবে লেখা যায়, এমন বাইট; MCU স্যাম্পলিংয়ে ব্যস্ত থাকলে ক্লক স্ট্রেচিং (EEPROM পড়া ও লেখার ত্রুটি)।
বুট এবং t_init উইন্ডো
পাওয়ার চালু হলে MCU তার নন-ভোলাটাইল স্টোর থেকে ক্যালিব্রেশন ও শনাক্তকরণ তথ্য লোড করে, ADC চালু করে, APC-কে টার্গেট পর্যন্ত নিয়ে যায় এবং তারপরই দুই-তারের স্লেভ সক্রিয় করে ও ডেটা প্রস্তুত নয় ফ্ল্যাগ মুছে দেয়। স্পেসিফিকেশন হোস্টকে সাড়া আশা করার আগে যে 300 ms (SFP) থেকে 2 s (QSFP/CMIS) সময় দেয়, সেটি এটাই; আবার ঢোকানোর ঠিক পরে পড়লে আবর্জনা ফেরত আসার কারণও এটাই (হোস্ট কী করে)।
ক্যালিব্রেশন থাকে এখানেই
কারখানা টেস্ট স্টেশনে যে ধ্রুবকগুলো মেপে নিয়েছে, সেগুলো ছাড়া ADC-এর কাঁচা কাউন্ট অর্থহীন: মনিটর-PD কারেন্ট বনাম প্রকৃত লঞ্চ পাওয়ার, মডিউলের তরঙ্গদৈর্ঘ্যে ইনপুট পাওয়ার বনাম রিসিভারের ফটোকারেন্ট, থার্মিস্টর কার্ভ, বায়াস DAC-এর স্কেল। অভ্যন্তরীণভাবে ক্যালিব্রেট করা মডিউলে ফার্মওয়্যার সেগুলো প্রয়োগ করে বাস্তব এককে মান জানায়; বাহ্যিকভাবে ক্যালিব্রেট করা মডিউলে ধ্রুবকগুলো A2h 56–91-এ লেখা থাকে, হোস্ট সেগুলো প্রয়োগ করে (ক্যালিব্রেশন)। কিছু ফার্মওয়্যার এই ধ্রুবক যেখানে রাখে, সেই ভেন্ডর এলাকা ওভাররাইট করলে DDM অর্থহীন হয়ে যায় বা APC লুপ অচল হয়; অসতর্ক লেখায় মডিউল “ব্রিক” হয়ে যাওয়ার ক্লাসিক কারণ এটিই (উৎপাদন ও টেস্টিং)।
সুরক্ষা কীভাবে বাস্তবায়িত হয়
| পদ্ধতি | বাস্তবায়ন | টেস্ট বেঞ্চে যেমন দেখায় |
|---|---|---|
| পাসওয়ার্ড | পাসওয়ার্ড এলাকায় লেখা 4 বাইট (SFP A2h 123–126, QSFP 123–126, CMIS 122–125) ফার্মওয়্যার একটি সংরক্ষিত মানের সঙ্গে মেলায়; সেশনের জন্য লেখা আনলক করে | সঠিক মান না দেওয়া পর্যন্ত WRITE FAIL: পাসওয়ার্ড |
| লেখা-সুরক্ষিত অঞ্চল | যেসব পরিসরকে ফার্মওয়্যার শুধু-পড়ার মনে করে (চেকসাম, থ্রেশহোল্ড, ক্যালিব্রেশন, ভেন্ডর এলাকা), সেখানে লেখা উপেক্ষা করে | বাইটগুলো অপরিবর্তিত পড়া যায়, কোনো এরর নেই |
| আলাদা EEPROM-এ হার্ডওয়্যার WP পিন | পিনটি মডিউলের ভেতরে হাই লেভেলে বাঁধা থাকে বা MCU চালায় | এটি চালানোর জন্য প্রোগ্রামার বোর্ড লাগে |
| সেভ কমান্ড | লেখা যায় RAM-এ; ভেন্ডর-নির্দিষ্ট একটি ক্রম সেগুলোকে ফ্ল্যাশে সংরক্ষণ করে | ক্রমটি না পাঠালে পাওয়ার সাইকেলের পরে আগের মানে ফিরে যায় |
| ফার্মওয়্যার মিরর | বুটের সময় ফার্মওয়্যার নিজের ইমেজ থেকে ম্যাপ নতুন করে লেখে | প্রতিটি পাওয়ার সাইকেলে পরিবর্তন মুছে যায়; ইমেজ বদলাতে পারে শুধু ভেন্ডরের টুল |
| অথেন্টিকেশন | ফার্মওয়্যার ভেন্ডর বাইটে একটি সিগনেচার (সিরিয়াল, ভেন্ডরের ডেটা ও একটি গোপন মানের হ্যাশ) হিসাব করে বসায়; হোস্ট তা যাচাই করে | শনাক্তকরণ তথ্য সম্পাদনা করলে চেকসাম ঠিক থাকে, তবু হোস্ট প্রত্যাখ্যান করে: ভেন্ডর লক |
প্রতিটি ধরন কীভাবে চেনা ও প্রোগ্রাম করা হয়: লেখা-সুরক্ষার ধরন, EEPROM রিকোডিং।
ফার্মওয়্যার আপডেট
CMIS মডিউল দুই-তারের বাসের মাধ্যমে CDB কমান্ড দিয়ে ফার্মওয়্যার গ্রহণ করতে পারে (ডাউনলোড শুরু, ব্লক লেখা, সম্পূর্ণ করা, চালানো, কমিট), প্রায়ই দুটি ইমেজ ব্যাংকসহ, যাতে আপডেট ব্যর্থ হলে আগের ইমেজে ফেরা যায়। SFF-8472/8636 মডিউলের কোনো স্ট্যান্ডার্ড পদ্ধতি নেই; ভেন্ডররা ভেন্ডর বাইটের মাধ্যমে নিজস্ব ক্রম ব্যবহার করে। CMIS ইন্টারঅপারেবিলিটির সমস্যা ভেন্ডররা ফার্মওয়্যার সংশোধনের মাধ্যমেই মেটায় (CMIS-এর সমস্যা), আর ফার্মওয়্যার ভার্সনের বাইট (CMIS লোয়ার পেজ 39–40, পেজ 01h 128–129) শনাক্তকরণ তথ্যের সঙ্গে লিখে রাখা ভালো।
কন্ট্রোলারের ব্যর্থতার ধরন
| লক্ষণ | সম্ভাব্য কারণ |
|---|---|
| মডিউল বাসে দেখা যায় না, অথচ অপটিক্স ঠিক আছে | MCU বুট করছে না: নষ্ট ফার্মওয়্যার, ব্রাউন-আউট, ক্ষতিগ্রস্ত ক্রিস্টাল |
| DDM মান জমে গেছে বা অর্থহীন | ADC বা ক্যালিব্রেশন ডেটা নষ্ট; ফার্মওয়্যার হ্যাং |
| APC ধরে রাখার কথা, তবু Tx পাওয়ার সরে যাচ্ছে | মনিটর-PD বা ADC-এর ত্রুটি, APC বন্ধ |
| এলোমেলো NACK, ধীর পড়া | MCU অতিরিক্ত ব্যস্ত (স্যাম্পলিং), দ্রুত প্রোগ্রামার ক্লক-স্ট্রেচের সীমা ছাড়িয়ে যায় |
| চলে, কিন্তু প্রতিটি লেখা আগের মানে ফিরে যায় | নকশাগতভাবেই ফার্মওয়্যার মিরর; এটি ত্রুটি নয় |
| লেখার পরে মডিউল অচল | ফার্মওয়্যারের কনফিগারেশন বা ক্যালিব্রেশন এলাকা ওভাররাইট হয়েছে |
CodingBox-এ
CodingBox মডিউলকে সেভাবেই দেখে, ফার্মওয়্যার তাকে যেভাবে উপস্থাপন করে: এটি ম্যাপের ধরন শনাক্ত করে, সেভ-কমান্ড ও মিরর করা নকশার জন্য জানা পাসওয়ার্ড ও প্রোগ্রামিং স্ক্রিপ্ট প্রয়োগ করে, চেকসাম নতুন করে হিসাব করে, প্রতিটি লেখার আগে ব্যাকআপ রাখে এবং কন্ট্রোলার খারাপভাবে সাড়া দিলে আপনাকে Code database থেকে তা পুনরুদ্ধার করতে দেয়। স্পেসিফিকেশন যেসব পরিসরকে শুধু-পড়ার বা ভেন্ডর-নির্দিষ্ট বলে ঘোষণা করে, EEPROM editor সেগুলো চিহ্নিত করে, যাতে আপনি বুঝতে পারেন কখন ফার্মওয়্যারের নিজস্ব এলাকায় লিখছেন।