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

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

راه‌اندازی کتابخانه 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

 

 

حمایت از محمد امین حردانی

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

محمد امین حردانی
محمد امین حردانی

Telegram, Eitaa, Gap, Bale: mahwaz Aparat: imahwaz

دیدگاه ها

24 دیدگاه

  • نرگس
    ۲ اسفند ۱۴۰۰

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

    • Zeus ‌
      Zeus ‌
      ۲۸ فروردین ۱۴۰۱

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

  • فاطمه
    ۱۵ آبان ۱۴۰۰

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

    • Zeus ‌
      Zeus ‌
      ۲ مرداد ۱۴۰۱

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

  • علی ن
    ۲۳ خرداد ۱۳۹۹

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

    • Zeus ‌
      زئوس Zeus
      ۱۶ تیر ۱۳۹۹

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

      • علی ن
        ۱۶ تیر ۱۳۹۹

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

        • Zeus ‌
          زئوس Zeus
          ۱۷ تیر ۱۳۹۹

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

      • علی ن
        ۱۶ تیر ۱۳۹۹

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

        • Zeus ‌
          زئوس Zeus
          ۱۷ تیر ۱۳۹۹

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

  • علی
    ۱۱ فروردین ۱۳۹۹

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

    • Zeus ‌
      زئوس Zeus
      ۱۱ فروردین ۱۳۹۹

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

      • علی
        ۱۴ فروردین ۱۳۹۹

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

        • Zeus ‌
          زئوس Zeus
          ۱۶ فروردین ۱۳۹۹

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

  • علی ن
    ۲۹ اسفند ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۲ فروردین ۱۳۹۹

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

  • فایل سیستم در STM32 – نامینیک
    ۱۴ مهر ۱۳۹۸

    […] خوشبختانه قبل از اینکه این مقاله نوشته شود تقریبا از 20 سال پیش راه کاری به نام فایل سیستم برای مدیریت فایل ها بر روی حافظه ها در نظر گرفته شده است.(درباره فایل سیستم بیشتر بدانید) […]

  • علی
    ۲۴ دی ۱۳۹۷

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

  • محمد
    ۲ آبان ۱۳۹۷

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

    • 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

      • محمد
        ۵ آبان ۱۳۹۷

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

  • Amir
    ۱ آبان ۱۳۹۷

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

    • Sisoog Os
      Sisoog Os
      ۱ آبان ۱۳۹۷

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

ریموت کنترل امروزه کاربرد زیادی پیدا کرده است؛ از ریموت‌های درب بازکن تا ریموت‌های دزدگیر و کنترل روشنایی همه از یک اصول اولیه پیروی می‌کنند و آن‌هم ارسال اطلاعات به‌صورت بی‌سیم است....

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

امنیت همیشه و در همه‌ی اعصار، مقوله‌ی مهم و قابل‌توجه‌ ای بوده و همیشه نوع بشر به دنبال امنیت بیشتر، دست به ابداعات و اختراعات گوناگونی زده است. ریموت کنترل یکی از این اختراعات است. در این مقاله، به بررسی امنیت انواع ریموت‌های کنترل خواهیم پرداخت....

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

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

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

چند ماهی هست که تب بیت کوین و ارزهای دیجیتال خیلی بالا رفته! چه شد که این پست را نوشتم همانطور که...

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

حدود ۷ ماه پیش، مسابقه سوم سیسوگ رو برگزار کردیم و کلی نکته در مورد خواندن رشته‌های ورودی را بررسی کردیم. فکر...

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک