به نام خدا....!
سلام دوستان...!
یه چند وقتیه که آموزش کار با کارت SD رو یاد گرفتم و نیومدم بزارم! برای همین دیگه پیشرفتی نداشتم! به این نتیجه رسیدم که باید بیام و دینم رو ادا کنم تا انشالله کارم راه بیفته...!بریم سراغ آموزش...!
خوب چون توی میکرو حافظه ی زیادی نداریم باید از یک حافظه ی خارجی استفاده کنیم! این واقعا خیلی لذت بخشه که ما بتونیم از کارت SD استفاده کنیم!
طریقه ی وصل کردن و... هم برید توی سایتا بخونید..! چون من برد آموزشی دارم دیگه خودم وصل نکردم و بلدم نیستم..!
خوب ما باید از یک کتاب خونه برای اتصال و خواندن و نوشتن در کارت SD استفاده کنیم! برای همین از کتاب خونه ی خود برنامه ی کیل استفاده میکنیم!
شما اگه برید توی آدرس زیر میتونید به کتابخونه دسترسی داشته باشید..!
C:\Keil\ARM\Boards\Keil\MCB1700\RL\FlashFS\SD_File
خوب چون یکی از دوستان توی سایت ECA توضیح دادن! (خودمم از اونجا یاد گرفتم) بقیه اش رو از اونجا براتون میزارم..!
همونطور که میدونید Flash-fs بخشی از کتابخانه RL-ARMه KEIL هست.
پس برای استفاده از این مجموعه اول باید rl-arm را نصب داشته باشید.
این مجموعه از نسخه keil 4.2 به بالا تر هنگام نصب کیل نصب میشود.
دوستانی که از ورژن های پایین تر استفاده میکنند باید rl-arm رو از سایت کیل دانلود و نصب کنید.
این مجموعه نیاز به لایسنس هم داره.برای کرک از همون کرکی که خود کیل رو کرک کردید میتونید استفاده کنید.فقط قسمت پایین رو بزارید روی real-time OS.
خود کیل برای این کتابخانه و برای lpc1768 یک مثال قرار داده که بر اساس همون پیش میریم.
این مثال در این مسیر وجود داره : C:\Keil\ARM\Boards\Keil\MCB1700\RL\FlashFS\SD_File
برای کار با این کتابخانه باید فایل های زیر در پروژه شما وجود داشته باشه:
File_config.c: برای تنظیمات مربوط به کارت حافظه و سایر مواردی که بعدا توضیح داده میشوند.
Fs_cm3.lib: کتابخانه استاندارد برای کار با حافظه های فلش nand و nor و کارت های حافظه از جمله mmc.
Retaraet.c: یه جورایی واسه تغییر اسم توابع هست.
Spi_lpc17xx.c: این هم که دیگه مشخصه.برای استفاده از spi جهت راه اندازی mmc.
فایل Fs_cm3.lib رو میتونید از این مسیر C:\Keil\ARM\RV31\LIB پیدا کنید.
برای شروع این شاخه رو در پروژه جدید ایجاد کنید تا با هم پیش بریم.
تنظیمات مربوط به File_config.c:
این فایل مربوط به انتخاب نوع کارت حافظه و درایور آن میباشد.
همان طور که در تصویر بالا مشاهده میکنید در تنضیمات این فایل و در قسمت file system میتوان تعداد فایل های باز در هر لحظه را مشخص کرد.حداکثر 16.
لازم به ذکر است که در flash-fs برای هر فایل باز میزان 592 بایت حافظه heap (پشته) نیاز است.
که برای تعیین مقدار این حافظه باید فایل startup_LPC17xx.s را باز کرده و از قسمت configuration Wizard مقدار heap size را تغییر دهید.
از اون جایی که قصد استفاده از SD/MMC رو داریم پس در تصویر بالا تیک قسمت Memory Card Drive 0 رو میزنیم.
مواردی که در این قسمت دیده میشن:
Bus Mode:بذارید روی spi.
File System Cache: در مواردی که قصد دارید تعداد بایت زیادی رو از کارت حافظه بخوند یا در اون بنویسید.اون وقت هست که حافظه cache میتونه در افزایش سرعت بهتون کمک کنه.
Relocate Cache Buffer: تا اونجایی که من فهمیدم با این گزینه میتونید حافظه cache رو به خود مموری منتقل کنید.به جای استفاده از رم خود میکرو.
FAT Journal:محافظت از فایل ها در طول قطع برق و سیستم را در یک حالت ثابت نگه می دارد. این گزینه فایل هایی که در طول قطع برق نوشته میشوند را محافظت نمی کند.
Default Drive [M0:]: در صورت انتخاب این گزینه در تابع finit نیازی به نوشتن Drive مورد نظر نیست و به صورت دیفالت همین Memory Card Drive 0 رو انتخاب میکنه.
خوب یه نگاهی هم به توابع بندازیم که کار اصلی رو برامون انجام میدن...!
تابع finit
اولین تابع ، تابع finit.
این تابع برای اینیشیال کارت حافظه است که به این صورت به کار میرود.a=finit(NULL);
ورودی این تابع میتونه موارد دیگه ای هم باشه که میتونید در این صفحه ببینید
در صورت قرار دادن NULL درایوی اینیشیال میشود که تیک قسمت default drive رو زده باشید.که ما زدیم.تابع funinit هم هست که دقیقا عکس کار تابع بالا رو میکنه.
پارامتر های این تابع به این صورت میباشد:
FILE* fopen (
const char* filename, /* file to open */
const char* mode); /* type of access */
پارامتر mode میتواند یکی از مقادیر زیر باشد:
"r" که برای خواندن از فایل استفاده میشود.
"w" که برای نوشتن در فایل جدید به کار میرود. در حقیقت یک فایل با نامی که شما داده اید ایجاد میشود و در آن مینویسد.توجه داشته باشید که در صورت وجود فایل با نامی که شما انتخاب کردید،فایل قبلی حذف شده و فایل جدید جایگزین میشود.
"a" که کار حالت بالا رو انجام میده با این تفاوت که دیگه فایل قبلی رو حذف نمیکنه و کاراکتر های نوشته شده در فایل به محتویات فایل اضافه میشوند.
"b" که میتونه با حالت های بالا ترکیب بشه و تاثیری در عملکرد آنها ندارد فقط از استاندارد ISO پشتیبانی میکنه.
"+" میتونه با تمام حالات بالا ترکیب بشه به عنوان دومین یا سومین کاراکتر که در این صورت میتوان عملیات خواندن و نوشتن را همزمان انجام داد.
در صورت استفاده از این تابع خروجی آن که همان فایل باز شده است در ساختار FILE قرار میگیره.
ffind (const char *pattern,FINFO *info)
Pattern توضیح "*" or "*.*" جست و جو برای همه فایل هایی که در این دایرکتوری است "abc*" جست و جو برای فایل هایی که با abc شروع میشوند "*.htm" جست و جو برای فایل هایی که با .htm تمام میشوند "abc*.text" جست و جو برای فایل هایی که با abc شروع و با .text تمام مشوند
typedef struct {
S8 name[256]; /* File name */
U32 size; /* File size in bytes */
U16 fileID; /* System Identification number */
U8 attrib; /* File attributes */
RL_TIME time; /* Create/Modify time */
} FINFO;