راه اندازی FAT با AVR

راه اندازی FAT و کار با حافظه های MMC و SDC با AVR – قسمت 4

به نام خدا

راه اندازی FAT با AVR قسمت 4 : بررسی توابع FAT – آماده سازی کارت های حافظه MMC و SDC برای خواندن، نوشتن و یا ایجاد فایل

در ادامه مبحث راه اندازی FAT با AVR پس از آنکه با نحوه فضا سازی برای کار با سیستم FAT آشنا شدیم حال می خواهیم به نحوه آماده سازی کارت های حافظه برای خواندن، نوشتن و ایجاد فایل در حافظه های MMC و SDC بپردازیم.

قبل از هرگونه عملیات روی فایل (خواندن، نوشتن، اضافه کردن و …) ابتدا باید فایل مورد نظر را باز کنیم، برای این کار از تابع زیر استفاده می کنیم:

FRESULT f_open(FIL* fp, const char* path, unsigned char mode);

این تابع فایل مورد نظر را برای اجرای عملیات آماده می کند، اما این تابع چه عملیات هایی را می تواند انجام دهد را در ادامه بیان می کنیم.

تابع فوق دارای سه ورودی و یک مقدار بازگشتی می باشد که در زیر آن ها را توضیح می دهیم.

پارامتر های ورودی:

  • fp* : یک متغییر پوینتری به استراکچری از جنس FIL می باشد. در صورت موفقیت آمیز بودن عملیات f_open این استراکچر توسط سایر توابع قابل استفاده می باشد. این استراکچر حاوی اطلاعتی از قبیل اطلاعات FATFS فایل، ID ، آدرس سکتور در کلاستر، مسیر فایل،… می باشد. در ادامه اطلاعات کامی این استراکچر آورده شده است.
  • path* : آدرس فایلی است که تابع f_open می خواهد آن را باز و آماده سازی کند.
  • Mode : با استفاده از این پارامتر تعیین می شود که چه دسترسی هایی به فایل باز شده داشته باشیم در زیر لیست این دسترسی ها بررسی می شود.

لیست Mode هایی که می توان استفاده نمود:

  1. FA_READ : این حالت فقط دسترسی خواندن از فایل را به ما می دهد. اگر فایل تنها در این حالت باز گردد امکان نوشتن در آن وجود ندارد.
  2. FA_WRITE : این حالت فقط دسترسی نوشتن در فایل را به ما می دهد. اگر فایل تنها در این حالت باز گردد امکان خواندن از آن وجود ندارد.
  3. FA_OPEN_EXISTING : فایل با آدرس خواسته شده را باز می کند. اگر فایل وجود نداشته باشد تابع با شکست روبرو می شود.
  4. FA_OPEN_ALWAYS : فایل با آدرس خواسته شده را اگر وجود داشته باشد باز می کند، اگر وجود نداشته باشد ابتدا آن را ایجاد می کند و سپس باز می کند.
  5. FA_CREATE_NEW : یک فایل جدید ایجاد می کند، اگر فایل از قبل وجود داشته باشد عملیات با شکست مواجه می شود.
  6. FA_CREATE_ALWAYS : یک فایل جدید ایجاد می کند ، اگر فایل از قبل وجود داشته باشد روی آن از اول می نویسد و حجم فایل را صفر می کند.

محتویات اسراکچر FIL :

typedef struct _FIL_

      {

      FATFS*   fs;                  /* Pointer to the owner file system object */

      unsigned short    id;         /* Owner file system mount ID */

      unsigned char     flag;       /* File status flags */

      unsigned char     csect;      /* Sector address in the cluster */

      unsigned long     fptr;       /* File R/W pointer */

      unsigned long     fsize;      /* File size */

      unsigned long     org_clust;  /* File start cluster */

      unsigned long     curr_clust; /* Current cluster */

      unsigned long     dsect;      /* Current data sector */

      unsigned long     dir_sect;   /* Sector containing the directory entry */

      unsigned char*    dir_ptr;    /* Pointer to the directory entry in the window */

      unsigned char     buf[512];   /* File R/W buffer */

      } FIL;

 

مقدار برگشتی:

  • این تابع دارای مقدار برگشتی نیز می باشد که مقدار برگشتی ما نیز از جنس FRESULT که از نوع enum تعریف شده است می باشد این نوع مقادیر در جلسه گذشته بررسی کردیم. این تابع یکی از مقدار های زیر را بر می گرداند:
    1. FR_OK : در صورت موفقیت آمیز بودن عملیات این تابع این مقدار را بر می گرداند.
    2. FR_NO_FILE: در صورت پیدا نکردن فایل با آدرس مورد نظر این مقدار را بر می گرداند.
    3. FR_NO_PATH : در صورت پیدا نکردن مسیر فایل این مقدار را برمی گرداند.
    4. FR_INVALID_NAME: در صورت نامعتبر بودن نام فایل این مقدار را برمی گرداند.
    5. FR_INVALID_DRIVE : در صورت نامعتبر بودن شماره درایو این پیغام را برمی گرداند.
    6. FR_EXIST: در صورت وجود فایل از قبل این پیغام را برمی گرداند.
    7. FR_DENIED: دسترسی به فایل مورد نظر به علت یکی از دلایل زیر ممکن نیست:
      1. تلاش برای باز کردن فایلی در حالت نوشتن است در حالی که این فایل Read_Only تنظیم شده است.
      2. فایل نمی تواند ایجاد شود، چراکه یک فایل به همین اسم از قبل وجود دارد و یا این که فایل به صورت Read_only است.
      3. فایل نمی تواند ایجاد گردد، چراکه دایرکتوری و یا فضای دیسک پر شده است.
    8. FR_NOT_READY : دسترسی به دیسک امکان پذیر نمی باشد، ممکن است به دلیل گم کردن اطلاعات یا چیزی دیگر باشد.
    9. FR_WRITE_PROTECTED : باز کردن فایل در حالت نوشتن و یا اسجاد فایل امکان پذیر نمی باشد، زیرا دیسک محافظت از نشتن (Write Protect) شده است.
    10. FR_DISK_ERR : عملیات ناموفق بوده است ،زیرا دسترسی فیزیکی به دیسک از دست رفته است.
    11. FR_INT_ERR : عملیاتبه علت اشتباه بودن استراکچر FAT و یا خطای داخلی ناموفق بوده است.
    12. FR_NOT_ENABLED : فضای درایو در RAM با تابع f_mount پیاده سازی نشده است.
    13. FR_NO_FILESYSTEM : فضای فت (FAT Partition) معتبر روی دیسک وجود ندارد.

نکته ای که در مورد تابع f_open لازم است بدان توجه شود این است برای باز کردن فایل می توان از مد های ترکیبی با ستفاده از OR استفاده کرد. برای نمونه می تواین یک فایل را هم خواند هم روی آن نوشت برای این منظور mode را باید به فرم زیر اعمال کرد:

Result = f_open(&file,path,FA_READ |FA_WRITE);

در قسمت بعد با نحوه آماده سازی فایل برای خواندن ، نوشتن و یا ایجاد فایل آشنا می شویم.

0 پاسخ

دیدگاه خود را ثبت کنید

تمایل دارید در گفتگوها شرکت کنید؟
در گفتگو ها شرکت کنید.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *