توصیه شده

راه‌اندازی کتابخانه ff.h

راه‌اندازی کتابخانه ff.h

FAT File System چیست؟

بصورت ساده فرض کنید یک  حافظه فلش یا رم …  در اختیار دارید,و قراره از این حافظه جهت ذخیره اطلاعات استفاده کنید, به عنوان یک مهندس الکترونیک میدونید که در حالت عادی میتونید یک بایت یا یک سکتور از اطلاعات را در هر بار تغییر بدید.

حالا فرض کنید این اطلاعات لازمه در دسته بندی های مختلف مدیریت بشند و هر بار بتونید اطلاعات جدیدی را به یک دسته اضافه یا حذف کنید و یا بتونید حتی دسته ای را حذف نمایید.

برای مدیریت چنین حافظه هایی استانداردهایی وجود دارد که یکی از معروفترین آنها استانداردهایی هست که مایکروسافت ایجاد کرده و برخی از اونها تحت عنوان FAT شناخته میشند, مانند FAT16 FAT32 …

در این ساختار  دسته بندی اطلاعات تحت عنوان فایل ذخیره میشه و کلی قابلیت دیگه هم در ساختار FAT دیده شده که به مرور به ورژنهای بالاتر اضافه شده است.

درباره این آموزش – مقدمه

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

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

چندین سال پیش  آقایی به نام Chang در وب سایت شخصی اش کتابخانه ای برای FAT  منتشر کرده که مخصوص میکرو کنترلرهای با سرعت و رم پایین مثل AVR بوده و بسیار هم پرکاربرد  بوده و هست.

آموزش زیر توسط مهندس محمد امین حردانی یکی از اعضای فعال گروه تلگرامی چیپکده منتشر شده که سعی میکنه در این آموزش به خوبی نحوه شروع به کار و استفاده از این کتابخانه را آموزش بده  و برای اینکار از شبیه ساز پروتئوس  استفاده کرده که مطمئنا میتونه بسیار مفید و کاربردی باشه.

درباره‌ی راه‌اندازی کتابخانه ff.h

این نوشته آموزشی صرفا برای آشنایی اولیه و راه‌اندازی کتابخانه‌ی ff است و اصلاً به عنوان یک راهنمای کامل و جامع قابل استفاده نیست. برای اطلاعات بیشتر باید به راهنمای کتابخانه که در سایت elm-chang.org مراجعه نمایید.

در این پست آموزشی قرار است ما ضمن شبیه سازی برنامه نوشته شده در کدویژن با پروتئوس, حافظه مموری کارت را نیز با برنامه OSFMount که یک برنامه رایگان هست شبیه سازی نماییم.

درباره‌ی کتابخانه‌ها

این سایت منتشر کننده‌ی دو کتابخانه‌ی ff و pff برای کار با سیستم فایل FAT است. کتابخانه‌ی ff برای میکروکنترلرهایی مانند ATMega که حافظه‌ی کافی دارند یا میکروکنترلرهای قوی‌تر ساخته شده در حالیکه کتابخانه pff با کمی امکانات کمتر برای استفاده روی میکروکنترلرهای با حافظه‌ی کمتر مانند ATTiny ساخته شده است. با توجه به مقدار حافظه‌ای که نیاز داریم یکی از این دو کتابخانه را استفاده می‌کنیم.

درباره‌ی نرم‌افزار و سخت‌افزار

سیستم عامل مورد استفاده Windows 10 x64 Version 1703 Build 15063.540 است. مثال مطرح شده توسط برنامه‌ی CodeVisionAVR 3.12 Advanced نوشته و کامپایل شده است.

برای شبیه‌سازی نیز از نرم‌افزارهای Proteus 8.5 SP0 Build 22067 برای شبیه‌سازی منطق برنامه و دیدن خروجی و برنامه‌ی OSFMount 1.5 Build 1015 for 64-Bit Windows برای ایجاد فضای شبیه‌سازی شده‌ی فایل‌سیستم FAT و اختصاص فضای شبیه‌سازی خام برای برنامه‌ی Proteus استفاده شده است.

لازم به ذکر است که در این پست مثال مطرح شده فقط نرم افزاری  شبیه سازی شده است.

 

 

برنامه از 4 قسمت تشکیل شده است که در ادامه معرفی می‌شوند:

برنامه نوشته شده با کدویژن

  • کتابخانه‌های مورد استفاده معرفی شده‌اند تا از توابع موجود در آن‌ها در برنامه استفاده کنیم.
  • متغیرها و ساختارهای مورد استفاده که سعی شده نام‌گذاری آن‌ها متناسب با کارکردشان باشد.
  • وقفه‌ی تایمر 0 که در بازه‌های زمانی کوتاه اقدام به فراخوانی تابع disk_timeproc() می‌کند تا MemoryCard به حالت خواب نرود.
  • باقی کدها برای اجرای برنامه

تنظیمات تایمر 0 هم به این شکل انجام شده‌اند.

تنظیمات تایمر در کدویژن

یادتان باشد این تنظیمات برای شبیه‌سازی انجام شده‌اند و برای واقعیت باید از روی راهنمای کتابخانه محاسبه را انجام دهید. زمان اجرای تابع disk_timeproc() را باید هر 10 میلی‌ثانیه تنظیم کنید تا کارت حافظه فعال بماند.

 

 

 

همچنین از منوی

Project  ==>  Configure ==>  C Compiler  ==> Libraries  ==> MMC/SD/SD HC Card

تیک هر دو گزینه‌ی موجود را بزنید و باقی تنظیمات رو مطابق عکس انجام دهید.

 

تنظیمات مموری کارت در کدویژن

کدهای کامل برنامه هم در اتمام پست برای دانلود قرار گرفته است.

 

مدار را مطابق شماتیک زیر در پروتئوس ببندید و تنظیمات قطعات را مطابق عکس‌های زیر انجام دهید (حافظه‌ی مموری کارت 1MB در نظر گرفته شده است تا فایل نهایی پروژه جهت آپلود کم حجم شود):

 

 

همچنین از منوی

Project  ==> Configure  ==> C Compiler  ==> Libraries  ==> MMC/SD/SD HC Card

تیک هر دو گزینه‌ی موجود را بزنید و باقی تنظیمات رو مطابق عکس انجام دهید.

کدهای کامل برنامه هم در ادامه‌ی این مقاله و هم در ضمیمه آمده‌اند.

مدار را مطابق شماتیک زیر در پروتئوس ببندید و تنظیمات قطعات را مطابق عکس‌های زیر انجام دهید (حافظه‌ی مموری کارت 1MB در نظر گرفته شده است تا فایل نهایی پروژه جهت آپلود کم حجم شود):

 

راه‌اندازی کتابخانه ff.h

 

شبیه سازی در پروتئوس

 

را ه اندازی مموری کارت با کدویژن

 

بعد از اولین اجرای شبیه‌سازی Proteus پیام‌های خطایی خواهد داد که به دلیل نبودن فایل‌سیستم است! تصویر زیر را ببینید:

 

شبیه سازی مموری کارت در پروتئوس

 

 

راهکار حل مشکل این است که یک بار با استفاده از برنامه‌ی OSFMount فایل Image کارت حافظه که توسط پروتئوس ایجاد شده است را به ویندوز وصل کنیم تا بتوانیم آن را به فرمت FAT تبدیل کنیم.

ابتدا برنامه‌ی OSFMount را اجرا کنید و سپس از منوی File گزینه‌ی Mount new virtual disk را بزنید تا پنجره‌ی روبرو باز شود. مطابق شکل مقادیر پنجره را تنظیم کنید و روی OK کلیک کنید.

استفاده از OSFMount در پروتئوس

حالا باید فایل ما در ویندوز به شکل زیر متصل شده باشد:

 

شبیه ساز حافظه

 

همچنین درایور F نیز به صورت زیر دیده شود:

شبیه سازی در نرم افزار پروتئوس

 

 

برای استفاده از درایو و تبدیل آن به FAT روی آن کلیک راست کرده و گزینه‌ی Format را انتخاب کنید. سپس تنظیمات را با توجه به شکل انجام دهید و سپس عملیات فرمت را Start کنید. پیام‌های هشدار را هم تأیید نمایید.

شبیه سازی فت فایل سیستم

 

 

چون حجم درایو را 1MB درنظر گرفتیم، فقط می‌توانیم از FAT12 استفاده کنیم؛ در حالیکه اگر حجم درایو را بیشتر می‌کردیم می‌توانستیم FAT16 و FAT32 رو هم توی گزینه‌ها ببینیم و با آن‌ها فرمت کنیم.

کار ما با درایو مجازی تمام شد! به برنامه OSMount برگردید و روی دکمه‌ی Dismount all & Exit کلیک کنید. با اجرای برنامه‌ی شبیه‌سازی شده در Proteus می‌بینید که ایندفعه برنامه به خوبی کار می‌کند و تا انتها پیش می‌رود. با Mount مجدد فایل SDcard می‌توانیم فایل ایجاد شده در فایل سیستم را هم ببینیم.

 

راه اندازی کتابخانه ff.h Fat file System با AVR

 

 

 

 

دانلود فایل آموزشی بصورت PDF

CodeVision-ff-MMC-library-Virtualization.pdf

دانلود سورس پروتئوس و کدویژن

SD_Card-Virtualization.zip

 

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

28 دیدگاه در “راه‌اندازی کتابخانه ff.h

  1. Avatar for حمید رضا حمید رضا گفت:

    سلام ممنون از آموزشتون
    یه مشکل با این پروژه دارم. احتمال دادم شما بتونید مشکل را حل کنید
    بنده تمام مراحلی که گفتید را انجام میدم و از هر دو مرحله write to disk و read from disk داخل پروتئوس جواب گرفتم (برنامه در کدویژن نوشته شده). ولی مشکلی اینه که: RAM Global variables size در کدویژن سریع مقدارش افزایش پیدا میکنه و بعد از گذاشتن چند تا شرط ساده بر روی این دستورات (برای اینکه بفهمم تونسته فایل را باز کنه یا نه … شرط گذاشتم)، این حافظه RAM خطای is too large رو میزنه و دیگه برنامه داخل کدویژن کامپایل نمیشه!

  2. Avatar for نرگس نرگس گفت:

    سلام
    من با micro sd هشت گیگ و میکروی atxmega128a1u کار میکنم. کارت حافظه رو هم به صورت fat32 فرمت کردم. تیکه کد f_mount چه کارت حافظه توی سوکت باشه چه نباشه(که عجیبه به نظرم) ok میده ولی وقتی به f_open میرسه انگار گیر میکنه. احیانا میدونین ممکنه مشکل از چی باشه؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      سلام دوست عزیز تابع f_mount پارامتر دومی داره که میگه آیا بره واقعا دیسک رو چک کنه یا نه که معمولا صفر میذاریمش و برای همین ok رو برمیگردونه اون پارامتر رو یک کنید و خواهید دید که با خطا مواجه میشید
      حالا این که مشکل از کجاست بستگی به خطایی که بر می‌گردونه داره

  3. Avatar for فاطمه فاطمه گفت:

    سلام وقت بخیر ممنون از آموزش خوبتون من سوالی که داشتم اینه که اگه بخوایم به جای sd card این حرکت رو روی حافظه فلش که همون باspi کار می کنه بزنیم چه تغییری نیاز هست در کد ایجاد کنیم؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      خیلی بستگی داره که نوع حافظه فلش چی باشه
      Nor باشه یا Nand باشه و برای هر کدام کتابخانه مناسبی وجود دارد
      مثلا کتابخانه JFFS, JFFS2 و YAFFS رو ببینید

  4. Avatar for محمد نوری محمد نوری گفت:

    سلام.
    تشکر از مطلب خوب و مفید تون.
    1- بخش تایمر واقعا لازم است؟ کارت به حالت خواب بره مشکل چیه؟ فرض کنید خیلی وقتها اصلا با کارت حافظه کار نداریم.
    مثلا یک فایل رو می خونیم و دیگه با کارت کاری نداریم. حالا چ نیازی به تایمر و خواب نرفتن کارت است؟

    2- فرآیند خوندن از کارت به صورت یک سکتور 512 بایتی است یا بایت به بایت داره می خونه؟ چون تو کامپیوتر یک سکتور کامل خونده میشه.

  5. Avatar for علی علی گفت:

    سلام
    تشکر
    ولی چه طور میشه از طریق میکرو فایلی ایجاد کرد و داخل اون نوشت؟

    1. Avatar for Zeus ‌ Zeus ‌ گفت:

      مثال های chan رو ببینید داره همچین مثالی

  6. Avatar for علی ن علی ن گفت:

    سلام
    من خیلی تلاش کردم که جواب بگیرم. از نظر سخت افزاری دقیقا مطابق چیزی که هست انجام دادم.
    ولی هر کاری میکنم جواب نمیده.
    این جمله فکرم رو خیلی در گیر کرده… که جمله نکته ی هست و ازش غافل شدم.!!
    “یادتان باشد این تنظیمات برای شبیه‌سازی انجام شده‌اند و برای واقعیت باید از روی راهنمای کتابخانه محاسبه را انجام دهید.”
    میشه یه نفر پیدا بشه مشکل من حل بشه الان سه ماه در گیرشم.
    ممنون

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام
      راه اندازی این سخت افزار واقعا چیز پیچیده ای نداره از چه میکروکنترلر و نرم افزاری استفاده میکند اگر از میکروکنترلر ۵ ولت دارید استفاده میکنید از چه روشی منطق ۳.۳ رو ایجاد میکنید ؟

      1. Avatar for علی ن علی ن گفت:

        سلام
        ممنون از پاسخگویتون.
        من از ATmega32 و نرم افزار Codevision استفاده میکنم.

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          خوب وقتی دارید از کدویژن استفاده میکنید – دیگه حتی نمیشه شک کرد که برنامه مشکل داره – احتمالا یه جایی یه چیزی کوچیکی رو در نظر گرفتید

      2. Avatar for علی ن علی ن گفت:

        سلام
        من از ماژول آماده استفاده میکنم داخل خودش رگولاتور داره.

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          میشه بگید از کدوم پین های میکرو استفاده کردید + لینک ماژولی که دارید رو بدید ببینم ملاحضه خاصی داره

  7. Avatar for علی علی گفت:

    سلام
    من این برنامه رو داخل پروتئوس قرار میدم به خوبی جواب میده.
    ولی تو عمل نمی تونم ازش جواب بگیرم!!!

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

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

      1. Avatar for علی علی گفت:

        سلام
        سخت افزار رو چند بار چک کردم.
        یه برنامه به یه زبان دیگه داشتم روی میکرو ریختم جواب داد.
        فقط یه نکته من از مموری 4 گیگ دارم استفاده میکنم.مشکلی نداره؟؟(چون 1 گیگ نداشتم)
        ممنون

        1. Avatar for زئوس Zeus زئوس Zeus گفت:

          اگه مطمئن هستید که سخت افزارتون با برنامه دیگه ای جواب میده – احتمالا باید پایه ای چیزی رو اشتباه تعریف کرده باشید توی این پروژه از کتابخانه های کدویژن استفاده شده است که احتمالا نباید مشکلی داشته باشند.
          و این مقوله به ظرفیت حافظه هم ربطی نداره من با مموری ۱۶ گیگ هم تست کردم و مشکلی نداشتم پس از این بابت خیااتون راحت
          ببنید توایع یه کد خطا بر میگردونن که معانی متفاتی دارند – اون کد خطا رو چک کنید بهتر میتونید به نتیجه برسید.

  8. Avatar for علی ن علی ن گفت:

    سلام
    آیا میشه یه عدد مثلا دما رو ذخیره کرد و در کامپیوتر به صورت TEXT مشاهده کرد؟؟
    ممنون

    1. Avatar for زئوس Zeus زئوس Zeus گفت:

      سلام دوست عزیز
      بله میشه

  9. بازتاب: فایل سیستم در STM32 – نامینیک
  10. Avatar for علی علی گفت:

    برای آردوینو کتابخونه ی اس دی مناسب وجود نداره؟؟؟؟
    البته منظورم اون کتابخونه ی داخل خود کامپایلر آردوینو نیست منظورم یه کتابخونه ی کم حجمه که بتونه میکرو های کوچیک تر مثل atmega8 سازگار باشه…
    ممنون میشم راهنمایی کنید

  11. Avatar for محمد محمد گفت:

    درود
    من این کتابخونه رو روی میکرو arm اجرا کردم با رم microsd 4GB و FAT32… موقعی که برنامه اجرا میشه ارور 5 که بمعنی fr_no_file هستش رو میده در حالی که فایل با همون اسم داخل sd card هستش و ظاهرا مثل اینکه فایل رو پیدا نمیکنه.

    1. Avatar for Sisoog Os Sisoog Os گفت:

      سلام
      سخته در مورد این مشکل صحبت کنیم
      با FAT16 هم یه تستی بزنید
      شخصا این لایبرری را روی سخت افزار تست کردم و مشکلی نبوده
      در ضمن مطمئن باشید که f_mount تونسته درست مموری و FAT را شناساییی کنه یعنی مقادیر برگشت را تست کنید
      Return Values
      FR_OK, FR_INVALID_DRIVE, FR_DISK_ERR, FR_NOT_READY, FR_NOT_ENABLED, FR_NO_FILESYSTEM

      1. Avatar for محمد محمد گفت:

        update: با فرمت کردن microsd مشکل به کلی حل شد …
        تابع f_mount هم مقدار برگشتی اش از اول FR_OK بود و کارت بخوبی شناسایی شده بود ولی با فرمت کارت و اضافه کردن فایل جدید به رم، تابع f__open هم مقدار fr_ok رو برگردوند و عکس مورد نظر روی ال سی دی نمایش داده شد از روی رم microsd .
        ممنون از پاسخگویی تون . Like

        1. Avatar for Sisoog Os Sisoog Os گفت:

          متشکر از شما

  12. Avatar for Amir Amir گفت:

    جالب بود
    سایت شما بنظر من جز 5 سایت برتر آموزش الکترونیک ایران هست .
    امیدوارم ادامه دار باشه …

    1. Avatar for Sisoog Os Sisoog Os گفت:

      متشکر از لطف شما و دوستانی که محتواهای خودشون را از این بستر منتقل میکنند

دیدگاهتان را بنویسید

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