آموزش و راه اندازی محصولاتمعرفی، آنالیز و مقایسه محصولات

آموزش مدیریت فایل در Flash Memory با کمک ماژول USB HOST CH376S

در این آموزش خواهید دید که چگونه به سادگی می توان مدیریت فایل در فلش مموری یا SD کارت انجام داد و کاربردهای متنوعی نظیر دیتالاگر و... بهره‌برداری کرد

مقدمه

فلش مموری (USB Flash Drive) یکی از جدیدترین حافظه های موجود برای ذخیره سازی اطلاعات از طریق کامپیوتر است ، با این تفاوت که حجم ظرفیت آن به مراتب بیشتر از CD است. فلش مموری ها در انواع گوناگون و برای مصارف مختلف ساخته شده اند.

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

شیوه ذخیره اطلاعات در این نوع از حافظه بسیار شبیه به ذخیره اطلاعات در RAM می‌باشد. در حقیقت حافظه های فلش در نحوه فعالیت مشابه یک منبع ذخیره اطلاعات ثابت عمل می کند. به این معنی که در آنها هیچ قطعه متحرکی به کار نرفته و تمام کارها توسط مدارات الکترونیکی انجام می‌شود. از این رو در دوربین های دیجیتالی ، تلفن همراه و سایر دستگاه ها شاهد استفاده روز افزون از آنها هستیم.

سر آغاز و معرفی

شاید تاکنون نیاز داشته اید که بین مدارات میکروکنترلری و USB Flash Disk یا SD کارت ارتباط برقرار کنید و داده‌های موجود در آنها را مدیریت کنید، با مطالعه این آموزش از این پس قادرید توسط یک مدار ساده میکروکنترلری  بواسطه تراشه مدیریت فایل CH376S یک یا چندین فولدر،فایل متنی، عکس و… ایجاد کنید، داخل فایلی متنی بنویسید و بخوانید، حجم فایلی را محاسبه و قرائت کنید، فایلی را پاک کنید و….

تراشه CH376S یکی از قوی ترین File Manager هاست. فرقی نمی کند فلش مموری باشد یا SD کارت مهم این است که حافظه را مستقیما یا به واسه رم ریدر به درگاه USB ماژول USB Host با تراشه CH376S متصل کنید.

تصویر ماژول USB Host با تراشه CH376S

کاربردها

تراشه CH376S که در ماژول فوق تعبیه شده است کاربردهای متعددی را امکان پذیر کرده است:

  • اتصال انواع موس و کیبورد
  • اتصال پرینترهای خاص
  • اتصال و مدیریت انواع کول دیسک و هارد
  • و…

این ماژول که از تراشه CH376S بهره می برد قابلیت پشتیبانی از مد USB-Device و USB-Host را دارد مضاف بر اینکه سیستم ذخیره سازی گسترده USB، سیستم عامل پروتکل های ارتباطی SD کارت و سیستم عامل مدیریت فایل FAT12/FAT16/FAT32 در این تراشه تعبیه شده است.

دقت داشته باشید که برای ارتباط سخت افزاری بین فلش مموری و میکروکنترلرها و برای خواندن-نوشتن یک فایل بروی فلش مموری باید از پروتکل USB در مد HOST استفاده نمائیم.

نکته: برای استفاده از فایل‌های ذخیره شده بروی حافظه فلش توسط یک کامپیوتر، باید اطلاعات را طبق فرمت استاندارد FAT32 در آورده و آن را بروی فلش مموری ذخیره نمائیم تا پس از اتصال فلش مموری به سایر سیستم‌ها، کامپیوتر بتواند فایل‌های ذخیره شده را نمایش دهد.

مشخصات تراشه CH376S

  • پشتیبانی از سرعت 1.5Mbps و 12Mbps ، سازگار با USB V2.0
  • قابلیت تنظیم ماژول در دو مد USB-Host و USB-Device
  • کنترل انتقال داده در مد USB Device
  • آشکارسازی اتوماتیک اتصال و عدم اتصال دیوایس به ماژول و ارسال پیام
  • ارتباط SPI HOST با فرکانس 6MHz و پشتیبانی از کارت های SD ،MMC و TF
  • تغذیه 5 ولت یا 3.3 ولت
  • دارای رابط سریال آسنکرون حداکثر تا سرعت 3Mbps
  • دارای عملیات مدیریتی دیسک
  • عملیات خواندن و نوشتن فایل

ارتباط با ماژول CH376S

ماژول CH376S سه نوع از رابط های ارتباطی را پشتیبانی می کند که عبارت اند از :

  • پورت موازی ۸ بیتی
  • رابط SPI
  • رابط سریال UART

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

CH376S Jumper
تنظیم پروتکل ارتباطی

تنظیم نرخ انتقال داده در پورت سریال

برای اینکار باید پایه‌های D5، D4 و D6 ماژول مطابق جدول زیر تنظیم شوند. از آنجا که ما قصد داشتیم این فرآیند توسط میکروکنترلر قابل تنظیم باشد این پایه‌ها به میکرو متصل شده و به نحوی برنامه ریزی شده است که نرخ ارسال پورت سریال روی 9600 باشد.

CH376S Baudrate
تنظیم سخت افزاری سرعت نرخ ارسال

نکته مهم : پایه های D5 ،D4 و D6 در حالت عادی pull-up هستند.

نحوه اتصال ماژول CH376S برای راه اندازی مموری:

ما برای راه اندازی مموری توسط ماژول USB-HOST از پروتکل سریال استفاده کردیم که در تصویر زیر نحوه سیم بندی مدار را مشاهده می کنید.

PCB-Driver-Memory
پشت فیبر مدار راه انداز فلش مموری با ماژول CH376S

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

کد نویسی با کامپایلر کدویژن با هدف مدیریت فایل

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

قابلیت های برنامه

  1. ساخت یک فایل بروی حافظه فلش (فلش مموری) با فرمت FAT32/FAT16
  2. نوشتن و خواندن اطلاعات فایل درون فلش مموری
  3. اضافه کردن یک فایل درون فلش مموری
  4. پاک کردن یک فایل از روی فلش مموری
  5. نمایش حجم فایل های داخل فلش مموری
  6. ساخت فولدر

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

unsigned char USB_Confige(void);
unsigned char USB_CreateFile(char *Name);
unsigned char USB_FileWrite(char *Name,char *Data,unsigned char LenData);
unsigned char USB_FileSize(char *Name);
unsigned char USB_FileRead(char *Name,unsigned char XByte);
unsigned char USB_FileDelete(char *Name);

_ تابع (USB_Confige(void : وظیفه این تابع پیکر بندی ماژول USB-HOST CH376S می باشد.

_ تابع (USB_CreateFile(char *Name : وظیفه این تابع ایجاد فایل متنی، عکس و … داخل فلش مموری می باشد برای مثال برای ایجاد فایل متنی عبارت “TEST.TXT/” را در ورودی تابع اعمال می کنیم.

_ تابع (USB_FileWrite(char *Name,char *Data,unsigned char LenData : وظیفه این تابع نوشتن متن داخل فایل های موجو می باشد برای مثال:

(USB_FileWrite(/TEST.TXT,”RNGO”,4 داخل فایل متنی عبارت RNGO را رایت می کند.

_ تابع (USB_FileSize(char *Name : وظیفه این تابع محاسبه حجم فایل مورد نظر است.

_ تابع (USB_FileRead(char *Name,unsigned char XByte : وظیفه این تابع خواندن اطلاعات داخل یک فایل می باشد.

_ تابع (USB_FileDelete(char *Name : از این تابع برای پاک کردن فایل ها استفاده می شود.

دانش فنی

از آنجا که تهیه محتوای آموزشی کامل و دقیق زحمات و زمان زیادی را بر دوش تیم فنی پژوهشگران نهاده است، بسته ی آموزش کاملی شامل نمونه کد پروژه راه اندازی با نرم افزار کدویژن ، فایل PCB برد نمونه ارائه شده در فیلم، راهنمای پروگرام کردن، فایلهای PDF و… با هزینه‌ای اندک البته همراه با خدمات پشتیبانی به فروش می رسد، باشد که شاید جبران زحمات و دلگرمی اعضای محترم دپارتمان فنی پژوهشگران باشد:

نکته: بدیهی حق نشر این دانش فنی صرفا برای پژوهشگران و خریداران این محصول دانش فنی محفوظ است؛ هرگونه انتقال به غیر و استفاده تجاری شرعاً و قانوناً حرام و قابل پیگیری است.

در ادامه مدار نمونه ای از راه اندازی ساده ماژول USB-HOST CH376S و مدیریت فایل محتوای فلش مموری متصل شده را مشاهده می کنید که نمونه کد آن عینا در بسته دانش فنی قابل خریداری است:

نکته: در فیلم فوق برد نمونه ای مشاهده می شود که صرفا جهت تست و راه اندازی ماژول آماده شده است، لذا بدیهی است که امکان راه اندازی این پروژه بر روی بردبرد یا هر برد نمونه ای دیگری با توجه به شماتیک ارائه شده در بسته فنی فراهم است.

تیم فنی پژوهشگران

ما گروهی از اعضای قدیمی پژوهشسرای رباتیک مشهد مربوط به سالهای دهه 80 و... هستیم، دور هم جمع شدیم و قصد داریم نتایج R&D خود را در پژوهشگران به تألیف درآوریم...

نوشته های مشابه

‫28 دیدگاه ها

  1. با سلام و درود ، مشکلی برای من در ارتباط با ماژول CH376 پیش آمده . خواهش می کنم که کمکم کنید . وقتی دستور DiskMount رو می فرستم چیزی جواب نمیده مطمین هستم که USB_Confige درسته . چرا چنین اتفاقی می افته ؟
    https://github.com/djuseeq/Ch376msc#firmware-difference در این لینک میگه بعضی از ماژول ها با دستور DiskMount و Create File مشکل دارن . شما نظری دارین ؟

  2. با سلام و احترام

    من فایل جدید میسازم. توش اطلاعات و متغیر و … رو میریزم. اما مشکل من رفتن به خط بعد در فایل ایجاد شده هست. تمام اطلاعات همون خط اول و جای اطلاعات قبلی میشینه. با n\ و r\ جواب نمیده.

    لطفا راهنمایی بفرمایید.

  3. سلام
    من میخوام یه فایل text رو که ۴۰۰۰ تا ۶۰۰۰ هزار عدد سه رقمی داخلش هست رو بخونم، یعنی می‌خوام همه اعداد رو یکجا بخونم و در یه آی سی حافظه فلش ذخیره کنم.
    تابع file read این قابلیت رو داره یا محدودیت داره در خواندن؟

  4. سلام و عرض ادب و خسته نباشید و تشکر از آموزشهای شما . من میخوام از این ماژول در پروژه صوتی استفاده کنم یعنی فایل صوتی از usb خوانده شود و به دیکودر فرستاده شه آیا امکان این هدف در این ماژول فراهم هست ممنون میشم راهنماییم کنید.با تشکر

  5. سلام
    ممون از پاسختون
    از فرمت CSV استفاده کردم اما در اکسل هم مانند فایل CSV داده‌ها به صورت سطری نمایش داده میشه و شکل ستونی نداره.
    آیا مشکل واقعا از ماژول هست که نمیتونه دستور ‌n\ اجرا کنه یا ما کد اشتباهی رو میزنیم.
    در دیتا شیت از دستور دیگه‌ای برای ارسال کدهای کاراکترهای کنترلی استفاده میکنه؟؟؟؟؟
    یا اصلا کد دیگه‌ای رو برای رفتن به خط بعد گفته استفاده کنید؟؟
    از بقیه‌ی کاراکترهای کنترلی هم استفاده کردم اما اونارم نشناخت و یه جورایی انگار وقتی این کدها رو دریافت میکنه هنگ میکنه و زمان میبره تا دستور بعدی رو اجرا کنه.

    1. سلام. مجتبی عزیز.
      پیشنهاد خوبی هست ولی باید بگم برای FT81x ما آموزش کاملی را ارائه داده ایم که در یک بخش آموزش اون پخش تصاویر از روی میکروSD هست ، توجه شما رو جلب می کنم به اون آموزش کامل و جامع، با اون روش و کدها شما نیازی به این ماژول ندارید.

  6. سلام واین مشکلو بزطرف کردم از دیتاشیت کمک گرفتم ودرست شد تشکر.
    فقط یه سوال دیگه چرا تو خط اول که میخواد اطلاعات رو ذخیره کنه همیشه اولیش یه کاراکتر (یا یه عدد یا یه حرف) مینویسه؟
    مثلا من می نویسم 13-04-1398 ولی تو فایلی که ساخته 13-04-1398} مینویسه فقط هم توی خط اولش هست.

    1. سلام دوست عزیز
      خیلی خوبه که مشکل تون برطرف شد فقط اگر ممکن راه حل بگین تا بقیه دوستان که به این مشکل برخوردند، بتونن از راه حل شما استفاده کنن.
      برای اینکه یک کارکتر همیشه اول فایل درست میشه رو باید چک کنم، چون بهش برنخوردم تاحالا !!!
      الان همیشه یک کارکتر ثابت اول فایل ایجاد میشه ؟

  7. بله دقیقا من هم از همون تابع استفاده میکنم و خودش در آخر فایل رو میبنده(FileClose)،من حتی با نمونه کدی هم که شما در قسمت while گذاشته بودید تست کردم و این مشکلو داشته ، و دلیلشم هرچی گشتم پیدا نکردم .:-(

  8. سلام.تشکر بابت پاسخ گوییتون
    ولی این مثالی که شما زدید برای زمانی هستش که مثلا 800 بایت را در یک مرحله بفرستیم.
    ولی من اطلاعات رو هر باری که میفرستم 40 بایت هستش تا 12 بار که میفرسته 481 بایت میشه برای بار 13 دیتای من میرسه به 520 بایت که ماژول ارور میده و دیگه درست نمیشه تا ماژول ریست بشه .من در قسمت FileWrite این قسمت را حذف کردم else if(RxBuf[0] != 0x14) return 0; و میکرو ادامه کار خودشو میده و اروری نمیده ولی یه مشکلی هستش وقتی مرحله 13 انجام میشه و اطلاعات ارسال میشه تا 512 بایت رو بیشتر ذخیره نمیکنه و اطلاعات ناقص ذخیره میشه و انگار بافر ماژول خالی میشه و ادامه میده به کارش تا دوباره به 512 برسه و تا آخر.!!؟؟

    1. سلام دوست عزیز
      اگر به تابع FileWrite دقت کنید حداکثر تعداد بایتی که می توانید در هر بار فراخوانی این تابع Write کنید 256 بایت است. اگر بخوان تعداد مثلا 1000 بایت داخل یک فایل Write کنید باید به صورت زیر عمل کنید .
      1 – اسم فایل که می خواهیم داخلش اطلاعات رایت کنید را مشخص کنید با تابع SetFileName
      2 – با تابع FileOpen فایل را باز کنید .
      3 – سپس با نوشتن تابع FileWrite و تکرار آن اطلاعات خود را ذخیره کنید بصورت زیر :
      FileWrite(Data,255)
      FileWrite(Data,255)
      FileWrite(Data,255)
      FileWrite(Data,231)
      دقت کنید متغیر Data از نوع رشته یا آرایه است که قبل از هر بار فراخوانی تابع FileWrite اطلاعات داخل آن را آپدیت کنید .
      4 – در انتها فایل خود را با تابع FileClose ببستید.
      نکته : اگر خواستین دوباره اطلاعات جدیدی بنویسید می توانید همین مراحل را دوباره تکرار کنید.
      در صورت لزوم می توانید با تابع FilePointer محل شروع نوشتن اطلاعات را مدیریت کنید. در صورتی که خواستین از این تابع استفاده کنید باید قبل از تابع FileWrite مورد استفاده قرار گیرد.

  9. قابل توجه بازدیدکنندگان عزیز
    با کمک این آموزش شما می توانید:
    * دیتا لاگر بسازید.
    * دستگاه های حضور و غیاب بسازید.
    * ویرایشگر زنده داده بسازید.
    * در پروژه های خود به حافظه‌های بلند مدت و گسترده دسترسی داشته باشید.
    * و هزاران پروژه دیگر …

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

دکمه بازگشت به بالا