مخدوش شدن محتویات EEPROM در STM32

دوستان سلام.
چند روز پیش یه مشکلی داشتم با کتابخونه eeprom.h در STM32 که در این تاپیک مطرح کردم و خب مشکل برطرف شد.

اما مشکل جدیدی که پیش اومده اینه که محتویات آدرس های EEPROM با نوشتن در اون از بین میره و مقادیر نامعتبری میگیره…
مثلا من دوتا متغیر 32 بیتی و 5 تا رشته(8بیتی) 20 عضوی رو میخوام توی EEPROM ذخیره کنم. با ذخیره رشته اول مشکلی نیست ، رشته دوم مشکلی نیست اما یهو با ذخیره رشته سوم(ممکنه رشته پنجم باشه و اصلا معلوم نیست کِی این خطا رخ میده)، تمام محتویات من حتی اون دوتا متغیر 32 بیتی مقادیر نامعتبر میگیرن. به عبارتی پاک میشن و فقط بخشی از دیتا درست باقی میمونه.
این اشکال گاهی پیش نمیاد و گاهی خیلی سریع بروز میکنه.
و اینکه با پاک کردن محتوای چند آدرس مشکل جدی تر بروز میکنه.

کارهایی که تابحال انجام دادم و جواب نگرفتم:
1-آهسته کردن نوشتن تا 10 میلی ثانیه برای هر خانه حافظه
2-تغییر در استفاده از HAL_FLASH_Unlock() و HAL_FLASH_Lock() در جاهای مختلف.
3-تغییر در مقدار پیشفرض حافظه
4-Full Chip Erase قبل از هر بار پروگرم کردن
5-ریست کردن کل حافظه قبل از شروع با خود میکرو کنترلر

اگر کسی میدونه لطفا راهنمایی کنه. ممنونم.

قبل از نوشتن روی فلش باید اون page رو erase کنین، بهتره خودتون به صورت رجیستری کد بزنین و فلگ های کنترلر فلش رو چک کنین. کار کردن با رجیسترش راحت تره و دید بهتری نسبت به کارکردش بهتون میده.

1 پسندیده

منظورتون اینه که برای بار اول این کارو بکنم یا هردفعه همه محتویات یه پیج رو بخونم و بعد دیتایی که میخوام رو تغییر بدم و مجدد بنویسم؟
و اینکه این کار رو کتابخونه خودش انجام نمیده؟؟؟

از کجا میتونم دستورات کار با فلش رو ببینم مهندس؟

  • بله باید محتویات قبلی PAGE رو بردارین، ویرایش کنین، کل PAGE رو پاک کنین، دوباره بنویسین
  • نه انجام نمیده شما باید انجامش بدین
  • همون کتابخونه HAL رو دنبال کنین روی پایینترین سطحش با رجیسترها داره کار میکنه از اونجا بردارین
1 پسندیده