এভিআর ফ্ল্যাশ মেমরি দুর্নীতি


11

এই প্রশ্নটি নিজেকে এভিআর ডিগ্রোগ্রামিংয়ের সাথে সম্পর্কিত ।

প্রকল্পের তথ্য:
আমাদের কাছে এটিএমইজিএ product৪৪ পি ব্যবহার করে একটি ব্যাটারি চালিত পণ্য রয়েছে। অ্যাপ্লিকেশনটি স্থায়ীভাবে স্লিপ মোডে চলে এবং কেবলমাত্র একবারে সেকেন্ডে (আরটিসি) জেগে ওঠে বা যখন দুটি বাহ্যিক বাধা লাইনগুলির মধ্যে একটি ট্রিগার হয়।

ডিভাইসে একটি দুর্দান্ত সরল বুট-লোডার রয়েছে যা ইউআআআরটির মাধ্যমে যোগাযোগ করছে (আরএস 232 ইন্টারফেস আইসি ব্যবহার করে)। এটি কেবল ফার্মওয়্যারটি আপডেট করার জন্য একটি সুবিধা পদ্ধতি হিসাবে কাজ করে যাতে কোনও হার্ডওয়্যার আইএসপি প্রোগ্রামার প্রয়োজন হয় না। (বুট-লোডার চেকসাম সুরক্ষিত টেলিগ্রামগুলি আশা করে)

ডিভাইসগুলি অভ্যন্তরীণ বাদামি আউট অক্ষম করার কারণে ডিজাইন করা হয়েছিল কারণ এটি বিদ্যুতের খরচ দ্বিগুণ করে এবং দীর্ঘ ব্যাটারির আয়ু আবশ্যক (আমার ধারণা যে কোনও বাহ্যিক বাদামি আউট সনাক্তকরণ ব্যবহার করা উচিত ছিল - একটি নতুন নকশা কাজ চলছে)।

সমস্যা:
প্রতি কয়েক মাসে একটি ডিভাইস কেবল কাজ করা বন্ধ করে দেয়, সেই ডিভাইসগুলিতে কোনও ফার্মওয়্যার আপডেট করা হয়নি। তবে, আরও পরীক্ষার পরে, সেই ডিভাইসের ফ্ল্যাশ সামগ্রীগুলি দূষিত বলে মনে হচ্ছে। তদুপরি, those ডিভাইসের কিছুগুলির ব্যাটারিগুলি এখনও ভাল ছিল, তবে আমি কোনও ধরণের আন্ডার-ভোল্টেজ পরিস্থিতি অস্বীকার করতে চাই না।

এটি মূল ফ্ল্যাশ সামগ্রী (বাম) সাথে দূষিত সামগ্রীর (ডানদিকে) তুলনা করা হয়েছে:

ফ্ল্যাশ তুলনা

কিছু পর্যবেক্ষণ:

  • একটি দূষিত ব্লক সর্বদা কমপক্ষে একটি ফ্ল্যাশ পৃষ্ঠা (256 বাইট) নিয়ে থাকে এবং পৃষ্ঠাটি সারিবদ্ধ থাকে। অন্য কথায়: শুধুমাত্র পুরো পৃষ্ঠাগুলি প্রভাবিত হয়, একক বাইটগুলি নয়।
  • দূষিত সামগ্রী বেশিরভাগ সময় 0xFF পড়ে, তবে কিছু অন্যান্য মান থাকতে পারে বা সম্পূর্ণ "এলোমেলো" হতে পারে।
  • চিত্রের বাম দিকে ছোট বারটি সমস্ত প্রভাবিত অঞ্চল দেখায়। এই ডিভাইসের জন্য এটি মোট ফ্ল্যাশ সামগ্রীর প্রায় দশমাংশ।
  • আমাদের একটি ডিভাইস ছিল যেখানে কেবলমাত্র একটিমাত্র পৃষ্ঠা প্রভাবিত হয়েছিল।

এটি সম্পূর্ণরূপে প্রশংসনীয় যে ফ্ল্যাশ মেমরিটি লেখার সময় একটি আন্ডার-ভোল্টেজ শর্ত ফ্ল্যাশ সামগ্রীকে দূষিত করতে পারে। তবে এর অর্থ হ'ল কিছু ফ্ল্যাশ সংবেদনশীল নির্দেশাবলী কার্যকর করতে হবে।

আন্ডার-ভোল্টেজের কারণে নিয়ন্ত্রক এলোমেলোভাবে পুনঃসূচনা করছে এবং বুট-লোডার কোডটি এই সময়ের মধ্যে পুরোপুরি অনাকাঙ্ক্ষিত আচরণ করছে। আন্ডার-ভোল্টেজ সম্পর্কিত অন্য ফোরামের কিছু লোককে উদ্ধৃত করতে:

"এটি কেবল ফ্ল্যাশ থেকে চালানো কার্যকর নয়, তবে এলোমেলো নির্দেশাবলীর সময়কালের (গ্যারান্টি নেই যে ফ্ল্যাশ থেকে কোডটি পড়তে হবে এবং সঠিকভাবে ব্যাখ্যা করা হবে) this পাশাপাশি এমসিইউর অন্যান্য অংশগুলি সুরক্ষা সহ ডিজাইনের মতো আচরণ করতে পারে না মেকানিজম। "

প্রশ্ন (গুলি):
আপনি কি মনে করেন যে "আন্ডার-ভোল্টেজ চলাকালীন এলোমেলো আচরণ এবং ফ্ল্যাশ পৃষ্ঠাগুলিতে ডেটা পরিবর্তন করার জন্য কিছু নির্দেশাবলী কার্যকর করা" - ব্যাখ্যাটি যথাযথ? যদি এটি হয় তবে আমরা কেন কিছুক্ষণ এই ধরণের ত্রুটিগুলি কিছু সফ্টওয়্যার সমস্যার (স্ট্যাক ওভারফ্লো, অবৈধ পয়েন্টার) কারণ হিসাবে দেখি না।

আপনার কি অন্য কোনও ধারণা রয়েছে যা এই ধরণের দুর্নীতির কারণ হতে পারে? এটি কি ইএমআই / ইএসডি দ্বারা সৃষ্ট হতে পারে?


আপনার উদাহরণের দ্বিতীয় ব্লকে, কোনও বিটগুলি 1-> 0 বা সমস্তগুলি 0-> 1 ট্রানজিশন থেকে গেছে? আমার কাছে একটি স্ক্রিপ্ট রয়েছে যা এটি গণনা করে তবে আমি আপনার স্ক্রিনশট থেকে সমস্ত নম্বর টাইপ করব না।
markrages

@ চিহ্নগুলি: এটি দেখার থেকে, কেবল 0-> 1 টি। একটি উত্তর এও উল্লেখ করেছে যে এটি আংশিক মুছে যাওয়ার মত দেখাচ্ছে যেখানে সমস্ত বিট 1 এ উল্টানো হয়নি the পর্যবেক্ষণের জন্য ধন্যবাদ।
Rev1.0

উত্তর:


11

আপনার লক্ষ্য করা উচিত যে ফ্ল্যাশটি লেখা হয়নি, এটি মুছে ফেলা হয়েছে। একটি মুছে ফেলা ফ্ল্যাশ 0xFF পূর্ণ। আপনার প্রথম 256 বাইট পুরোপুরি মুছে ফেলা হয়েছে, আপনার তৃতীয় 256-বাইট অঞ্চল আংশিকভাবে মুছে ফেলা হয়েছে (আপনার কাছে সঠিক ডেটা থেকে দূরে একটিতে 0 থেকে 1 বিটফ্লিপ রয়েছে)।

ডাটাশিট অনুসারে , এই ফ্ল্যাশটি পৃষ্ঠা-মুছনীয় (আমি সাধারণত পৃষ্ঠাগুলির চেয়ে বড় মুছা-ব্লকগুলি নিয়ে কাজ করি)। 282 পৃষ্ঠায় দেখা গেছে, এসপিএম দ্বারা পৃষ্ঠা মুছে ফেলা বেশ সহজ।

আপনি বিভাগ 23.8.1 (ফ্ল্যাশ দুর্নীতি রোধ করা) দ্বারা আগ্রহী হতে পারেন:

ভোল্টেজ খুব কম হলে দুটি ফ্ল্যাশ প্রোগ্রামের মাধ্যমে একটি ফ্ল্যাশ প্রোগ্রামের দুর্নীতির কারণ হতে পারে। প্রথমত, ফ্ল্যাশটিতে নিয়মিত লেখার ক্রমটি সঠিকভাবে পরিচালনা করতে সর্বনিম্ন ভোল্টেজের প্রয়োজন। দ্বিতীয়ত, সিপিইউ নিজেই নির্দেশাবলী ভুলভাবে কার্যকর করতে পারে, যদি নির্দেশাবলী কার্যকর করার জন্য সরবরাহের ভোল্টেজ খুব কম থাকে। এই নকশার সুপারিশগুলি অনুসরণ করে ফ্ল্যাশ দুর্নীতি সহজেই এড়ানো যায় (এটি একটি পর্যাপ্ত):

  1. সিস্টেমে বুট লোডার আপডেটের প্রয়োজন না থাকলে কোনও বুট লোডার সফ্টওয়্যার আপডেটগুলি রোধ করতে বুট লোডার লক বিটগুলি প্রোগ্রাম করুন।
  2. অপ্রতুল বিদ্যুৎ সরবরাহের ভোল্টেজের সময়কালে AVR RESET সচল (কম) রাখুন।
    যদি অপারেটিং ভোল্ট-বয়স সনাক্তকরণের স্তরের সাথে মেলে তবে অভ্যন্তরীণ ব্রাউন-আউট ডিটেক্টর (বিওডি) সক্ষম করে এটি করা যেতে পারে। যদি তা না হয় তবে বাহ্যিক লো ভিসিসি পুনরায় সেট করুন সুরক্ষা সার্কিট ব্যবহার করা যেতে পারে। যদি কোনও রাইটিং অপারেশন চলমান অবস্থায় পুনরায় সেট হয়ে যায়, তবে পাওয়ার সাপ্লাই ভোল্টেজ পর্যাপ্ত থাকলে রাইট অপারেশন সম্পন্ন হবে।
  3. কম ভিসিসির সময়কালে এভিআর কোরটিকে পাওয়ার-ডাউন স্লিপ মোডে রাখুন। এটি সিপিইউকে নির্দেশনা ডিকোড করার এবং কার্যকর করার চেষ্টা থেকে বিরত রাখবে, কার্যকরভাবে এসপিএমসিআরএস রেজিস্টারকে রক্ষা করবে এবং এভাবে অনিচ্ছাকৃত লেখাগুলি থেকে ফ্ল্যাশটিকে রক্ষা করবে।

তৃতীয় পৃষ্ঠায় আংশিক মুছে ফেলার বিষয়ে আপনার পর্যবেক্ষণ প্রশংসনীয় বলে মনে হচ্ছে। আট্মেল পাঠ্য সম্পর্কিত: আমরা সকলেই একমত হই যে বিওডিকে বাধ্যতামূলক বলে মনে হচ্ছে। তবে দুর্নীতির সঠিক কারণ সম্পর্কে আমি এখনও নিশ্চিত নই। ফ্ল্যাশ পৃষ্ঠা মুছতে নিয়ামক কেবলমাত্র (লো-ভোল্টেজের কারণে) এই নির্দিষ্ট নির্দেশটি কার্যকর করেছিলেন তা কি যথেষ্ট সম্ভাবনা নয়? আমি বোঝাতে চাইছি, এটি এমনকি বুট লোডার কোড কার্যকর করার সময় ঘটতে হবে, কারণ ফ্ল্যাশ কেবল সেখান থেকে লেখাই যায়। এবং এটি একটি নির্দিষ্ট ক্রম প্রয়োজন।
Rev1.0

3
দুর্নীতির সঠিক উত্সটি ব্যাখ্যা করা সম্ভব নয়: আপনার ভিসিটি হ্রাসের সাথে সাথে অন্য ট্রান্সজিস্টরটিকে অন্য একজনের সাথে পুরোপুরি পরিপূর্ণ করতে এটি খুব কম হয়ে যায়। একটি এমসিইউ মূলত একটি খুব বড় যৌক্তিক সমীকরণ। যদি আপনার ট্রানজিস্টরগুলি লজিকাল সুইচ হিসাবে আচরণ করা বন্ধ করে দেয় তবে আপনি এই সমীকরণটি পরিবর্তন করুন। দুর্ব্যবহারের প্রথম ট্রানজিস্টর যেমন ASIC ওয়েফার ডোপিং এবং বহিরাগত তড়িৎ চৌম্বকীয় পার্টরবার্টের উপর নির্ভর করে, আপনি কী করতে পারবেন তা অনুমান করতে পারবেন না। এই সমস্যাটি মোকাবেলার জন্য, আপনি যখন আপনার ASIC ডিজাইন করেন, আপনি কোনও এনালগ অংশ যুক্ত করতে পারেন যা দুর্ব্যবহারের আগে ডিজিটাল অংশটি স্যুইচ করে। তবে এটি পুরো ASIC ব্যয় বৃদ্ধি করে।
জেসেন

বিভ্রান্তিকর যে অ্যাপ্লিকেশন নোট AVR180 বহিরাগত ব্রাউন আউট প্রোটেকশন বলেছেন: "নোট করুন যে AVR® অভ্যন্তরীণ ফ্ল্যাশ প্রোগ্রাম মেমরির সামগ্রীগুলি অপর্যাপ্ত বিদ্যুৎ সরবরাহের ভোল্টেজ দ্বারা কখনই প্রভাবিত হয় না"। আরও: "যেহেতু এভিআর সিপিইউ তার নিজস্ব প্রোগ্রাম মেমরিতে লিখতে সক্ষম নয়, অভ্যন্তরীণ ফ্ল্যাশ প্রোগ্রাম মেমরির সামগ্রীগুলি কখনই বিদ্যুতের ব্যর্থতার কারণে প্রভাবিত হয় না।" - আইএমও আতেল কেবল এড়িয়ে চলেছে যে বুট লোডারগুলির মতো এমন কিছু আছে যা ফ্ল্যাশ মেম পরিবর্তন করতে পারে।
Rev1.0

@ রেভ ১.০ হ্যাঁ, এটি বেশ সম্ভাবনা নেই ... এজন্য আপনি সর্বদা সমস্ত ডিভাইসগুলির চেয়ে প্রতি কয়েক মাসে কেবল একটি ডিভাইসে এটি দেখতে পান।
ব্যবহারকারী 253751

"আমি বোঝাতে চাইছি, এটি এমনকি বুট লোডার কোড কার্যকর করার সময় ঘটতে হবে, যেহেতু ফ্ল্যাশ কেবল সেখান থেকে লেখাই যায়" " - এটি শুধুমাত্র সত্য যদি বুট লক বিটগুলি ( BLB01এবং বন্ধুরা) যথাযথভাবে সেট করা থাকে! তারা কি? "বিভ্রান্তিমূলক ... অ্যাপ্লিকেশন নোট ..." - অ্যাপ্লিকেশন নোটগুলি কুখ্যাতভাবে বিশ্বাসযোগ্য নয়। এগুলি কেবল অনুপ্রেরণার জন্য ব্যবহার করুন; গ্যারান্টির জন্য, ডেটাশিটগুলিতে নির্ভর করুন (যা ফলস্বরূপ নয় তবে ওহে)।
মার্চেল

4

এটি একটি সুপরিচিত সমস্যা, এবং অনেকগুলি মাইক্রোকন্ট্রোলারকে প্রভাবিত করে (কেবল আতেল নয়)। ফ্ল্যাশ মেমরি নিয়ন্ত্রণের হার্ডওয়্যারটি কম ভোল্টেজের পরিস্থিতিতে মেমরির অংশটিকে দূষিত করে বা মুছে দেয়। সাধারণ ফিক্সটি হল ব্রাউন আউট সুরক্ষা সক্ষম করা।

অবশ্যই সর্বদা অবশ্যই মাইক্রোকন্ট্রোলারগুলিতে ব্রাউন-আউট সুরক্ষা সক্ষম করা উচিত।


3
হাও এবং কেন "মেমরি কন্ট্রোল হার্ডওয়্যারটি কম ভোল্টেজের শর্তে মেমরির অংশটি দূষিত করে বা মুছে দেয়" সম্পর্কে আপনার কোনও দৃ re় উল্লেখ রয়েছে? ফ্ল্যাশ দুর্নীতি সম্পর্কিত প্রচুর ফোরাম আলোচনা রয়েছে তবে এটি কখনও শক্ত কিছুতেই নেমে আসে না, এ কারণেই আমি এখানে জিজ্ঞাসা করেছি।
Rev1.0

এটি কি ইন-চিপ আন্ডার-ভোল্টেজ সমস্যা বা এটি বুটলোডার বিভাগে প্রোগ্রামের ভুল / এলোমেলো প্রয়োগের সাথে সম্পর্কিত যা এএফএইসি কেবল FLASH পরিবর্তন করতে পারে। দ্বিতীয়টি যদি FUSE- র মাধ্যমে বুটলোডার এক্সিকিউটিভ অক্ষম করার সমস্যা হয় তবে বিষয়টি সমাধান করা উচিত।
টিএমএ

আমি মনে করি এটি সম্পর্কে কমপক্ষে একটি মেগা মাইক্রো এর ত্রুটি থেকে পড়া।
ব্যবহারকারী

3

আন্ডার-ভোল্টেজ খুব সম্ভবত একটি কারণ। উদাহরণস্বরূপ, আমার একবার একটি প্রকল্প হয়েছিল যেখানে প্রায় 1.8 ভি এর একটি বাদামী আউট স্তর ঘন ঘন দুর্নীতির কারণ হয়ে থাকে এবং এই দুর্নীতিগুলি কখনও 3.5-V-এর একটি বাদামী আউট স্তর দিয়ে পুনরুত্পাদন করা যায় না।

দ্রষ্টব্য, প্রসেসর যত দ্রুত সঞ্চালিত হয় তত কম আন্ডার-ভোল্টেজ সমস্যার জন্য সংবেদনশীল। যদি সিপিইউ ফ্রিকোয়েন্সি হ্রাস করা আপনার কাছে উপলভ্য বিকল্প, তবে এটি চেষ্টা করার মতো হতে পারে।


1
উত্তরের জন্য ধন্যবাদ. আমরা একটি বাহ্যিক আল্ট্রা লো পাওয়ার ব্রাউন-আউট ডিটেক্টর ব্যবহার করে শেষ করেছি এবং তখন থেকে কোনও দুর্নীতির সমস্যা নেই।
Rev1.0

0

কেউ যদি পিসিবি ডিজাইনের মূল নিয়ম না মানেন তবে ইএমসি আপনার বৃহত্তম শত্রু হবে। এখানে আমার নিজের অভিজ্ঞতা থেকে সর্বাধিক গুরুত্বপূর্ণ: - নির্মাতারা নরকীয় স্কিম্যাটিক্স সম্পর্কে তাদের ডেটাশিটগুলিতে আপনাকে যা বলে তা নির্বিশেষে, প্রতিটি আইসির পাওয়ার লাইনে কমপক্ষে 100 পিএফ - 1 এনএফের মধ্যে রাখুন - স্থলভাগ পরিচালনা করে যতটা সম্ভব প্রতিটি পিসিবির স্তর। এই অঞ্চলগুলি সমস্ত স্তরের মাধ্যমে বৈষম্যের মাধ্যমে যোগাযোগ করা যেতে পারে যতক্ষণ সম্ভব, 50 মিলিল অফ গ্রিডের একটি ভাল মান। গ্রাউন্ড সিগন্যালে সেই অঞ্চলগুলি সংযুক্ত করুন। - আপনার পিসিবিতে কখনও সংযুক্ত না (ভাসমান, কোনও সংকেত সংযুক্ত নেই) তামা ছেড়ে যাবেন না। এটি অ্যান্টেনার মতো কাজ করে এবং ডিভিনিটিফুলিভাবে ডিভাইসগুলিতে বৈদ্যুতিন চৌম্বকীয় বিকিরণ রাখে - ঘড়ির সংকেত বহন করে যত কম সংক্ষেপে বহন করে তা তৈরি করে make

"এমসি প্রুফ পিসিবি ডিজাইনের জন্য গাইড" এর মতো অনুসন্ধান ইঞ্জিনের অনুরোধগুলির দ্বারা আরও বিশদ সন্ধান করুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.