একটি বুটলোডার এমন একটি প্রোগ্রাম যা মাইক্রোকন্ট্রোলারে প্রোগ্রাম করার জন্য চলে। এটি কিছু যোগাযোগের মাধ্যমের মাধ্যমে বাহ্যিকভাবে নতুন প্রোগ্রামের তথ্য গ্রহণ করে এবং সেই তথ্যটি প্রসেসরের প্রোগ্রাম মেমোরিতে লিখে দেয়।
এটি মাইক্রোকন্ট্রোলারের মধ্যে প্রোগ্রামটি পাওয়ার সাধারণ পদ্ধতির সাথে বিপরীত, যা সেই উদ্দেশ্যে মাইক্রোতে নির্মিত বিশেষ হার্ডওয়্যারের মাধ্যমে। পিআইসি তে এটি একটি এসপিআই-এর মতো ইন্টারফেস। যদি আমি ঠিক মনে করি, এভিআরগুলি জেট্যাগ ব্যবহার করে, বা তাদের মধ্যে কমপক্ষে কিছু করে। যে কোনও উপায়ে, এর জন্য কিছু বাহ্যিক হার্ডওয়্যার প্রয়োজন যা প্রোগ্রামিং মিনে প্রোগ্রাম মেমরিতে তথ্য লেখার ঠিক ডানদিকে wiggles। প্রোগ্রামটির মেমরির বিষয়বস্তুগুলি বর্ণনা করে এমন এইচএক্স ফাইলটি সাধারণ উদ্দেশ্যে কম্পিউটারে উত্পন্ন হয়, সুতরাং এই হার্ডওয়্যারটি একদিকে কম্পিউটার এবং অন্যদিকে মাইক্রোটির বিশেষ প্রোগ্রামিং পিনগুলির সাথে সংযোগ স্থাপন করে। আমার সংস্থা পিআইসি প্রোগ্রামারকে অন্য জিনিসগুলির মধ্যে সাইডলাইন হিসাবে তৈরি করে, তাই আমি পিসিকগুলিতে এই প্রক্রিয়াটির সাথে বেশ পরিচিত।
বিশেষায়িত হার্ডওয়ারের মাধ্যমে বাহ্যিক প্রোগ্রামিংয়ের গুরুত্বপূর্ণ বিষয়টি হ'ল প্রোগ্রাম মেমরির বিদ্যমান বিষয়বস্তু নির্বিশেষে এটি কাজ করে। মাইক্রোকন্ট্রোলারগুলি প্রোগ্রামের মেমোরিটি মুছে ফেলা বা অজানা অবস্থায় শুরু করে, তাই প্রথম প্রোগ্রামটিকে একটি মাইক্রোতে স্থান দেওয়ার একমাত্র মাধ্যম হ'ল বাহ্যিক প্রোগ্রামিং।
আপনি যদি আপনার প্রোডাক্টটিতে লোড করতে চান এমন প্রোগ্রাম সম্পর্কে নিশ্চিত হন এবং আপনার পরিমাণগুলি যথেষ্ট পরিমাণে থাকে তবে আপনার জন্য প্রস্তুতকর্তা বা পরিবেশক প্রোগ্রামের চিপস রাখতে পারেন। চিপটি অন্য কোনও চিপের মতো বোর্ডে সোনার হয়ে যায় এবং ইউনিটটি প্রস্তুত হতে প্রস্তুত। এটি খেলনার মতো কোনও কিছুর জন্য উপযুক্ত হতে পারে, উদাহরণস্বরূপ। ফার্মওয়্যারটি শেষ হয়ে গেলে এটি বেশ কার্যকর হয়ে যায় এবং এটি বড় আকারে উত্পাদিত হবে।
যদি আপনার ভলিউমগুলি কম হয় বা আরও গুরুত্বপূর্ণভাবে, আপনি চলমান ফার্মওয়্যার বিকাশ এবং বাগ ফিক্সগুলি প্রত্যাশা করেন, আপনি প্রাক-প্রোগ্রামযুক্ত চিপ কিনতে চান না। এক্ষেত্রে ফাঁকা চিপগুলি বোর্ডে মাউন্ট করা হয় এবং ফার্মওয়্যারটিকে উত্পাদন প্রক্রিয়ার অংশ হিসাবে চিপের উপরে চাপানো হয়। সেক্ষেত্রে হার্ডওয়্যার প্রোগ্রামিং লাইনগুলি কোনওভাবে উপলব্ধ করতে হবে। আপনি যদি উত্পাদন পরীক্ষার স্থিরতা তৈরি করতে ইচ্ছুক হন তবে এটি সুস্পষ্ট সংযোগকারী বা পোগো পিন প্যাডের মাধ্যমেও হতে পারে। প্রায়শই এই জাতীয় পণ্যগুলি পরীক্ষা করতে হয় এবং সম্ভবত যেভাবে ক্যালিব্রেট করা হয়, তাই প্রসেসরে প্রোগ্রাম লেখার অতিরিক্ত ব্যয় সাধারণত ন্যূনতম হয়। কখনও কখনও যখন ছোট প্রসেসরগুলি ব্যবহার করা হয় তখন একটি বিশেষ উত্পাদন পরীক্ষার ফার্মওয়্যার প্রথম প্রসেসরে লোড হয় is এটি ইউনিটটি পরীক্ষা ও ক্যালিব্রেট করার সুবিধার্থে ব্যবহৃত হয়, হার্ডওয়্যারটি ভাল হিসাবে পরিচিত হওয়ার পরে আসল ফার্মওয়্যারটি লোড হবে। এই ক্ষেত্রে প্রোগ্রামিং প্রক্রিয়াটি পর্যাপ্তভাবে কাজ করতে পারে তবে সার্কিটকে খুব বেশি অসুবিধে নাও করতে পারে এমন প্রোগ্রামিং লাইনে অ্যাক্সেসের অনুমতি দেওয়ার জন্য কিছু সার্কিট ডিজাইন বিবেচনা রয়েছে। এ সম্পর্কে আরও তথ্যের জন্য, আমার দেখুনইন-সার্কিট প্রোগ্রামিং লিখনআপ।
এখন পর্যন্ত এত ভাল, এবং কোনও বুটলোডার প্রয়োজন নেই। তবে তুলনামূলকভাবে জটিল ফার্মওয়্যার সহ এমন একটি পণ্য বিবেচনা করুন যা আপনি ক্ষেত্রকে আপগ্রেড করতে চান বা শেষ গ্রাহককে আপগ্রেড করার অনুমতি দিন। আপনি শেষ গ্রাহকের কাছে প্রোগ্রামার গ্যাজেট থাকার আশা করতে পারবেন না, বা আপনি কী সরবরাহ করেছেন এমনকি কীভাবে একটি সঠিকভাবে ব্যবহার করবেন তাও জানেন না। আসলে আমার এক গ্রাহক এটি করেন। আপনি যদি তাদের বিশেষ ক্ষেত্র কাস্টমাইজিং বিকল্পটি কিনেন তবে আপনি পণ্যটির সাথে আমার প্রোগ্রামারগুলির মধ্যে একটি পাবেন।
যাইহোক, বেশিরভাগ ক্ষেত্রে আপনি কেবল গ্রাহককে একটি পিসিতে একটি প্রোগ্রাম চালনা করতে চান এবং ফার্মওয়্যারটি যাদুগতভাবে আপডেট করা উচিত। এটি হ'ল যেখানে কোনও বুটলোডার আসে, বিশেষত যদি আপনার পণ্যটিতে ইতিমধ্যে কোনও যোগাযোগের পোর্ট থাকে যা সহজেই ইউএসবি, আরএস -232 বা ইথারনেটের মতো পিসির সাথে ইন্টারফেস করতে পারে। গ্রাহক একটি পিসি প্রোগ্রাম পরিচালনা করেন যা মাইক্রোতে ইতিমধ্যে বুটলোডারের সাথে কথা বলে। এটি নতুন বাইনারিটি বুটলোডারকে প্রেরণ করে, যা প্রোগ্রাম মেমোরিতে এটি লিখে এবং তারপরে নতুন কোডটি চালিত করার কারণ হয়।
সহজ মনে হচ্ছে, তবে এটি হ'ল না, যদি আপনি এই প্রক্রিয়াটি দৃ be় হতে চান তবে তা নয় not যদি কোনও যোগাযোগের ত্রুটি ঘটে এবং নতুন ফার্মওয়্যারটি বুটলোডারের কাছে আসার সময়টি দূষিত হয়? বুট প্রক্রিয়া চলাকালীন যদি বিদ্যুৎ ব্যাহত হয়? তাহলে কি যদি বুটলোডার একটি বাগ থাকে এবং নিজেই ক্রেপগুলি থাকে?
একটি সরল পরিস্থিতি হ'ল বুটলোডার সর্বদা পুনরায় সেট করা থেকে চালিত হয়। এটি হোস্টের সাথে যোগাযোগের চেষ্টা করে। হোস্ট যদি প্রতিক্রিয়া জানায় তবে তা বুটলোডারকে বলে যে এটিতে নতুন কিছু নেই, বা এটি নতুন কোড প্রেরণ করে। নতুন কোড আসার সাথে সাথে পুরানো কোডটি ওভাররাইট করা হয়েছে। আপনি সর্বদা আপলোড কোড সহ একটি চেকসাম অন্তর্ভুক্ত করেন, যাতে নতুন অ্যাপটি অক্ষত রয়েছে কিনা তা বুটলোডার বলতে পারে। যদি তা না হয় তবে বৈধ চেকসাম সহ কোনও কিছু মেমরিতে লোড না হওয়া অবধি এটি বুটলোডার ক্রমাগত আপলোডের অনুরোধ করে। এটি সর্বদা সংযুক্ত এবং এমন কোনও ডিভাইসের পক্ষে গ্রহণযোগ্য হতে পারে যা সম্ভবত হোস্টে পটভূমি টাস্ক চালিত হয় যা বুটলোডার অনুরোধের প্রতিক্রিয়া জানায়। এই স্কিমটি এমন ইউনিটগুলির পক্ষে ভাল নয় যেগুলি বেশিরভাগ ক্ষেত্রে স্বায়ত্তশাসিত এবং কেবল মাঝে মধ্যে একটি হোস্ট কম্পিউটারের সাথে সংযুক্ত থাকে।
সাধারণত উপরে বর্ণিত সাধারণ বুটলোডার গ্রহণযোগ্য হবে না কারণ কোনও ব্যর্থ নিরাপদ নেই। যদি কোনও নতুন অ্যাপের চিত্রটি অক্ষত না পাওয়া যায়, আপনি সফল আপলোডটি সম্পাদন না করা পর্যন্ত ডিভাইসটি পুরানো চিত্রটি চালিয়ে যাওয়া চালিয়ে যেতে চান, মরে যাবেন না। এই কারণে, সাধারণত ফার্মওয়্যারটিতে দুটি বিশেষ মডিউল থাকে, একটি আপলোডার এবং একটি বুটলোডার। আপলোডার মূল অ্যাপের অংশ। হোস্টের সাথে নিয়মিত যোগাযোগের অংশ হিসাবে, একটি নতুন অ্যাপ্লিকেশন চিত্র আপলোড করা যেতে পারে। এটিতে বাহ্যিক EEPROM এর মতো মূল অ্যাপ্লিকেশন চিত্র থেকে পৃথক মেমরির প্রয়োজন হয় বা একটি বৃহত প্রসেসর ব্যবহার করা উচিত যাতে নতুন অ্যাপ্লিকেশন চিত্র সংরক্ষণের জন্য অর্ধেক প্রোগ্রামের মেমরির স্থান বরাদ্দ করা যায়। আপলোডার কেবল প্রাপ্ত নতুন অ্যাপ চিত্রটি কোথাও লিখেছেন, তবে এটি চালায় না। প্রসেসরটি পুনরায় সেট করা হয়, যা কোনও আপলোডের পরে হোস্টের কমান্ডে ঘটতে পারে, বুটলোডার চালায়। এটি এখন সম্পূর্ণ স্বয়ংসম্পূর্ণ প্রোগ্রাম যা বাহ্যিক যোগাযোগের সক্ষমতা প্রয়োজন হয় না। এটি বর্তমান এবং আপলোড হওয়া অ্যাপ্লিকেশন সংস্করণগুলির সাথে তুলনা করে, তাদের চেকসামগুলি চেক করে এবং সংস্করণগুলি পৃথক হলে এবং নতুন চিত্র চেকসাম চেকগুলি অ্যাপ্লিকেশন অঞ্চলে নতুন চিত্রের অনুলিপি করে। যদি নতুন চিত্রটি দূষিত হয় তবে এটি কেবল আগের মতোই পুরানো অ্যাপ্লিকেশনটি চালায়।
আমি প্রচুর বুটলোডার করেছি এবং দু'জন এক নয়। কোনও মাইক্রোকন্ট্রোলার সংস্থাগুলি আপনাকে বিশ্বাস করতে চায় তা সত্ত্বেও কোনও সাধারণ উদ্দেশ্যে বুটলোডার নেই। হোস্টের সাথে ডিল করার ক্ষেত্রে প্রতিটি ডিভাইসের নিজস্ব প্রয়োজনীয়তা এবং বিশেষ পরিস্থিতি থাকে। আমি এখানে কিছু বুটলোডার এবং কখনও কখনও আপলোডার কনফিগারেশন ব্যবহার করি:
- বেসিক বুটলোডার। এই ডিভাইসের একটি সিরিয়াল লাইন ছিল এবং এটি একটি হোস্টের সাথে সংযুক্ত হবে এবং প্রয়োজন অনুসারে চালু হবে। বুটলোডার রিসেট থেকে দৌড়ে এবং হোস্টকে কয়েকটি আপলোড অনুরোধের প্রতিক্রিয়া প্রেরণ করেছে। আপলোড প্রোগ্রামটি চলমান থাকলে, এটি প্রতিক্রিয়া জানাবে এবং একটি নতুন অ্যাপ্লিকেশন চিত্র পাঠাবে। যদি এটি 500 এমএসের মধ্যে সাড়া না দেয় তবে বুটলোডারটি ছেড়ে দিয়ে বিদ্যমান অ্যাপটিকে চালিত করে। অতএব ফার্মওয়্যার আপডেট করার জন্য আপনাকে প্রথমে হোস্টে আপডেটেটর অ্যাপটি চালাতে হবে, তারপরে সংযোগ স্থাপন করুন এবং ডিভাইসে পাওয়ার করুন।
- প্রোগ্রাম মেমরি আপলোডার। এখানে আমরা পরবর্তী আকারের পিআইসি ব্যবহার করেছি যা প্রোগ্রামের মেমরির দ্বিগুণ। প্রোগ্রামের মেমরিটি মোটামুটিভাবে 49% প্রধান অ্যাপ্লিকেশন, 49% নতুন অ্যাপ্লিকেশন চিত্র এবং 2% বুটলোডারে বিভক্ত ছিল। বুটলোডারটি রিসেট থেকে চালানো হবে এবং সঠিক অ্যাপ্লিকেশন চিত্রটিতে সঠিক অবস্থার অধীনে নতুন অ্যাপ্লিকেশন চিত্রটি অনুলিপি করবে।
- বাহ্যিক EEPROM চিত্র। বাইরের EEPROM নতুন অ্যাপ্লিকেশন চিত্র সংরক্ষণের জন্য ব্যবহৃত হয়েছে # 2 এর মতো। এক্ষেত্রে আরও মেমোরি সহ প্রসেসরটি শারীরিকভাবে আরও বড় হয়ে উঠত এবং অন্য কোনও উপ-পরিবারে আমাদের পেরিফেরিয়ালগুলির মিশ্রণ ছিল না।
- টিসিপি বুটলোডার। এটি ছিল তাদের মধ্যে সবচেয়ে জটিল। একটি বৃহত PIC 18F ব্যবহার করা হয়েছিল। মেমরির শেষ 1/4 বা বুটলোডার ধরেছিল, যার টিসিপি নেটওয়ার্ক স্ট্যাকের নিজস্ব সম্পূর্ণ অনুলিপি ছিল। বুটলোডার পুনরায় সেট করা থেকে দৌড়ে গিয়ে পূর্বের কনফিগার করা আইপি ঠিকানায় পরিচিত বন্দরে একটি বিশেষ আপলোড সার্ভারের সাথে সংযোগ দেওয়ার চেষ্টা করেছিল। এটি ছিল বৃহত ইনস্টলেশনগুলির জন্য যেখানে সর্বদা পুরো সিস্টেমের জন্য একটি ডেডিকেটেড সার্ভার মেশিন ছিল। প্রতিটি ছোট ডিভাইস পুনরায় সেট করার পরে আপলোড সার্ভারের সাথে চেক ইন করবে এবং যথাযথভাবে একটি নতুন অ্যাপ্লিকেশন অনুলিপি দেওয়া হবে। বুটলোডারটি নতুন অনুলিপি সহ বিদ্যমান অ্যাপ্লিকেশনটিকে ওভাররাইট করতে পারে, তবে চেকসাম চেক করা থাকলে কেবল এটি চালিত হবে। যদি তা না হয় তবে এটি আপলোড সার্ভারে ফিরে যাবে এবং আবার চেষ্টা করবে।
যেহেতু বুটলোডার নিজেই একটি সম্পূর্ণ টিসিপি নেটওয়ার্ক স্ট্যাকযুক্ত কোডের একটি জটিল টুকরো ছিল তাই এটি ফিল্ড আপগ্রেডেবলও হতে হয়েছিল। তারা যেভাবে করেছিল আমরা তা হ'ল আপলোড সার্ভারটি একটি বিশেষ অ্যাপ্লিকেশন সরবরাহ করাই ছিল যার একমাত্র উদ্দেশ্য ছিল বুটলোডারটি একবার চালিত হয়ে ওভাররাইট করা, তারপরে মেশিনটি পুনরায় সেট করা যাতে নতুন বুটলোডার চলতে পারে, যার ফলে আপলোড সার্ভারটি প্রেরণ করতে পারে সর্বশেষ প্রধান অ্যাপ্লিকেশন চিত্র। প্রযুক্তিগতভাবে কয়েক মিলি সেকেন্ডের সময় পাওয়ার এড়াতে এটি বুটলোডারের উপরে একটি নতুন চিত্র অনুলিপি করতে বিশেষ অ্যাপ্লিকেশনটি গ্রহণ করেছিল এটি অপরিবর্তনযোগ্য ব্যর্থতা হতে পারে। বাস্তবে এটি কখনও ঘটেনি। আমরা খুব সম্ভবত সম্ভাবনার সম্ভাবনা নিয়ে ঠিক ছিলাম যেহেতু এই ডিভাইসগুলি বৃহত ইনস্টলেশনগুলির অংশ ছিল যেখানে ইতিমধ্যে এমন লোকেরা ছিল যারা সিস্টেমে রক্ষণাবেক্ষণ করবে, যা মাঝেমধ্যে অন্য কারণে এম্বেডড ডিভাইসগুলি অন্য কোনও কারণে প্রতিস্থাপন করে।
আশা করি আপনি দেখতে পাচ্ছেন যে অন্যান্য ঝুঁকির গতি, গতি, ব্যয়, ব্যবহারের সহজলভ্যতা, ডাউনটাইম ইত্যাদির সাথে আরও কয়েকটি সম্ভাবনা রয়েছে each