راه اندازی حافظه جانبی QuadSPI با رابط گرافیکی EmWin در LCD 5 Inch

850,000 ریال

با توجه به نیاز کدنویسان میکروکنترلر به حافظه بیشتر در بعضی از پروژه ها ما نیاز به حافظه ای پر سرعت داریم مانند حافظه Flash میکرو اما حجم آن نمی توان از حدی بیشتر باشد یا حافظه حجم بالا مانند SDCARD ولی سرعت پایین و نه حافظه خیلی کم مثل آی‌سی‌های EEPROM باشد. اینجاست که می توان به کمک حافظه های فلش در ظرفیت های چند مگابایت به نام QuadSPI با حم مناسب، سرعت بالا و قابلیت دیباگ استفاده کرد.

توضیحات

با توجه به نیاز کدنویسان میکروکنترلر به حافظه بیشتر در بعضی از پروژه ها ما نیاز به حافظه ای پر سرعت داریم مانند حافظه Flash میکرو اما حجم آن نمی توان از حدی بیشتر باشد یا حافظه حجم بالا مانند SDCARD ولی سرعت پایین و نه حافظه خیلی کم مثل آی‌سی‌های EEPROM باشد. اینجاست که می توان به کمک حافظه های فلش در ظرفیت های چند مگابایت ، این خلاء را جبران کرد و پروژه ها را با هزینه کمتری انجام داد.

حافظه های FLASH از نسل EEPROM ها هستن اما با این تفاوت که در حافظه های EEPROM ما کنترل حافظه ها به صورت بایت بایت را داریم، در صورتی که در حافظه های FLASH ما فقط می توانیم مجموعه ای از حافظه را مدیریت کنیم.

 

مشخصات آی سی های QuadSPI

_ ولتاژ تغذیه بین ۲٫۷ تا ۳٫۶ ولت DC
_ جریان مصرفی کمتر از ۴ میلی آمپر
_ محدوده دمایی بین ۴۰- تا ۸۵+ سانتی گراد
_ قابلیت نوشتن و خواندن بیش از ۱۰۰۰۰۰ بار
_ بیش از ۲۰ سال زمان نگهداری اطلاعات
_ سرعت انتقال داده بیش از ۷۵MB/s در مدل های مختلف

 

شکل ظاهری و مشخصات آی سی w25q128fv

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

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

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

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

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

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

 

خانه های حافظه در آی‌سی‌‌های فلش به سه صورت می باشند : بلوک ، سکتور و صفحه

کل حافظه به بلوک های ۶۴KB تقسیم می شود و هر بلوک به ۱۶ سکتور ۴KB سپس هر سکتور به ۱۶ صفحه ۲۵۶B تقسیم می شود .

به عنوان مثال تصویر بالا خانه های حافظه آی‌سی‌ ۲۵Q128 را نمایش می دهد که تقسیم بندی خانه های حافظه به صورت زیر است :

آی‌سی‌ ۲۵Q128 دارای ظرفیت ۱۲۸ مگابیت که برابر است با ۱۶ مگا بایت ( ۱۲۸Mb/8=16MB )

_ تعداد بلوک ها : مقدار کل حافظه آی‌سی‌ تقسیم بر مقدار ۶۴ کیلوبایت : ۲۵۶ بلوک

_ تعداد سکتورها : مقدار حافظه هر بلوک تقسیم بر ۴ کیلوبایت که می شود ۱۶ سکتور به ازای هر بلوک حال  مجموع کل سکتورها برابر است با  ۴۰۹۶=۱۶*۲۵۶

_ تعداد صفحه ها : مقدار حافظه هر سکتور تقسیم بر ۲۵۶ بایت که می شود ۱۶ صفحه به ازای هر سکتور حال مجموع کل صفحه ها برابر است با ۶۵۵۳۶=۱۶*۴۰۹۶

 

نحوه خواندن و نوشتن اطلاعات در آی‌سی‌ فلش

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

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

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

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

 

نحوه پاک کردن اطلاعات در آی‌سی‌ فلش

برای پاک کردن اطلاعات ما از چهار روش زیر می توانیم استفاده کنیم :

_ پاک کردن اطلاعات به صورت سکتور ( ۴ کیلوبایتی )

_ پاک کردن اطلاعات به صورت بلوک ( ۳۲ کیلوبایتی )

_ پاک کردن اطلاعات به صورت بلوک ( ۶۴ کیلوبایتی )

_ پاک کردن اطلاعات به صورت کلی

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

 

برنامه نویسی

حالت در فایل های .c باید عبارتی مانند عبارت های زیر نوشته شود:

“pragma default_variable_attributes = @ “QSPIs#

که عبارت بالا جهت ذخیره متغیر ها در آدرس داده شده استفاده می شود و عبارت:

“pragma default_function_attributes = @ “QSPIs#

جهت ذخیره توابع در آدرس مذکور هستند.

نکته مهم دیگر این است که در تنظیمات پروژه IAR فایل خروجی از نوع intel extended تعریف شده باشد.

پس از انجام این تنظیمات و کامپایل کد گام بعدی ریختن این اطلاعات بر روی حافظه QSPI است.

برای این منظور باید از St link utility استفاده شود (سعی شود از نسخه های آخر استفاده شود).

ابتدا باید نوع حافظه را به اس تی لینک معرفی کرد

 

پروگرم کردن QSPI Flash از طریق BootLoader Uart

روش این است که یک بوت لودر با یوآرت نوشته می شود از طریق نرم افزار Flash loader demonestator و یوآرت، حافظه فلش خارجی پروگرم می شود.

به نظر می رسد این روش برای آپدیت هم در آینده خوب است. و راه حل کاملی است.

توضیحات روش کار و نمونه مثلا در فایل PDF همراه پروژه وجود دارد.

 

نکته مهم:

در گام بعدی در برنامه به منظور اینکه متغیر یا تابعی در فلش خارجی قرار گیرد باید به صورت های زیر عمل شود:

برای متغیر:

شروع:

pragma default_variable_attributes = @ “QSPIs” __root#

پایان:

=pragma default_variable_attributes #

برای توابع :

شروع:

“pragma default_function_attributes = @ “QSPIs#

پایان:

“pragma default_function_attributes #

برای نمایش عکس:

pragma location = @ “QSPIs” __root#




مدت ویدئو: ۷۸ دقیقه

نوع آموزش: فارسی

کد سورس: دارد

شماتیک مدار: دارد

کامپایلر: IAR

نرم افزار: STM32 Cube MX, GUI Builder, BMP Convertor, H Convertor, 

کتابخانه: HAL Library


توجه: برای پخش ویدئو نرم افزار های KMPlayer و K-Lite Codec Pack در سیستم شما نصب باشد.