ARM, STM32, آموزش, آموزش میکروکنترلر STM32F4, معرفی, مقاله های سیسوگ, میکروکنترلر

آموزش میکروکنترلر STM32F4 قسمت 14 : سیستم فایل FatFs بر روی کارت SD

آموزش میکروکنترلر STM32F4

در قسمت سیزدهم آموزش میکروکنترلر STM32F4 به مبحث مهم و کاربردی تایمر ها و سرویس وقفه پرداختیم. در این قسمت از آموزش میکروکنترلر STM32F4  به مبحث سیستمِ فایلِ FatFs بر روی کارت SD می‌پردازیم. با سیسوگ همراه باشید.

 

سیستم فایل FatFs بر روی کارت SD

سیستم فایل، یعنی روشی که برای ذخیره فایل‌ها روی وسایل ذخیره ساز استفاده می‌شود. از مشهورترین و قدیمی‌ترین این سیستم‌ها، Fat می‌باشد. با استفاده از این سیستم فایل می‌توان فایل‌هایی که روی حافظه ذخیره کردید در دستگاه های دیگر، مانند رایانه شخصی، که از این سیستم فایل پشتیبانی می‌کنند، مشاهده کرد و تغییر داد. معروف‌ترین سیستم فایل ارائه شده برای سیستم‌های میکروکنترلری و تعبیه شده، توسط فردی به نام Chan نوشته شده است (elm-chan.org). این سیستم فایل، سیستم فایل FAT و exFAT برای سیستم‌های تعبیه شده می‌باشد. رایگان و متن باز است و بر اساس C نوشته شده است. در واقع  پشته‌ای نرم‌افزاری است که بین کاربر و سخت‌افزار قرار می‌گیرد تا کاربر از درگیر شدن با سخت‌افزار رها شود.

 

سیستم فایل FatFs بر روی کارت SD

 

 

رابط های این نرم افزار عبارتند از:

  • دسترسی به فایل
    • f_open – بازکردن یا ساختن یک فایل
    • f_close – بستن یک فایل باز
    • f_read – خواندن یک فایل
    • f_write – نوشتن داده
    • f_lseek – حرکت دادن اشاره گر خواندن/نوشتن، گسترش اندازه
    • f_truncate – بریدن اندازه
    • f_sync – تخلیه داده نگهداری شده (cache)
    • f_forward – پیش فرست داده به جریان
    • f_expand – اختصاص یک بلوک هم مرز به فایل
    • f_gets – خواندن یک رشته
    • f_putc – نوشتن یک کاراکتر
    • f_puts – نوشتن یک رشته
    • f_printf – نوشتن یک رشته قالب بندی شده
    • f_tell – گرفتن اشاره گر خواندن/نوشتن کنونی
    • f_eof – آزمودن پایان-فایل
    • f_size – گرفتن اندازه
    • f_error – آزمون یک خطا

 

  • دسترسی پوشه
    • f_opendir – باز کردن پوشه
    • f_closedir – بستن یک پوشه باز
    • f_readdir – خواندن یک پوشه
    • f_findfirST – باز کردن یک پوشه و خواندن اولین موردی که تطیبق می‌کند
    • f_findnext – خواندن مورد بعدی که تطبیق می‌کند

 

  • مدیرت فایل/پوشه
    • f_STat – بررسی وجود فایل یا زیرپوشه
    • f_unlink – حذف یک فایل یا زیرپوشه
    • f_rename – تغییر نام یا جابجا کردن یک فایل یا زیرپوشه
    • f_chmod – تغییر صفات یک فایل یا زیرپوشه
    • f_utime – تغییر مهر زمانی یک فایل یا زیرپوشه
    • f_mkdir – ساختن یک زیرپوشه
    • f_chdir – تغییر پوشه جاری
    • f_chdrive – تغییر درایو جاری
    • f_getcwd – بازیابی درایو یا پوشه جاری

 

  • مدیریت حجم
    • f_mount – ثبت یا حذف ناحیه کاری در حجم
    • f_mkfs – ساختن یک حجم FAT روی درایو منطقی
    • f_fdisk – ساختن درایو منطقی روی درایو فیزیکی
    • f_getfree – گرفتن اندازه کلی و اندازه آزاد روی حجم
    • f_getlabel – گرفتن برچسب حجم
    • f_setlabel – گذاشتن برچسب حجم

رابط کنترل وسیله

این دستورات جز FatFs محسوب نمی‌شود و درباره کار با دستگاه هستند. این دستورات برای دستگاه های مختلف پیاده سازی شده‌اند. همان طور که در شکل دیده می‌شود FatFs با رابطی به آن‌ها دسترسی دارد.

 

رابط FatFs

 

  • disk_STatus – گرفتن وضعیت دستگاه
  • disk_initialize – آغازسازی دستگاه
  • disk_read – خواندن برش (ها)
  • disk_write – نوشتن برش (ها)
  • disk_ioctl – کنترل تابع‌های مرتبط با دستگاه
  • get_fattime – گرفتن زمان جاری

قبل از استفاده از هر فایلی باید ابتدا یک ناحیه کاری (شی سیستم فایل) در درایو منطقی با دستور f_mount  ثبت شود. غیر از f_mkfs و f_fdisk  سایر تابع‌ها بعد از این فرایند آماده کار می‌شوند. عملیات باز کردن تابع باید قبل از جداکردن حافظه یا خاموش کردن دستگاه بسته شود وگرنه فایل خراب خواهد شد.

برای باز کردن چند فایل با هم باید به ترتیب زیر عمل کرد. اما باز کردن چندگانه یک فایل با پرچم‌های نوشتن متفاوت ممنوع است.

FatFs از باز کردن چندگانه یک فایل حمایت نمی‌کند مگر اینکه در حالت فقط خواندنی باشند. اگر یک فایل چندباره باز شود، تغییر نام یا پاک کردن آن مجاز نیست. تخطی از این دستورها ممکن است به خرابی فایل منجر شود. می توان از گزینه قفل کردن فایل _FS_LOCK استفاده کرد. با یک کردن این گزینه همه حالت های گفته شده بالا که منجر به خطا می‌شوند متوقف می‌شود و با پیغام FR_LOCKED پاسخ داده می‌شود. اگر تعداد فایل های باز از مقدار _FS_LOCK بیشتر باشد هر دستور جدیدی برای باز کردن یا ایجاد فایل جدید با پیام FR_TOO_MANY_OPEN_FILES رد می‌شود.

تعدادی از تابع های پشته FatFs

تابع f_open

یک file object درست می‌کند که برای دسترسی به فایل به کار می رود

 

 

که fp اشاره‌گر به فایل و path مسیر به رشته تهی-پایان است که اسم فایل را نشان می دهد. پرچم حالت می‌تواند یکی از مقدارهای جدول زیر باشد.

 

تابع f_open در پشته

 

مقدار خروجی این تابع نیز یکی از تعریف های زیر است:

 

 

در زیر دو مثال دیده می‌شود:

 

 

و این مثال:

 

 

تابع f_write

برای نوشتن داده‌ها روی فایل به کار می‌رود.

 

 

تابع f_lseek

هر بار که تابع با دستور f_open باز می‌شود یا تابع جدیدی ساخته می‌شود اشاره گر نوشتن/خواندن در ساختمان فایل که با میدان fptr نشان داده می‌شود مقدار صفر را دارد و عملیات خواندن/نوشتن از خانه بعد یعنی 1 شروع می‌شود. بنابراین اگر قصد داریم فایلی را به تدریج یا چند مرحله پر کنیم باید خودمان اشاره‌گر را به نقطه مورد نظر تنطیم کنیم. برای این کار می توان از تابع f_lseek استفاده کرد. این تابع اشاره‌گر را در نقطه مورد نظر در فایل برای نوشتن یا خواندن تنظیم می‌کند. برای افزایش طول فایل نیز می‌توان از آن استفاده کرد. ساختار آن به شکل زیر است.

 

 

fp اشاره‌گر به فایل است و ofs مقدار دویدگی (آفست) را از ابتدای فایل نشان می‌دهد. مقدار دویدگی یک آدرس مستعار است که می‌تواند واژه دوتایی (32 بیتی) یا چهارتایی (64 بیتی) باشد.

اگر فایلی حاوی عبارت hello باشد برای اینکه داده‌ای به انتهای آن اضافه کنیم باید اشاره‌گر را به عدد 5 تنظیم کنیم که با دستور نوشتن بعدی از خانه 6ام به بعد، نوشتن انجام شود. برای گرفتن مقدار این عدد در فایل ها می‌توان از تابع f_size استفاده کرد.

تابع f_readdir

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

 

 

برنامه نمونه:

 

 

مسیر فایل

مسیر فایل در FatFs همانند داس/ویندوز می‌باشد.

 

 

نام مورد استفاده قالب 8.3 دارد (sfn) برای استفاده از نام‌های بلند باید _USE_LFN را تنظیم کرد. زیرپوشه‌ها را باید با / یا \ جدا کرد. جدا کننده‌ها ی جفت در نظر گرفته نمی‌شوند. درایو منظقی با یک عدد و یک دو نقطه نشان داده می‌شود برای مثال 2: درایو شماره 2 است. وقتی شماره درایو حذف شود درایو پیش فرض (درایو صفر یا درایو جاری)  در نظر گرفته می‌شود. کاراکترهای \0 و \x1f به عنوان پایان مسیر در نظر گرفته می‌شوند. در حالت LFN ، فاصله‌ها در نظر گرفته می‌شود ولی در حالت عادی، پایان مسیر در نظر گرفته می‌شود. برای مثال مسیر “test path” در حالت عادی “test” در نظر گرفته می‌شود. فاصله‌های انتهای خط و نقطه‌ها در نظر گرفته نمی‌شوند (در هر دو حالت)، در حالت پیش فرض (_FS_RPATH == 0), مفهوم درایو جاری وجود ندارد. همه اشیا در حجم همواره با مسیر کامل از پوشه ریشه توصیف می‌شوند. پوشه های «.» و«..» مجاز نیستند. جدا کننده های ابتدای مسیر در نظر گرفته نمی‌شوند. درایو پیش فرض نیز درایو صفر در نظر گرفته می‌شود. وقتی مسیرهای نسبی فعال شود (_FS_RPATH >= 1), مسیر بیان شده، از پوشه ریشه ادامه پیدا می‌کند، اگر یک جدا کننده اول مسیر موجود باشد وگرنه از پوشه جاری درایو که با f_chdir گذاشته شده است ادامه می‌یابد. نام‌های دارای نقطه هم برای مسیرها مجاز هستند. درایو پیش فرض درایو جاری است که توسط f_chdrive تعیین می‌شود.

 

مسیر فایل در FatFs

 

وقتی گزینه _STR_VOLUME_ID مشخص شده باشد می‌توان از رشته‌های از پیش تعیین شده به جای عددها برای شماره درایوها استفاده کرد مثلا “sd:file1.txt”, “ram:swapfile.dat”

 

مدیریت حجم

سیستمِ فایل، برای هر کدام از درایوهای منطقی (درایو ها می توانند به شکل فیزیکی متفاوت باشند) به file system object نیاز دارد که با دستور f_mount به FatFs اضافه یا حذف (unregister) می‌شود. این دستور سکتور بوت را می‌خواند و بررسی می‌کند که سکتور Fat با سکتور صفر SFD، پارتیشن ها در قالب FDISK باشد.

اگر گزینه مولتی پارتیشن  ( MULTI_PARTITION == 1 )  فعال باشد هر درایو منطقی به یک بخش روی درایو فیزیکی محدود است که در جدول مدیریت پارتیشن ها مشخص شده است. این جدول باید توسط کاربر مشخص شود تا ارتباط بین درایوهای منطقی و پارتیشن ها مشخص شود. برای مثال یک نمونه از این جدول در زیر دیده می‌شود:

 

 

در شکل زیر دو حالت دیده می‌شود. شکل سمت راست حالت چندبخشی را نشان می‌دهد. دو درایو فیزیکی صفر و یک موجودند که درایو صفر به سه بخش تقسیم شده است و در مجموع 4 درایو منطقی داریم.

 

مدیریت حجم در STM32F4

 

نکات

  • درایو فیزیکی که بیش از یک بخش دارد نباید جداشدنی باشد.
  • تغییر حافظه ها وقتی که یک عملیات سیستمی در حال انجام است مجاز نیست.
  • تنها چهار بخش ابتدایی می توان تعریف کرد. بخش های گسترش یافته نیز مجاز نیستند.
  • ویندوز اجازه چند حجم روی ذخیره ساز های جداشدنی نمی دهد. تنها اولین بخش شناخته خواهد شد.

در شکل زیر این پشته دیده می‌شود.

 

پشته در STM32F4

 

اگر سخت‌افزار جانبی پروتکل spi و یا i2c را پشتیبانی کند این کتابخانه به تنهایی کافی است ولی برای کار کردن با برخی از سخت‌افزارهای دیگر نیاز به تابع های میانی است. نمونه این دو در شکل چپ و راست به ترتیب دیده می‌شود.

 

پشته در STM32F4

 

 

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

 

مدیریت حجم در STM32F4

 

برخی ویژگی‌های این سیستم فایل عبارتند از:

  • تا 10 حجم دیسک قابل استفاده است
  • اندازه حجم دیسک برابر 2 ترابایت با برش های 512بایتی
  • اندازه فایل تا 4 گیگابایت در fat و بی نهایت در exFat
  • اندازه برش ها می تواند 512،1024، 2048 و 4096 باشد.

 

بسته به اینکه از کدام ماژول‌های این کتابخانه استفاده کنید می‌توانید با تعریف‌هایی آن‌ها را انتخاب کنید.

 

مدیریت حجم در STM32F4

 

همه کدهای FAT نیاز به تابع واسط برای دسترسی به سخت افزار دارند بسته به اینکه از پروتکل spi استفاده شود یا sdio به باس تک بیته یا باس 4 بیته نیاز است. دست کم به سه تابع نیاز دارید. یکی که کارت و کنترلر را آغازسازی کند یکی که یک بلوک را (که معمولا 512 بایت است) به داخل ram بخواند و یکی که یک بلوک را از ram به داخل کارت بنویسد.

 

در قسمت پانزدهم آموزش میکروکنترلر STM32F4 به مبحث کار کردن با کارت SD در کتابخانه HAL خواهیم پرداخت. با سیسوگ همراه باشید.

 

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

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

51 دیدگاه در “آموزش میکروکنترلر STM32F4 قسمت 14 : سیستم فایل FatFs بر روی کارت SD

  1. Avatar for مسعود مسعود گفت:

    من با فلش مموری کار میکنم و توابع همین هست
    اما قسمت FA_OPEN_APPEND نداره.

    و من توی فایل .txt میتونم بنویسم، اما خط بعد نمیره و فقط روی هم متن قبل مینویسه و … .

  2. Avatar for احمد احمد گفت:

    سلام چرا من نمیتونم قسمت 15 رو پیدا کنم؟

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

      احتمالا مقاله ادامه پیدا نکرده

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

    سلام یه مشکل خیلی اساسی با لایب فت اف اس دارم !!
    وقتی دیسم جدا میشه
    و دباره وصل میشه با هیچ دستوری نتونستم دباره INIT کنم کارت حافظع رو همه دستوراتشو اعم از
    fresult = f_mount(NULL,””,0);
    MX_FATFS_Init();
    f_sync(&fil) ;
    امتحان کردم

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

      «دیسم» یعنی وقتی دقیقا چی میشه
      متوجه نشدم

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

        سلام حاجی
        برد ریست میشه
        کارت حافطه روی برد نصب هست شروع میکنه به کار کرد بدون مشکل
        یک نفر کارت رو خارج میکنه و دباره وصل میکنه
        بدون ریست میکرو دباره با هیچ دستوری نمیشد اینیت کرد یا مونت کرد یا دباره کارت حافظه رو خوند
        میکرو رو ریست میکنم مشکل حل میشه چاره دیگه ای نداشتم !!!

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

          سلام
          خوب این حالت‌ها رو به شکل نرم افزاری باید هندل کرد- معمولا سوکت های SD پایه ای دارند که میگه آیا کارت داخل سوکت هست یا نه

  4. Avatar for حسن پور حسن پور گفت:

    سلام
    چطور میشه از این کتابخانه ff.h در کدویزن استفاده کرد
    تمامی فایلهاشو از سایت چان دانلود کردم
    من اینکلود که میکنم تابه های f_open ,,, f_close ,…. تقریبا همش نمیخونه میزنه define شده اما reference نیست
    خود کدویژن هم ff.h داره اما باز اون تو شبیه سازی اوکی ولی وفتی روی میگرو میزنم اجزا نمیکنه
    ای سی 128A ….. پروتکل سریال فعال نمیشه
    از config لیبری مموری کارت فعال کردم

    1. Avatar for zeus zeus گفت:

      سلام
      البته مدت خیلی زیادی هست که با کدویژن کار نکردم (شاید حدود 10 سال) ولی فکر میکنم تو ورژن های آخری یعنی ۳ به بعد اصلا کدویژن این کتابخانه رو اضافه کرده خودش و فقط لازمه توی ویزارد تیکش رو بزنید.

  5. Avatar for سعید سعید گفت:

    سلام
    وقتی با دستور f_read یه فایل txt رو می خونم، مقدار ascii اونها در ram ذخیره میشه.
    امکانش هست که خود عدد ذخیره بشه؟
    مثلا اگر تو یه فایل txt اعداد 12345 ذخیره شده باشن، موقع استفاده از f_read، همون 12345 خونده بشه نه مقدار ascii شون.

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

      سلام دوست عزیز
      فایل های متن به صورت کاکتری ذخیره میشن برای همین هم هست که اسکی اونو موقع خوندن دریافت میکنید (رشته)
      برای تبدیل میتونید رشته رو به عدد تبدیل کنید بعد از خوندن از فایل

      1. Avatar for سعید سعید گفت:

        نمیشه فایل رو با یه فرمت دیگه ذخیره کرد؟
        ( مثلا .bin)

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

          شما میتونید فایل را بصورت باینری هم ذخیره کنید و بخونید و مثلا برا یک عدد Long 4 بایت را اختصاص بدید که البته ساختار خوندنش میتونه کمی متفاوت باشه با ساختار تکست

  6. Avatar for سانیار سانیار گفت:

    سلام وقت بخیر.
    من درایور ال سی دی ft810 تهیه کردم و میخوام با میکروکنترلر stm32f103c8t6 چند عکس نمایش بدم. درایورم از کارت اس دی پشتیبانی میکنه اما کتابخانه خوبی ندارم. میخواستم بدونم برای استفاده از کارت اس دی و نمایش عکسهای ذخیره شده در اون از طریق درایور، باید دقیقا چیکار کنم؟
    ممنونم از راهنمایی شما

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

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

      1. Avatar for سانیار سانیار گفت:

        ممنون از پاسخ شما. ببینید ما میخوایم مستقیم از حافظه درایور عکس رو فراخوانی کنیم و دیگه حافظه میکروکنترلر رو درگیر نکنیم. چطور میتونیم مستقیما به حافظه درایور دسترسی داشته باشیم؟ 1مگابایت حافظه داره.
        کاری که ما میتونیم انجام بدیم این هست که عکس رو تبدیل به کد هگز کنیم و از میکرو منتقل کنیم. اینطوری وقتی سایز عکس رو بالا می‌بریم برای ال‌سی‌دی 7 اینچ، ارور حافظه میگیریم. اما اگر بتونیم مستقیما عکس رو به درایور بدیم، دیگه فقط کافیه که فراخوانی بشه درست میگم؟ هیچ کدی پیدا نکردیم که اینکار رو انجام بده. الان میتونیم عکسی رو که دیفالت روی درایور بوده و لوگوی ftdi هست رو نمایش بدیم، اما نمیتونیم عکس جدیدی بهش منتقل کنیم. صرفا میتونیم عکسهای با سایز و حجم کوچیک رو نمایش بدیم که مطلوب ما نیست.

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

          خواهش میکنم
          متوجه شدم منظورتون چیه – خوب اول باید بگم اون حافظه ۱ مگ داخلی کنترلر تصویر از نوع رم هست و برای شما در دسترس نخواهد بود چون در واقع ram پردازشی خود چیپ هست و وقتی چیت بخواد تصاویر رو نمایش بده اول توی این رم رندر میشه! برای همین برای کاربر در دسترس نیست – مقدار اون رم مهمه چون ماکزیمم ابعاد تصویری که چیپ میتونه پشتیبانی کنه بسته به اون رم داره.
          خوب حالا از این قضیه که بگذریم شما یه تصویر ۸۰۰ در ۴۸۰ پیکسل رنگی دارید که میخواید روی نمایشگر نمایش بدید درست میگم !! اگر کیفیت تصویر شما ۱۶ بیت باشه – حجم خام عکس میشه حدود 760 کیلو بایت که اصلا منطقی نیست بخواید روی میکرو ذخیره اش کنید اما اگر شما همین تصویر رو تبدیل به jpeg کنید احتمالا حجمش به زیر ۱۰۰ کیلو میرسه و منطقی میشه این کار! البته نمیدونم از چه میکرویی با چه حافظه ای دارید استفاده میکنید.
          من الان دیتاشیت ft810 رو بررسی کردم و خوشبختانه از کدک jpge پشتیبانی میکنه و از این بابت جای نگرانی نیست.

          1. Avatar for سانیار سانیار گفت:

            خیلی ممنون از توضیح واضح و کاملتون. دقیقا مشک ما همین بود که عکسها 768 کیلوبایت میشن حدودا و مشکل حافظه داریم. اینطور که متوجه شدم منظور شما این هست که بیایم عکس رو با همون فرمت JPEG به پروژه اضافه کنیم و با دستوری که در کتابخانه ش وجود داره صرفا لود کنیم؟
            البته این دستور رو باید خودمون بنویسیم احتمالا. چون کد کتابخانه کاملی ازش موجود نیست و اکثر کدها برای اردوینو نوشته شده و ارور دارن..

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

            خواهش میکنم دوست عزیز
            بله درست متوجه شدید – من قبلا همین مشکل رو داشتم ولی از آیسی ft810 استفاده نمیکردم که بتونم با فرمت jpeg ذخیره کنم و برای همین اومده بودم عکس رو با فرمت lz فشرده میکردم روی حافظه میکرو و موقع پخش از حالت فشرده خارجش میکردم. ولی با توجه به این که چیپ ft از فرمت های jpg پشتیبانی میکنه برای شما بهترین کار همین راههه

  7. Avatar for فرهاد فرهاد گفت:

    سلام
    مهندس ممنون از آموزش خوب تون
    مهندس این آموزش ادامه هم داره؟

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

      سلام دوست عزیز فعلا برنامه ای برای ادامه این آموزش نداریم و در حال تدوین آموزش های دیگری هستیم

  8. Avatar for حمید حمید گفت:

    درود به استاد گرامی
    ممنون از اموزش های خوبتون
    آیا کار با ماژول کارت خوان فقط با stm32 سری 4 امکان پذیره؟ من سری 1 گرفتم حجم مموری رو میتونم بخونم اما نمیتونم فایل بسازم و داخلش بنویسم. اگه راهنمایی بفرمایید ممنون میشم

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

      حتی میشه با سری های avr کار کرد و منحصر به میکروی خاصی نیست
      احتمالا که الان در نظرم هست اینه شاید کتابخانه به شکل readonly در دسترس شما باشه – این مورد رو بررسی کنید.

  9. Avatar for علی خورسندی علی خورسندی گفت:

    سلام ممنون از سایت خوبتون.
    در sdio فایل ایجاد میشه ولی داخلش رایت نمیشه.
    از این دوروش هم استفاده کردم.با فرکانسهای مختلف ولی مشکل حل نشد لطفا راهنمایی بفرمایید باتشکر.
    if(f_printf(&MyFile,”Test \r\n”)==FR_OK)
    و
    if(f_write(&MyFile, wtext, sizeof(wtext)-1, (void *)&byteswritten)== FR_OK)

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

      حتما در اتمام نوشتن باید فایل رو ببنیدید اگر این کار رو انجام ندیدن نوشتن انجام نمیشه یعنی بافر روی میکرو با سکتور های mmc سینک نمیشه
      آیا این کار رو انجام میدید ؟

  10. Avatar for Hosein Mohammadi Hosein Mohammadi گفت:

    سلام روز همگی بخیر. ببخشید من پست اموزشی رو با عنوان مبدل دیجیتال به آنالوگ توی لیست آموزش میکروکنترلر stm32 ندیدم, بخاطر همین اینجا سوالمو میپرسم.
    دوستان من با استفاده از ESP32 محصول شرکت espressif , فایل صوتی با فرمت mp3 رو از طریق یلوتوث دریافت یا از روی microSD خوندم! و از طریق رابط I2S به مبدل دیجیتال به آنالوگ pcm5102 فرستادم و خروجی خوبی دریافت کردم. ولی متاسفانه دیروز حواسم به ولتاژ منبع تغذیه نبود و ماژول pcm5102 سوخت متاسفانه. الان رفتم میبینم قیمتش آنچنان رفته بالا ک حقیقتا توان خرید این ماژول رو ندارم.
    الان میخواستم ببینم از میکروکنترلرهای stm32 میشه بجای این ماژول استفاده کنم؟ و اینکه اگر امکان پذیر هس چطور باید انجامش بدم؟
    لطفا دوستانی که تجربه ای دارن, کمکم کنن.
    ممنون

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

      سلام
      چرا از dac داخلی خود esp32 استفاده نمیکنید ؟ کیفیت خوبی هم داره
      https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/peripherals/dac.html

      1. Avatar for Hosein Mohammadi Hosein Mohammadi گفت:

        عصر بخیر… مبدل دیجیتال به آنالوگ داخلی esp32, هشت بیتی هستش. کیفیت مطلوب و خوبی نداره.
        شما با رابط i2s میکروکنترلرstm32 کار کردین؟

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

          ۸ بیت که به نظر کیفیت معقولی هست
          ولی به با i2s کار کردیم و به خوبی هم کار میکنه مشکل شما الان کجاست
          البته stm32 هم dac داخلی فکر کنم ده بیتی یا ۱۲ بیتی هم داره.

          1. Avatar for علی خورسندی علی خورسندی گفت:

            سلام بعد از f _mount در f_open متوقف میشه .مشکل چی میتونه باشه .اس دی 8 گیگ هست و fat 32 فرمت ۲۰۴۸

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

            سلام احتمالا نمیتونه با کارت حافظه ارتباط برقرار کنه
            در حالت دستور mount فقط متغییر ها رو مقدار دهی میکنه و سعی نمیکنه که با دیسک ارتباط برقرار کنه !
            برای این کار که توی همون mount دیسک رو هم چک کنه – یه پارامتر ورودی میگیره که این کار رو میکنه – اون متغییر رو ست کنید و به تابع پاس بدید

  11. Avatar for mohammad mohammad گفت:

    سلام
    خسته نباشید
    اگه بخوایم “یک” فایل با حجم بیشتر از 4 گیگابایت داشته باشیم، از فرمت fat32 نمیشه استفاده کرد، باید از exfat استفاده کرد
    ولی من نمونه کدی پیدا نکردم که توش روی sd card و با این فرمت، فایلی ساخته باشن…
    در واقع همه جا اومدن از متغیرای FIL استفاده کردن که f_sizeش یه عدد 32 بیتیه (همون 4 گیگ)
    به جز این مجموعه دستورات، دستورای دیگه نیست برای فرمت exfat؟

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

      سلام دوست عزیز
      خوب مورد شما یه مورد خاصه :)‌تا حالا برای خودم پیش نیامده که چنین حجمی رو لازم داشته باشم
      ولی شما میتونید از کتابخانه ELM-CHAN استفاده کنید طبق گفت های خودش این کتابخونه قادره فایل سیستم exFAT رو پشتیبانی کنه و دقیقا اشاره کرده که میتونید فایل های حجیم بزرگتر از ۴G بسازید – لینک زیر رو مطالعه کنید
      http://elm-chan.org/docs/exfat_e.html

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

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

    برای انتقال حجم زیاد داده 32 بیتی و با سرعت بالا به sdcard، لازمه انتقال توسط DMA و بصورت SDIO انجام بشه. ممنون میشم در ادامه آموزش ، به نحوه پیکر بندی صحیح cube برای DMA هم مطالبی اختصاص بدید و به تغییرات لازم و نکات مهم در پیکربندی و کد نویسی اشاره کنید. سعی خودم و منابع اینترنت بی نتیجه بود.

    باز هم ممنون

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

      سلام دوست عزیز
      خواهش میکنم نظر لطف شماست :))
      سعی میکنیم در لیست کاهامون قرار بدیم راه اندازی DMA رو
      البته لازمه اشاره کنم چون fat یه فرایند نرم افزاری است به شکل کامل نمیشه از قابلیت dma برای بالابردن سرعت استفاده کرد ولی خوب راه هایی هم هست که بشه به این مهم دست پیدا کرد.

  13. Avatar for MORTEZA MORTEZA گفت:

    سلام.
    بسیار عالی.
    ببخشید قسمت 15 رو هرچه گشتم پیدا نکردم.
    اصلا این سری از آموزش قسمت 15 داره؟

    1. Avatar photo electronic girl گفت:

      سلام ممنون از نظر لطفتون دوست عزیز… قسمت 15 این مجموعه هنوز منتشر نشده

  14. Avatar for علیرضا علیرضا گفت:

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

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

      اجازه بدید – در حال بررسی هستیم ؛

  15. Avatar for سعید سعید گفت:

    سلام من تقریبا تمام مقالات سیسوگ را مطاله می کنم و عالین اما این مقاه خیلی خلاصه بود ای کاش کمی توضیحات بیشتری در مورد این موضوع می نوشتید یا حداقل یک مقدمه در مورد فایها اولش می نوشتید اما منتظر ادامه این مقاله بخصوص در مورد فایل نویسی و راه اندازی SD کارت هستیم باتشکر

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

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

  16. Avatar for محسن عبدالهی محسن عبدالهی گفت:

    با سلام
    ممنونم از آموزش بسیار خوبتون
    بنده با RTOS نتونستم SDIO رو راه اندازی کنم.
    یعنی mount می کنه ولی وقتی درون تست بخوایم یه فایل رو باز کنیم خیلی طول میکشه بعدش خطای دیسک میده
    ممنونم ازتون که مشکل رو شناسایی کنید

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

      خوب یعنی بدون سیستم عامل درست کار میکنه ؟
      ببینید سیستم عامل در واقع نمی تونه دخالتی توی کار کردن یا نکردن SDIO داشته باشه ؛ مگر این که روی کتابخونه خودتون Mutex یا semaphore رو فعال کرده باشید و درست مدیریتش نکرده باشید در اون صورت هم نباید خطای دیسک رو داشته باشید.
      بعد این که سورس رو شما نوشتید ما که نمیتونیم متوجه بشیم مشکل از کجاست – چرا که سورس شما رو ندیدیم 😐

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

    مدتیست با سیسوگ آشنا شدم سایت از نظر محتوا بسیار عالیست دمتون گرم
    بیصبرانه منتظر قسمت 15 هستیم . مرسی

    1. Avatar photo electronic girl گفت:

      ممنون از لطف شما دوست عزیز

    2. Avatar for علبرضا علبرضا گفت:

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

      1. Avatar photo electronic girl گفت:

        سلام ممنون از لطف شما دوست عزیز

  18. Avatar for SARA SARA گفت:

    سلام ممنون از سایت خوبتون.
    قسمت 15 کی بر روی سایت قرار میگیره؟ من شدیدا بهش نیاز دارم

    1. Avatar photo electronic girl گفت:

      سلام دوست عزیز
      تا روز چهارشنبه مطمئنا منتشر میشه. ممنون از شکیبایی شما

      1. Avatar for Sara Sara گفت:

        ممنون از پاسختون
        میخواستم درخواست کنم اگر امکانش هست توضیحاتی هم در مورد ساخت پوشه و زیر پوشه در sd card و خواندن آنها توسط میکرو هم داده بشه

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

          سلام – خوب کار با پوشه خیلی ساده است مثل فایل ؛ به توابع مربوطه نگاه بندازید ؛ و البته توصیه میکنم که به سایت خود چان سر بزنید و مستندات اونجا رو مطالعه کنید
          اگر سوال خاصی دارید مطرح کنید تا حد توان سعی میکنیم که جوابگو باشیم

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

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