یک دفتر رویداد که بعد از قطع برق باقی بماند
در یک ثبتکننده سختافزاری، نوشتن پیدرپی رویدادها روی حافظه داخلی ممکن است با محدودیت دوام یا تأخیر پاک کردن صفحه روبهرو شود. برد FRAM آدافروت با شناسه ۱۸۹۵ یک حافظه فروالکتریک غیرفرار روی باس I2C است. ظرفیت اعلامشده ۲۵۶ کیلوبیت، معادل ۳۲ کیلوبایت است. میتوان بایتها را بدون مرحله پاک کردن صفحه بهروزرسانی کرد و داده پس از قطع تغذیه باقی میماند. چنین خصوصیتی برای بررسی بازیابی سامانه از خاموشی ناگهانی کاربرد دارد، به شرط آنکه قالب رکورد نیز برای این وضعیت طراحی شده باشد.
فرض کنید دستگاهی علت آخرین بازنشانی، شماره نسخه نرمافزار و نتیجه یک آزمون سختافزاری را ذخیره میکند. پس از روشن شدن باید بتوانید آخرین رویداد کامل را پیدا کنید. صرف غیرفرار بودن حافظه تضمین نمیکند که رکورد چندبایتی در میانه قطع برق کامل مانده باشد. پرسش این آزمایش این است که کدام داده به طور قطعی نوشته شده، کدام رکورد ناقص است و برنامه چگونه بدون تفسیر داده خراب به عنوان رویداد معتبر ادامه میدهد. این تمایز برای شواهد عیبیابی و امنیت محصول اهمیت دارد.
ظرفیت را با بایت حساب کنید
عبارت ۲۵۶ کیلوبیت نباید با ۲۵۶ کیلوبایت اشتباه شود. برای برنامهریزی فضا، ابتدا تعداد بایت حافظه و اندازه دقیق هر رکورد را بنویسید. برای نمونه، اگر رکورد شما ۳۲ بایت است، ۳۲ کیلوبایت پیش از کسر فضای سربار، ظرفیت ۱۰۲۴ رکورد دارد. اگر قسمتی را برای سربرگ، شماره نسخه یا نسخه پشتیبان وضعیت کنار بگذارید، تعداد قابل استفاده کمتر خواهد شد. این محاسبه به تیم کمک میکند بداند با نرخ ثبت یک رویداد در دقیقه یا یک رویداد در ثانیه چه بازهای باقی میماند.
اندازه رکورد را از روی نمایش متنی یک نمونه حدس نزنید. عدد، زمان، نوع رویداد، شماره توالی، طول داده و مقدار کنترل صحت هر کدام جای مشخص میخواهند. ترتیب بایتها و نسخه قالب را تعریف کنید تا یک ابزار رایانهای نیز بتواند بعداً حافظه را تفسیر کند. اگر رکورد طول متغیر است، رفتار در برابر طول نامعتبر باید روشن باشد. برای نخستین نمونه، رکورد طول ثابت و فیلدهای کم، تشخیص مرزها را بعد از قطع برق سادهتر میکند و امکان آزمون دقیقتری میدهد.
سلامت باس و محدوده آدرس
این برد آماده با باس I2C ارتباط دارد. آدرس وسیله روی باس با نشانی بایت داخل حافظه دو مفهوم متفاوت است. وقتی برنامه میگوید «آدرس پیدا نشد»، نخست مشخص کنید منظور پاسخ ندادن وسیله روی باس است یا خواندن از محل اشتباه در حافظه. پایههای انتخاب آدرس و ولتاژ منطقی را مطابق نسخه خریداریشده و میزبان بررسی کنید. در آزمایش نخست فقط یک حافظه وصل باشد تا برخورد آدرس با نمایشگر یا حسگر دیگری علت پنهان خطا نشود.
ابتدا در چند محل مشخص داخل محدوده مجاز الگوهای متفاوت بنویسید و دوباره بخوانید. آدرسهای آغاز، میانه و انتهای محدوده را با دقت انتخاب کنید و از نوشتن خارج از ظرفیت خودداری کنید. مثلاً الگویی که تنها شامل صفر است، برای تشخیص اشتباه در انتخاب آدرس خوب نیست. ترکیبی از بایتهای متفاوت و شماره محل، جابهجایی یا تکرار آدرس را بهتر آشکار میکند. پس از قطع و وصل کامل تغذیه، همان آدرسها را بخوانید تا نگهداری داده از باقی ماندن مقدار در بافر برنامه تفکیک شود.
نسخه قالب و سازگاری نرمافزار
دستگاهی که امروز ساخته میشود ممکن است چند نسخه میانافزار را در عمر خود تجربه کند. اگر نسخه جدید ترتیب فیلدهای رکورد را عوض کند ولی داده قبلی با قالب تازه خوانده شود، گزارش ظاهراً معتبر اما بیمعنا خواهد بود. یک شناسه قالب و قواعد مهاجرت تعریف کنید. برای رکورد ناشناخته، برنامه باید وضعیت روشن گزارش دهد و داده خام را تا زمان تصمیم درباره تبدیل حفظ کند. پاک کردن خودکار حافظه در نخستین خطای قالب، شواهد تشخیص همان خطا را از بین میبرد.
برای آزمون سازگاری، یک تصویر نمونه با نسخه قدیمی بسازید و پیش از ارتقا آن را نگه دارید. سپس نسخه جدید را اجرا کنید و ببینید چه رکوردهایی خوانده، رد یا تبدیل شدهاند. فرایند تبدیل ممکن است خودش در میانه قطع برق متوقف شود. طراحی خوب میتواند نسخه قبلی را تا اثبات موفقیت نسخه تازه نگه دارد یا هر رکورد را جدا به حالت پایدار منتقل کند. ثبت اینکه کدام مرحله کامل شده، از اجرای دوباره عملیات مخرب هنگام روشن شدن بعدی جلوگیری میکند.
رکورد کامل چگونه تشخیص داده میشود؟
یک طرح ساده میتواند برای هر خانه شماره توالی، نوع رویداد، داده، مقدار بررسی صحت و نشانگر تکمیل داشته باشد. هنگام استفاده دوباره از خانه، ابتدا نشانگر قبلی را نامعتبر کنید، سپس داده و مقدار بررسی را بنویسید و در پایان نشانگر تکمیل را ثبت کنید. در بازیابی، خانه فقط زمانی پذیرفته میشود که نسخه، طول مجاز، نشانگر و بررسی صحت همگی با هم سازگار باشند. ترتیب واقعی عملیات و رفتار کتابخانه باید روی سختافزار آزموده شود. یک فراخوانی ظاهراً واحد در برنامه ممکن است چند انتقال I2C ایجاد کند.
نشانگر تکمیل باید با حالت پاک یا داده تصادفی اشتباه نشود. همچنین بررسی صحت مانند CRC برای تشخیص بسیاری از خرابیهای تصادفی مفید است، اما از دستکاری عمدی جلوگیری نمیکند. اگر هدف ثبت امنیتی مقاوم در برابر تغییر است، مدل تهدید و روش اعتبارسنجی کلیددار یا نگهداری شاهد در سامانه مستقل لازم است. حافظه FRAM قابل نوشتن از باس، به خودی خود دفتر غیرقابل تغییر ایجاد نمیکند. برای نمونه آزمایشگاهی، روشن کنید آیا دنبال تشخیص قطع ناقص هستید یا اثبات اصالت در برابر دستکاری.
حلقه ثبت و انتخاب آخرین رکورد
در یک بافر حلقوی، پس از پر شدن آخرین خانه دوباره از اول مینویسید. برنامه باید بتواند آخرین رکورد معتبر را حتی وقتی سربرگ مکان فعلی خراب است پیدا کند. یک راه، پیمایش خانهها و مقایسه شمارههای توالی معتبر است. باید پیشاپیش رفتار دور زدن شماره تعریف شود، زیرا بزرگترین عدد خام همیشه تازهترین رکورد نیست. اگر شمارنده پس از رسیدن به حد دوباره از صفر آغاز شود، مقایسه ساده عددی میتواند داده قدیمی را جدیدتر اعلام کند.
راه دیگر استفاده از دو نسخه وضعیت با شماره نسل و بررسی صحت است. تازهترین نسخه معتبر محل تقریبی نوشتن را نشان میدهد، ولی بهتر است خانه معرفیشده نیز بررسی شود. اگر قطع برق میان نوشتن رکورد و بهروزرسانی وضعیت افتاد، آخرین رکورد کامل ممکن است یک خانه جلوتر از اشارهگر باشد. یک نمونه کوچک مثلاً هشتخانهای بسازید و چند بار دور کامل بنویسید. فایل نتیجه این آزمایش برای پیدا کردن خطاهایی که تنها پس از پر شدن حافظه ظاهر میشوند بسیار مفید است.
قطع برق در لحظههای متفاوت
برای تمرین، داده بیاهمیت و منبع کمولتاژ کنترلشده انتخاب کنید. در نرمافزار نقاط روشن مثل «پیش از داده»، «پس از بخشی از داده» و «پس از تکمیل» تعریف کنید. با یک روش بازتولیدپذیر در هر مرحله اجرای برنامه را متوقف یا تغذیه هدف را قطع کنید و سپس تصویر خام حافظه را بخوانید. توقف نرمافزار برای آزمون منطق مفید است، ولی رفتار واقعی افت تغذیه را کامل شبیهسازی نمیکند. هر دو نوع آزمایش را با برچسب جدا ثبت کنید.
بعد از هر روشن شدن، نتیجه بازیابی باید قابل پیشبینی باشد. اگر رکورد جدید ناقص است، آخرین رکورد کامل قبلی قابل خواندن بماند. اگر رکورد تازه کامل شده ولی اشارهگر هنوز بهروزرسانی نشده، سیاست بازیابی باید روشن کند آن را چگونه پیدا میکنید. اگر خانهای با طول نامعتبر دیده شد، برنامه نباید از محدوده حافظه بخواند یا به حلقه بیپایان وارد شود. معیار پذیرش را قبل از آزمایش بنویسید و تصویر خام را جدا از گزارش تفسیرشده نگه دارید.
زمان ثبت و رفتار در بار زیاد
سازنده سرعت باس تا یک مگاهرتز را برای این حافظه ذکر میکند، اما سرعت واقعی به میزبان، سیمکشی و دیگر اجزای باس بستگی دارد. سرعت خام کلاک برابر تعداد رکوردهای کامل در ثانیه نیست. ارسال آدرس، انتقال داده، بررسی صحت و کنترل برنامه زمان میبرند. در یک ثبتکننده، به جای حدس از روی مشخصات تراشه، مدت نوشتن یک رکورد کامل و حداکثر نرخ پایدار سامانه را اندازه بگیرید. تغییر نرخ باس باید با کنترل خطا و آزمون کیفیت سیگنال همراه باشد.
اگر رویدادها سریعتر از نوشتن تولید میشوند، باید سیاست صف و سرریز تعریف کنید. حذف قدیمیترین رخداد، رد رخداد تازه یا ثبت شمارنده از دسترفتگی هر کدام معنای متفاوتی برای تحلیل دارند. بهتر است گزارش بتواند تفاوت «هیچ رویدادی رخ نداد» و «رویدادی رخ داد اما جا نبود» را نشان دهد. با یک تولیدکننده داده ساختگی، بار را تا نقطه سرریز افزایش دهید و سپس رفتار واقعی را با سیاست مورد انتظار مقایسه کنید. ثبت خطا نباید خودش حجم بیپایانی از رویداد تازه تولید کند.
استخراج شواهد و کنترل دسترسی
برای انتقال داده به رایانه، نسخه خام دقیق و یک خروجی خوانا با شمارهها و وضعیت اعتبار تهیه کنید. ابزار تبدیل باید برای رکورد خراب نیز رفتار تعریفشده داشته باشد و نخستین خطا را پایان کل پرونده تلقی نکند. اگر زمان دستگاه پیش از همگامسازی معتبر نیست، شماره ترتیب و دلیل بازنشانی را کنار مهر زمانی بنویسید. ترتیب رویدادها در برخی بررسیها مهمتر از ساعتی است که ممکن است پس از قطع برق به مقدار اولیه بازگردد.
این حافظه برای نگهداری داده روی یک باس محلی طراحی شده و یک عنصر امن برای مخفی کردن کلید نیست. اگر شخصی بتواند به باس یا خود برد دسترسی پیدا کند، باید احتمال خواندن یا تغییر داده را در طراحی در نظر بگیرید. برای تمرین از شناسهها و رخدادهای ساختگی استفاده کنید و اطلاعات محرمانه را صرفاً برای آزمون دوام وارد نکنید. پرونده پذیرش نهایی بهتر است شامل طرح حافظه، محاسبه ظرفیت، تصویر قبل و بعد از قطع برق و نتیجه بازیابی روی نسخه واقعی میانافزار باشد. در آن صورت FRAM فقط محل ذخیره چند بایت نیست؛ به شما امکان میدهد رفتار دستگاه در دشوارترین لحظه ثبت را با مدرک بررسی کنید.