پروژه ایپرام داخلی(ایمولیشن) و خارجی(ای سی ایپرام و فلش) stm32 HAL

به نام خدا و با سلام

در این مطلب ذخیره سازی اطلاعات و متغیرها در حافظه غیر فرار یا ایپرام داخلی و خارجی را خواهیم داشت.

دوستان در این مطلب و پروژه های تست شده و بهینه شدش قصد دارم تا به طول کلی نیاز شمارو در ذخیره دائمی اطلاعات رفع کنم.

بعضی از میکرو های شرکت ST دارای حافظه ایپرام داخلی نیستند به همین دلیل شرکت ST یک کتابخانه فراهم کرده است که ما بتوانیم اطلاعات را روی حافظه فلش میکرو بنویسیم.

به قابلیت نوشتن  اطلاعات متغییر ها روی حافظه فلش داخلی میکروکنترلر stm‌ ایپرام ایمولیشن میگویند.

برای دیدن سمپل کد های این واحد متونید بخش ریپوسیتوری کیوب mx رو ببیند و از سمپل ها استفاده کنید.

همچنین میتوانید داکیومنت های شرکت سازنده را مطالعه کنید(لینک).

نکته مهم:اگر به مبحث ادرس حافظه فلش میکرو مسلط نیستید ممکن است در طول اجرای برنامه اطلاعات متغیر هارا در ادرس های اشتباه بنویسید که این مشکل سبب هنگ کردن میکرو می شود که تنها پروگرام مجدد این مشکل حل می شود.

اما اگر اطلاعات شما بسیار حساس و حجیم هستند انها در ای سی های خارجی میتوانید ذخیره کنید

دو نوع ای سی  خارجی برای ذخیره سازی دائمی اطلاعات  است:

ایپرام

فلش

ای سی های EEPROM که معمولا ساخته شده توسط شرکت اتمل هستند و پارت نامبر انها با AT شروه میشود و نحوه محاسبه حجم انها به صورت زیر است و پروتکل ارتباطی انها I2C است:

AT24C01 ، عد ۱ به معنی ۱۰۲۴ بیت می باشد پس برای مشخص شدن ظرفیت به بایت ۱۰۲۴ تقسیم بر ۸ میشود ۱۲۸ بایت.
AT24C02 ، عد ۲ به معنی ۲۰۲۴ بیت می باشد پس برای مشخص شدن ظرفیت به بایت ۲۰۴۸ تقسیم بر ۸ میشود ۲۵۶ بایت.
AT24C04 ، عد ۴ به معنی ۴۰۹۶ بیت می باشد پس برای مشخص شدن ظرفیت به بایت ۴۰۹۶ تقسیم بر ۸ میشود ۵۱۲ بایت.
AT24C08 ، عد ۸ به معنی ۸۱۹۲ بیت می باشد پس برای مشخص شدن ظرفیت به بایت ۸۱۹۲ تقسیم بر ۸ میشود ۱۰۲۴ بایت یا ۱ کیلوبایت.

(که برای تبدیل به کیلو بایت ۱۰۲۴ تقسیم بر ۱۰۲۴ میشود،که نتیجه ۱ کیلوبایت ظرفیت میشود)
AT24C16 ، عد ۱۶ به معنی ۱۶۳۸۴ بیت می باشد پس برای مشخص شدن ظرفیت به بایت ۱۶۳۸۴ تقسیم بر ۸ میشود ۲۰۲۴ بایت.(که برای کیلو بایت ۲۰۲۴ تقسیم بر ۱۰۲۴ میشود،که نتیجه ۲ کیلوبایت ظرفیت میشود)

یا به عبارت دیگر یه جور راحت تر بگم براتون عدد اخری که روی ای سی نوشته شده برحسب کیلوبیت هست یعنی برای ۱۶ هست ۱۶-Kbit که داخل دیتا شیت هم همین نوشته شده حالا ۱۶ تقسیم بر ۸ میشه ۲ کیلوبایت یعنی ۲ هزار بایت یعنی ۲ هزار تا متغییر ۸ بیتی میتونید توی این ای سی ذخیره کنید.

می توان اطلاعات درون این ایسی ها را تا ۱ میلیون بار نوشت و از دوباره پاک کرد!( چرخه کامل)
این ایسی ها می توانند تا ۱۰۰ سال ! اطلاعات را درون خودشان نگه دارند.

برای راه اندازی ای سی ایپرام شما به یک واحد I2C میکرو نیاز دارید که میتوانید در کیوب MX تنظیم کنید.

با استفاده از دوتابع زیر در کتابخانه شما میتوانید یک متغیر ۸ بیتی را در یک ادرس بنویسید و بخوانید

bool EEPROM24XX_Save_one(uint16_t Address, uint8_t data );
uint8_t EEPROM24XX_Load_one(uint16_t Address );

 

 

آی سی های فلش پروتکل ارتباطی انها SPI است و سرعت و حجم بیشتری در اختیار شما قرار میدهد

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

 

 

مفهوم عمیق تر از بلوک و سکتو و پیج ای سی فلش به صورت زیر هستش:

 

 

VCC : پایه تغذیه آی‌سی‌که ولتاژ آن بین ۲٫۷ تا ۳٫۶ ولت DC است

GND : پایه زمین یا صفر آی‌سی‌

CS : پایه انتخاب آی‌سی‌( اگر این پایه یک باشد ایسی غیر فعال و اگر صفر باشد آی‌سی‌فعال می شود )

WP : پایه نوشتن محافظت ورودی ( اگر این پایه صفر باشد ما فقط قابلیت خواندن از آی‌سی‌ را داریم و در صورتی که این پایه یک باشد ما قابلیت خواندن و نوشتن از داخل آی‌سی‌ را داریم )

RESET : پایه ریست آی‌سی‌ که با صفر فعال می شود

CLK , Do ,DI : پایه های ارتباط SPI جهت کنترل آی‌سی‌

نکات استفاده از ای سی فلش:

در حافظه فلش به دلیل استفاده از مدارات کمتر، دیگر دسترسی مستقیم به تک تک بایت ها وجود ندارد و باید به صورت مجموعه(صفحه به صفحه) آنها را کنترل کرد .

برای مثال اگر ما بخواهیم بایت دهم از حافظه را بخوانیم چون این بایت در صفحه صفر است ما باید کل این صفحه را که ۲۵۶ بایت است را بخوانیم و سپس درون یک متغیر ۲۵۶ بایتی بریزیم بعد از بایت دهم استفاده کنیم .

برای نوشتن اطلاعات نیز ما نمی توانیم به صورت بایت بایت اطلاعات را از روی آی‌سی‌ فلش بخوانیم و خواندن دیتا باید بصورت صفحه ای ( ۲۵۶ بایتی ) صورت بگیرد .

نکته مهم : ما نمی توانیم دوبار روی یک صفحه اطلاعات بنویسم باید ابتدا اطلاعات صفحه را پاک کنیم و مجددا روی آن صفحه عملیات نوشتن را انجام دهیم .

به طور مثال توابع زیر جهت نوشتن و خواندن یک متغیر ۱۶ بیتی در ای سی فلش به کار می روند:

write_16bit_onflash( 3 , 12000);

in1:address , in2:data16bit

uint16_t data = read_16bit_onflash(3);

همچنین توابع کامل تری جهت خواندن و نوشتن روی سکتور ها و پیج ها و بلوک ها نیز در کتابخانه قرار دارد.

جهت اتصال ای سی فلش به میکرو کنترلر در بخش cube mx شما به حداقل چهار پین نیاز دارید(سه تا واحد spi و یکی برای سلکت):

در فایل زیر براتون ۴ پروژه به همراه کتابخانه کامل به همراه فایل کیوب mx برای نوشتن و خواندن روی حافظه دائمی قرار دادم که شامل دو کتابخانه کامل برای ایپرام ایمولیشن برای سری میکرو های f0 تا f7 و کتابخانه ایپرام سری at24cxx و کتابخانه ای سی فلش w25qxx که میتوانید دانلود کنید.

 

mehdi sehati

در این سایت پروژه و آموزش های انواع ماژول ها و میکروکنترلر ها و نحوه ارتباط سخت افزار با نرم افزار (برنامه نویسی اندروید برای گوشی و برنامه نویسی سی شارپ برای کامپیوتر) و برنامه نویسی پایتون و رسبری پای و ماژول های وای فای قرار میگیرد همچنین دوستان برای توضیحات بیشتر و سفارش پروژه میتوانند به آی دی تلگرام بنده مراجعه کنند

مطالب مرتبط

Subscribe
Notify of
guest

4 نظرات
Inline Feedbacks
View all comments
مهدی
مهدی
4 years ago

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

محمد
محمد
1 year ago

سلام ، وقتتون بخیر جناب مهندس ،این پروژه آیا قابل خرید نیست ؟؟

4
0
Would love your thoughts, please comment.x