به نام خدا....!

سلام دوستان...!

یه چند وقتیه که آموزش کار با کارت 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);
خروجی این تابع در صورت شناسایی و اینیشیال صحیح کارت بایستی صفر باشه.
ورودی این تابع میتونه موارد دیگه ای هم باشه که میتونید در این صفحه ببینید
 http://www.keil.com/support/man/docs/rlarm/rlarm_funinit.htm
در صورت قرار دادن NULL درایوی اینیشیال میشود که تیک قسمت default drive رو زده باشید.که ما زدیم.تابع funinit هم هست که دقیقا عکس کار تابع بالا رو میکنه.

تابع fopen

تابع بعدی تابع fopen هست که برای باز کردن یک فایل استفاده میشود.
پارامتر های این تابع به این صورت میباشد:
FILE* fopen  (
    const char* filename,    /* file to  open  */
    const char* mode);       /* type of access */
پارامتر filename نام فایل است که قصد باز کردن آن را دارید.یا به طور کلی آدرس و نام.
 پارامتر mode میتواند یکی از مقادیر زیر باشد:
"r"  که برای خواندن از فایل استفاده میشود.
"w"  که برای نوشتن در فایل جدید به کار میرود. در حقیقت یک فایل با نامی که شما داده اید ایجاد میشود و در آن مینویسد.توجه داشته باشید که در صورت وجود فایل با نامی که شما انتخاب کردید،فایل قبلی حذف شده و فایل جدید جایگزین میشود.
"a" که کار حالت بالا رو انجام میده با این تفاوت که دیگه فایل قبلی رو حذف نمیکنه و کاراکتر های نوشته شده در فایل به محتویات فایل اضافه میشوند.
"b" که میتونه با حالت های بالا ترکیب بشه و تاثیری در عملکرد آنها ندارد فقط از استاندارد ISO پشتیبانی میکنه.
"+" میتونه با تمام حالات بالا ترکیب بشه به عنوان دومین یا سومین کاراکتر که در این صورت میتوان عملیات خواندن و نوشتن را همزمان انجام داد.
در صورت استفاده از این تابع خروجی آن که همان فایل باز شده است در ساختار FILE قرار میگیره.
هر فایلی در صورت باز شدن باید بعد از اتمام کار بسته شود که برای این کار از تابع fclose استفاده میشود.

خوب دیگه آموزش eca تموم شد!
یه مجله هست به نام مجله نویز که نسخه ی هشت این مجله درباره همه این توابع توضیح داده!
پیشنهاد میکنم حتما دانلود کنید! سرچ کنید میاد!

تابع ffind
این تابع برای جست و جو در فایل هاست! استفاده میشه! شکل کلیش به صورت زیره..!
ffind (const char *pattern,FINFO *info)
در این تابع pattern فیلتر جست و جو هست که طبق فرم زیر باید یکی بهش بدید تا دنبالش بگرده!

  • Pattern توضیح
    "*" or "*.*" جست و جو برای همه فایل هایی که در این دایرکتوری است
    "abc*" جست و جو برای فایل هایی که با abc شروع میشوند
    "*.htm" جست و جو برای فایل هایی که با .htm تمام میشوند
    "abc*.text" جست و جو برای فایل هایی که با abc شروع و با .text تمام مشوند


پارامتر info یک اشاره گر به ساختار مخزن اطلاعات درباره فایل جست و جو شده است

مقدار جست و جو شده در FINFO info ذخیره میشه! به صورت زیر...!

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;
یعنی info.name اسم فایل جستوجو شده هست! و بقیه هم توضیحش رو جلوش نوشته!

کلا سایت زیر از خود کیل هست که کامل توضیح داده در مورد این کتابخونه:


تو سایته بگردید چیزای خوبی گیرتون میاد...!

نمونه کد هم میتونید از لینک زیر دریافت کنید...!

برنامه زیر خیلی ساده تر هست! که میتونید دانلود کنید و ببینید....!
در برنامه زیر یه پوشه به نام new folder ایجاد میشه و بعدش یه فایل تکست که توش متن www.eca.ir نوشته میشه....!



انشالله به دردتون خورده باشه....!
فعلا
یا علی مدد....!