توضیحات
مقدمه
گاهی وقت ها نیاز دارید تا اطلاعات را در پروژه های خود ذخیره کنید و حافظه میکروکنترلر کفاف ذخیره بعضی فایلهای جانبی نظیر عکس ها، لاگ دیتا، صدا و هر اطلاعاتی که حجم آن ها نسبتا زیاد است را نمی دهد.تقریبا همه میکروکنترلرهای دارای حافظه داخلی کمی هستند. حافظه فلش میکرو سختی های خاص خود را دارد مثلا همیشه باید مراقب باشید تا اطاعات شما پر نشود! در هر حال بهترین گزینه استفاده از یک حافظه خارجی است که SDCARD ها بیشترین فضا را می توانند در اختیار شما قرار دهند تا هر فایلی را که دوست دارید با سرعت بالا ذخیره و یا از آن بخوانید.
PinOut
ارتباط SDIO
در این روش برای افرایش سرعت خواندن و نوشتن بر روی حافظه ۴ خط داده در نظر گرفته شده است که باعث افزایش چشمگیر سرعت ارتباطی با حافظه شده است ولی از این حالت ارتباطی اغلب میکروکنترلر های ARM پشتیبانی میکنند وحتی در میکروکنترلر های ARM STM32 هم تمامی آنها از این مد ارتباطی پشتیبانی نمیکنند.
سیستم فایل FatFs بر روی کارت SD
سیستم فایل، یعنی روشی که برای ذخیره فایلها روی وسایل ذخیره ساز استفاده میشود. از مشهورترین و قدیمیترین این سیستمها، Fat میباشد. با استفاده از این سیستم فایل میتوان فایلهایی که روی حافظه ذخیره کردید در دستگاه های دیگر، مانند رایانه شخصی، که از این سیستم فایل پشتیبانی میکنند، مشاهده کرد و تغییر داد. معروفترین سیستم فایل ارائه شده برای سیستمهای میکروکنترلری و تعبیه شده، توسط فردی به نام Chan نوشته شده است (elm-chan.org). این سیستم فایل، سیستم فایل FAT و exFAT برای سیستمهای تعبیه شده میباشد. رایگان و متن باز است و بر اساس C نوشته شده است. در واقع پشتهای نرمافزاری است که بین کاربر و سختافزار قرار میگیرد تا کاربر از درگیر شدن با سختافزار رها شود.
رابط های این نرم افزار عبارتند از:
- دسترسی به فایل
- f_open – بازکردن یا ساختن یک فایل
- f_close – بستن یک فایل باز
- f_read – خواندن یک فایل
- f_write – نوشتن داده
- f_lseek – حرکت دادن اشاره گر خواندن/نوشتن، گسترش اندازه
- f_truncate – بریدن اندازه
- f_sync – تخلیه داده نگهداری شده (cache)
- f_forward – پیش فرست داده به جریان
- f_expand – اختصاص یک بلوک هم مرز به فایل
- f_gets – خواندن یک رشته
- f_putc – نوشتن یک کاراکتر
- f_puts – نوشتن یک رشته
- f_printf – نوشتن یک رشته قالب بندی شده
- f_tell – گرفتن اشاره گر خواندن/نوشتن کنونی
- f_eof – آزمودن پایان-فایل
- f_size – گرفتن اندازه
- f_error – آزمون یک خطا
- دسترسی پوشه
- f_opendir – باز کردن پوشه
- f_closedir – بستن یک پوشه باز
- f_readdir – خواندن یک پوشه
- f_findfirST – باز کردن یک پوشه و خواندن اولین موردی که تطیبق میکند
- f_findnext – خواندن مورد بعدی که تطبیق میکند
- مدیرت فایل/پوشه
- f_STat – بررسی وجود فایل یا زیرپوشه
- f_unlink – حذف یک فایل یا زیرپوشه
- f_rename – تغییر نام یا جابجا کردن یک فایل یا زیرپوشه
- f_chmod – تغییر صفات یک فایل یا زیرپوشه
- f_utime – تغییر مهر زمانی یک فایل یا زیرپوشه
- f_mkdir – ساختن یک زیرپوشه
- f_chdir – تغییر پوشه جاری
- f_chdrive – تغییر درایو جاری
- f_getcwd – بازیابی درایو یا پوشه جاری
- مدیریت حجم
- f_mount – ثبت یا حذف ناحیه کاری در حجم
- f_mkfs – ساختن یک حجم FAT روی درایو منطقی
- f_fdisk – ساختن درایو منطقی روی درایو فیزیکی
- f_getfree – گرفتن اندازه کلی و اندازه آزاد روی حجم
- f_getlabel – گرفتن برچسب حجم
- f_setlabel – گذاشتن برچسب حجم
قبل از استفاده از هر فایلی باید ابتدا یک ناحیه کاری (شی سیستم فایل) در درایو منطقی با دستور f_mount ثبت شود. غیر از f_mkfs و f_fdisk سایر تابعها بعد از این فرایند آماده کار میشوند. عملیات باز کردن تابع باید قبل از جداکردن حافظه یا خاموش کردن دستگاه بسته شود وگرنه فایل خراب خواهد شد. برای باز کردن چند فایل با هم باید به ترتیب زیر عمل کرد. اما باز کردن چندگانه یک فایل با پرچمهای نوشتن متفاوت ممنوع است. FatFs از باز کردن چندگانه یک فایل حمایت نمیکند مگر اینکه در حالت فقط خواندنی باشند. اگر یک فایل چندباره باز شود، تغییر نام یا پاک کردن آن مجاز نیست. تخطی از این دستورها ممکن است به خرابی فایل منجر شود. می توان از گزینه قفل کردن فایل _FS_LOCK استفاده کرد. با یک کردن این گزینه همه حالت های گفته شده بالا که منجر به خطا میشوند متوقف میشود و با پیغام FR_LOCKED پاسخ داده میشود. اگر تعداد فایل های باز از مقدار _FS_LOCK بیشتر باشد هر دستور جدیدی برای باز کردن یا ایجاد فایل جدید با پیام FR_TOO_MANY_OPEN_FILES رد میشود.
نحوه عملکرد
در این آموزش نحوه راه اندازی حافظه SD CARD و کانفیگ آن در نرم افزار STM32 Cube MX و نحوه تست، خواندن و نوشتن و همچنین بررسی توابع آن را فرا خواهید گرفت. در ضمن با فعال سازی USB_Device در کیوب تمام مراحل عملیات SD CARD مستقیماً از طریق پورت USB میکروکنترلر به کامپیوتر ارسال و دریافت می شود.