codevisionavrFAT6

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

به نام خدا

راه اندازی FAT با AVR قسمت 6 : دو نکته مهم و بررسی یک برنامه عملی

پس از آن که با توابع اصلی و مهم FAT آشنا شدیم حال می خواهیم به بررسی یک برنامه عملی بپردازیم، قبل از آن که وارد بحث برنامه نویسی شویم باید به دو نکته مهم در مورد کار با توابع FAT توجه کنیم.

  • برای عملکرد صحیح کارت حافظه چه MMC,SDC و SD HC باید تابع زیر که یک تابع low level می باشد هر 10 میلی ثانیه فراخوانی شود.

void disk_timerproc (void);

به منظور عملکرد صحیح این تابع را در وقفه تایمری که 10 میلی ثانیه تنظیم شده است باید قرار دهیم. باید اطمینان پیدا کنید که این تابع در برنامه شما هر 10 میلی ثانیه اجرا می شود در غیر این صورت توابع کارت حافظه زمانی که، time out شدن عملیات را بررسی می کنند، در انتهای حلقه قفل می گردند.

  • پس از آن که دیتای مورد نظر را در فایل نوشتیم برای ذخیره شدن اطلاعات باید از دستور زیر استفاده کنیم:

FRESULT f_close(FIL* fp);

  • این تابع دارای یک ورودی و یک مقدار برگشتی می باشد. ورودی ما از جنس استراکچر FIL می باشد، که باید اسم فایلی را بدهیم که دیتا را در آن نوشته ایم. همچنین مقدار برگشتی می تواند یکی از مقادیر زیر باشد:
    1. FR_OK : در صورت موفقیت آمیز بودن عملیات این تابع این مقدار را بر می گرداند.
    2. FR_NOT_READY : دسترسی به دیسک امکان پذیر نمی باشد، ممکن است به دلیل گم کردن اطلاعات یا چیزی دیگر باشد.
    3. FR_DISK_ERR : عملیات ناموفق بوده است ،زیرا دسترسی فیزیکی به دیسک از دست رفته است.
    4. FR_INT_ERR : عملیات به علت اشتباه بودن استراکچر FAT و یا خطای داخلی ناموفق بوده است.
    5. FR_INVALID_OBJECT : فایل با تابع f_open باز نشده است.

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

  • تابع زیر هر 10 میلی ثانیه اجرا می گردد:

1-int

 

 

 

  • تابع زیر فضای لازم برای کار با FAT را آماده سازی می کند:

2-mount

 

  • تابع زیر فایل با آدرس مورد نظر ما را باز می کند:

3-open

 

  • تابع زیر در فایل باز شده 17 بایت از دیتا را می نویسد:

4-write

 

  • و در آخر تابع زیر فایل را ذخیره می کند و سپس می بندد:

5-close

 

 

 

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

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

به نام خدا

راه اندازی FAT با AVR قسمت 5 : بررسی توابع  FAT –  خواندن و نوشتن در حافظه های MMC و SDC

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

تابع نوشتن در فایل:

FRESULT f_write(FIL* fp, const void* buff, unsigned int btw, unsigned int* bw);

این تابع دارای چهار ورودی و یک مقدار برگشتی می باشد، در ادامه به برسی ورودی ها و مقدار برگشتی می پردازیم.

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

  • fp* : یک متغییر پوینتری به استراکچری از جنس FIL می باشد. این استراکچر حاوی اطلاعتی از قبیل اطلاعات FATFS فایل، ID ، آدرس سکتور در کلاستر، مسیر فایل،… می باشد. این استراکچر را در جلسه قبل در تابع f_open توضیح دادیم، در تابع f_write دیتای مورد نظر ما روی این استراکچر نوشته می شود.
  • buff* : اشاره گر به یک بافر آرایه ای از جنس بایت است که در RAM قرار دارد. در اصل محتوایی را که می خواهیم بنویسیم در این متغییر باید قرار گیرد.
  • Btw : یک متغییر از جنس unsigned int می باشد. این متغییر تعداد بایت ها یا کاراکترهایی از بافر را که می خواهیم در فایل بنویسیم تعیین می کند.
  • bw* : یک متغییر پوینتری از جنس unsigned int می باشد که اشاره گر به تعداد بایت هایی از آرایه است که بتواند داخل فایل بنویسد.

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

  • این تابع دارای مقدار برگشتی نیز می باشد که مقدار برگشتی از جنس FRESULT که از نوع enum تعریف شده است می باشد این نوع مقادیر را در جلسات گذشته بررسی کردیم. این تابع یکی از مقدار های زیر را بر می گرداند:
    1. FR_OK : در صورت موفقیت آمیز بودن عملیات این تابع این مقدار را بر می گرداند.
    2. FR_DENIED: دسترسی به فایل مورد نظر به دلیل آن که فایل به صورت Read_only باز شده است، ممکن نیست.
    3. FR_NOT_READY : دسترسی به دیسک امکان پذیر نمی باشد، ممکن است به دلیل گم کردن اطلاعات یا چیزی دیگر باشد.
    4. FR_DISK_ERR : عملیات ناموفق بوده است ،زیرا دسترسی فیزیکی به دیسک از دست رفته است.
    5. FR_INT_ERR : عملیات به علت اشتباه بودن استراکچر FAT و یا خطای داخلی ناموفق بوده است.
    6. FR_INVALID_OBJECT : فایل با تابع f_open باز نشده است.

تابع خواندن از فایل:

FRESULT f_read(FIL* fp, void* buff, unsigned int btr, unsigned int* br);

این تابع نیز دارای چهار ورودی و یک مقدار برگشتی می باشد.

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

  • fp*: یک متغییر پوینتری به استراکچری از جنس FIL می باشد. این استراکچر حاوی اطلاعتی از قبیل اطلاعات FATFS فایل، ID ، آدرس سکتور در کلاستر، مسیر فایل،… می باشد. این استراکچر را در جلسه قبل در تابع f_open توضیح دادیم، در تابع f_read دیتای مورد نظر از روی این استراکچر خوانده می شود.
  • buff* : اشاره گر به یک بافر آرایه ای از جنس بایت است که در RAM قرار دارد. در اصل محتوایی را که از فایل می خوانیم در این متغییر قرار می گیرد. طول این آرایه باید به اندازه کافی بزرگ باشد، حداقل طول این آرایه باید به اندازه بزرگترین عددی باشد که جای btr قرار می گیرد.
  • Btr : یک متغییر از جنس unsigned int می باشد. این متغییر تعداد بایت ها یا کاراکترهایی را که از فایل می خواهیم بخوانیم را تعیین می کند.
  • br* : یک متغییر پوینتری از جنس unsigned int می باشد که اشاره گر به تعداد بایت هایی است که از آرایه می خوانیم. در حالتب که تابع موفقیت آمیز کار خود را به پایان برساند و عدد داخل br کمتر از btr باشد، یا به عبارتی از تعداد کاراکترهایی که قصد خواندن آن ها را داشتیم کمتر باشد، به این معنی است که به انتهای فایل رسیده ایم.

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

  • این تابع دارای مقدار برگشتی نیز می باشد که مقدار برگشتی از جنس FRESULT که از نوع enum تعریف شده است می باشد همان طور که در بالا گفتیم این نوع مقادیر را در جلسات گذشته بررسی کردیم. این تابع یکی از مقدار های زیر را بر می گرداند:
    1. FR_OK : در صورت موفقیت آمیز بودن عملیات این تابع این مقدار را بر می گرداند.
    2. FR_DENIED: دسترسی به فایل مورد نظر به دلیل آن که فایل به صورت write_only باز شده است، ممکن نیست.
    3. FR_NOT_READY : دسترسی به دیسک امکان پذیر نمی باشد، ممکن است به دلیل گم کردن اطلاعات یا چیزی دیگر باشد.
    4. FR_DISK_ERR : عملیات ناموفق بوده است ،زیرا دسترسی فیزیکی به دیسک از دست رفته است.
    5. FR_INT_ERR : عملیات به علت اشتباه بودن استراکچر FAT و یا خطای داخلی ناموفق بوده است.
    6. FR_INVALID_OBJECT : فایل با تابع f_open باز نشده است.

در جلسه بعد به بررسی یک برنامه عملی می پردازیم.

 

راه اندازی 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);

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

codevisionavrFAT3

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

به نام خدا

راه اندازی FAT با AVR قسمت3 : بررسی توابع FAT – بخش اول

در ادامه بحث راه اندازی FAT با AVR پس از تنظیمات نرم افزار CodeVision این قابلیت برای برنامه ما ایجاد می شود که بتوانیم از توابع FAT در برنامه خود استفاده کنیم. برای استفاده از این توابع لازم می باشد که ابتدا هدر فایل های لازم را به پروژه اضافه کنیم. برای این منظور ابتدا هر فایل زیر را به پروژه اضافه می کنیم:

<include    <ff.h#

بعد از اضافه کردن هدر فایل فوق دسترسی به توابع FAT ممکن می گردد.

اولین تابع مورد نیاز:

FRESULT f_mount(unsigned char vol, FATFS *fs);

این تابع مقداری از حجم حافظه SRAM را برای کار با فایل هایی به فرمت FAT برای ما آماده سازی می کند. نکته مهم این تابع این است که این تابع ربطی به وجود و عدم وجود کارت حافظه ندارد و فقط فضای کاری را آماده سازی می کند.

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

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

  • Vol : از جنس unsigned char می باشد و شماره درایوی است که فضا را برای آن می خواهیم آماده سازی کنیم. این مقدار می تواند بین 0 تا 9 باشد. به عبارتی با استفاده از توابع FAT که در اختیار داریم حداکثر 10 درایو را می توانیم پشتیبانی کنیم. بدیهی است که تمام چیپ این قابلیت را دارا نمی باشند و با توجه به حجم SRAM هر چیپ تعداد محدودی درایو را می تواند پشتیبانی کند.
  • fs* : از جنس FATFS که این پارامتر استراکچر می باشد و به صورت پوینتری می باشد و اطلاعاتی از قبیل سکتور ها ،کلاستر ها ، ID ، شماره شروع سکتورها و … را در این استراکچر ذخیره می کند.

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

  • این تابع دارای مقدار برگشتی نیز می باشد که مقدار برگشتی ما نیز از جنس FRESULT که از نوع enum تعریف شده است می باشد. این تابع یکی از دو مقدار زیر را بر می گرداند:
    1. FR_OK : در صورت موفقیت آمیز بودن عملیات این مقدار را برمی گرداند.
    2. FR_INVALID_DRIVE: در صورتی که شماره درایو نامعتبر باشد این مقدار را برمی گرداند.

نکته این تابع:

  • در صورتی که از مولتی درایو استفاده نمی کنید فقط باید شماره 0 را برای درایو وارد کنید.

مفاهیم مورد نیاز در این تابع و ادامه بحث:

  • سوال استراکچر چیست؟
    • استراکچر به بیان ساده دسته ای از متغییر ها هستند در یک type قرار گرفته اند. اگر بخواهیم در قالب یک مثال برای بحث FAT توضیح دهیم باید به استراکچر FATFS اشاره کنیم. نحو تعریف و عضو های آن را در زیر می بینید:

typedef struct _FATFS_

      {

      unsigned char     fs_type;    /* FAT sub type */

      unsigned char     drive;      /* Physical drive number */

      unsigned char     csize;      /* Number of sectors per cluster */

      unsigned char     n_fats;     /* Number of FAT copies */

      unsigned char     wflag;      /* win[] dirty flag (1:must be written back) */

      unsigned short    id;         /* File system mount ID */

      unsigned short    n_rootdir;  /* Number of root directory entries (0 on FAT32) */

      unsigned char     fsi_flag;   /* fsinfo dirty flag (1:must be written back) */

      unsigned long     last_clust; /* Last allocated cluster */

      unsigned long     free_clust; /* Number of free clusters */

      unsigned long     fsi_sector; /* fsinfo sector */

      unsigned long     cdir;       /* Current directory (0:root)*/

      unsigned long     sects_fat;  /* Sectors per fat */

      unsigned long     max_clust;  /* Maximum cluster# + 1. Number of clusters is max_clust – 2 */

      unsigned long     fatbase;    /* FAT start sector */

      unsigned long     dirbase;    /* Root directory start sector (Cluster# on FAT32) */

      unsigned long     database;   /* Data start sector */

      unsigned long     winsect;    /* Current sector appearing in the win[] */

      unsigned char     win[512];   /* Disk access window for Directory/FAT */

      } FATFS;

  • Enum چیست؟
    • يک نوع داده ای تعريف شده توسط برنامه نويس را که به آن نوع داده شمارش می گويند، ايجاد می کند. و مقدایر داخل آن از مقدار اولیه یکی یکی اضافه می شود، همچنین اگر مقدار اولیه ندهیم آن را صفر لحاظ می کند. در زیر نحوه تعریف FRESULT که به صورت enum می باشد را می بینید:

typedef enum

      {

      FR_OK = 0,          /* (0) Succeeded */

      FR_DISK_ERR,        /* (1) A hard error occured in the low level disk I/O layer */

      FR_INT_ERR,         /* (2) Assertion failed */

      FR_NOT_READY,       /* (3) The physical drive doesn’t work */

      FR_NO_FILE,         /* (4) Could not find the file */

      FR_NO_PATH,         /* (5) Could not find the path */

      FR_INVALID_NAME,    /* (6) The path name format is invalid */

      FR_DENIED,          /* (7) Acces denied due to prohibited access or directory full */

      FR_EXIST,           /* (8) Acces denied due to prohibited access */

      FR_INVALID_OBJECT,  /* (9) The file/directory object is invalid */

      FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */

      FR_INVALID_DRIVE,   /* (11) The logical drive number is invalid */

      FR_NOT_ENABLED,     /* (12) The volume has no work area */

      FR_NO_FILESYSTEM,   /* (13) There is no valid FAT volume */

      FR_MKFS_ABORTED,    /* (14) f_mkfs() aborted due to a parameter error */

      FR_TIMEOUT,         /* (15) Could not access the volume within the defined period */

      FR_INVALID_PARAMETER=19 /* (19) Given parameter is invalid */

      } FRESULT;

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

 

codevisionavrFAT2

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

به نام خدا

راه اندازی FAT با AVR قسمت 2 : تنظیمات MMC و SDC در CodeVision

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

بعد از آن که پروژه خود را در نرم افزار CodeVision ساختیم برای فعال کردن کتابخانه های FAT و استفاده از کارت های حافظه به مسیر زیر می رویم:

Project / Configure

سپس در پنجره باز شده به Tab های زیر می رویم :

C Compiler / Libraries / MMC/SD/SD HC Card

و پنجره زیر را مشاهده می نماییم:

Configure

 

برای مشاهده تنظیمات فوق ابتدا باید تیک گزینه Enable MMC/SD/SD HC Card and FAT Support را بزنیم و سپس تنظیمات بالا را مشاهده می کنیم.

این تنظیمات به دو دسته قابل تنظیم و غیر قابل تنظیم تقسیم می شود. تنظیمات غیر قابل تنظیم شامل پین های است که برای پروتکل SPI استفاده می شود که آن ها را همان گونه که تنظیم شده باید استفاده کنیم و تنظیمات قابل تغییر مربوط به پایه های است که کاربرد های Optional (انتخابی) دارند. این پایه ها نیز دودسته می باشند یک دسته از آنها حتما باید استفاده گردند و گروه دیگر را می توان استفاده نکرد.

پایه CS همان پایه Chip Select پروتکل SPI است و لازم است که استفاده گردد، اما پایه های CD و WP به ترتیب Card Detector و Write Protect می باشد که می توان از آن ها بسته به کاربرد ها استفاده شود و یا استفاده نشود.

نکته ای را که این تنظیمات باید بدانیم آن است که پایه هایی را که کنار آن ها “/” قرار داده شده به معنی Active Low بودن آن پایه ها می باشد.

در قسمت بعد به برسی توابع FAT در CodeVision می پردازیم.

 

codevisionavrFAT1

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

به نام خدا

در این سری مقالات آموزشی قصد راه اندازی راه اندازی FAT با AVR با نرم افزار CodeVision را داریم.

قبل از وروو به آموزش باید خاطر نشان کنم که پس از مطالعه این سری مقالات به توانایی های زیر دست پیدا می کنید:

  • آشنایی با مفاهیمی که در FAT استفاده می شود.
  • راه اندازی FAT با AVR (تنظیمات CodeVision برای استفاده از FAT)
  • راه اندازی MMC و SDC با میکروکنترلر AVR
  • آشنایی با دستورات لازم جهت کار با فایل ها

برای شروع کار ابتدا به این سوال پاسخ دهیم:

FAT چیست ؟

قبل از پاسخ به این سوال ابتدا باید با مفهموم File System آشنا شویم. در یک سیستم عامل به ساختار کلی نام گذاری ،ذخیره سازی و سازماندهی فایل ها File System گفته می شود. فایل سیستم فایل ها و داده ها را به واحد هایی به نام Cluster تقسیم بندی می کند، هر کلاستر فقط قسمتی از فایل را در خود نگه می دارد.

حال به پردازیم به این مفهوم که FAT چیست؟!

FAT مخفف کلمه File Allocation Table که به معنی جدول تخصیص فضا به فایل است. این جدول وظیفه نگه داری فضاهای موجود در دیسک را به عهده دارد و این فضا ها را مدیریت می کند. در هنگام برداشت اطلاعات از فضای حافظه قسمت های مختلف یک فایل را به هم ارتباط می دهد و هنگام ذخیره اطلاعات روی فضای حافظه فایل سیستم جهت دست یابی به کلاستر های خالی از FAT کمک می گیرد.

به طور کلی دو نوع FAT اصلی وجود دارد، FAT16 و FAT32 ، در FAT16 ، فایل سیستم 16 بیتی است و کلاستر هایی که مقدار دهی می کند 16 بیت طول دارند و همچنین آدرس ها نیز 16 بیتی می باشند؛ یعنی حد اکثر 65536 آدرس در کلاستر را پشتیبانی می کند و حداکثر همین تعداد کلاستر را می تواند آدرس دهی کند. به عبارت دیگر ما 65536 کلاستر 64 کیلو بایتی را در FAT16 می توانیم دسترسی داشته باشیم که می شود یک حافظه با حجم 4 گیگا بایت.

اما در FAT32 طول کلاستر ها 32 بیتی و آدرس دهی نیز 32 بیتی است با محاسبات مشابه می بینیم که در FAT32 می توان یک حافظه حداکثر 8 ترابایتی را پشتیبانی کرد.

در قسمت بعد به نحوه تنظیم FAT در CodeVision می پردازیم.