آموزش مدیریت فایل در Flash Memory با کمک ماژول USB HOST CH376S
در این آموزش خواهید دید که چگونه به سادگی می توان مدیریت فایل در فلش مموری یا SD کارت انجام داد و کاربردهای متنوعی نظیر دیتالاگر و... بهرهبرداری کرد
مقدمه
فلش مموری (USB Flash Drive) یکی از جدیدترین حافظه های موجود برای ذخیره سازی اطلاعات از طریق کامپیوتر است ، با این تفاوت که حجم ظرفیت آن به مراتب بیشتر از CD است. فلش مموری ها در انواع گوناگون و برای مصارف مختلف ساخته شده اند.
حافظه های فلش به دلیل سرعت بالای آنها در ثبت اطلاعات و همچنین استفاده فوق العاده آسان بسیار پرفروش و پرطرفدار هستند.
شیوه ذخیره اطلاعات در این نوع از حافظه بسیار شبیه به ذخیره اطلاعات در RAM میباشد. در حقیقت حافظه های فلش در نحوه فعالیت مشابه یک منبع ذخیره اطلاعات ثابت عمل می کند. به این معنی که در آنها هیچ قطعه متحرکی به کار نرفته و تمام کارها توسط مدارات الکترونیکی انجام میشود. از این رو در دوربین های دیجیتالی ، تلفن همراه و سایر دستگاه ها شاهد استفاده روز افزون از آنها هستیم.
سر آغاز و معرفی
شاید تاکنون نیاز داشته اید که بین مدارات میکروکنترلری و USB Flash Disk یا SD کارت ارتباط برقرار کنید و دادههای موجود در آنها را مدیریت کنید، با مطالعه این آموزش از این پس قادرید توسط یک مدار ساده میکروکنترلری بواسطه تراشه مدیریت فایل CH376S یک یا چندین فولدر،فایل متنی، عکس و… ایجاد کنید، داخل فایلی متنی بنویسید و بخوانید، حجم فایلی را محاسبه و قرائت کنید، فایلی را پاک کنید و….
تراشه CH376S یکی از قوی ترین File Manager هاست. فرقی نمی کند فلش مموری باشد یا SD کارت مهم این است که حافظه را مستقیما یا به واسه رم ریدر به درگاه USB ماژول 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
انتخاب پروتکل ارتباطی بر روی این ماژول توسط جامپری که روی آن قراردارد مطابق شکل زیر قابل تنظیم است:
تنظیم نرخ انتقال داده در پورت سریال
برای اینکار باید پایههای D5، D4 و D6 ماژول مطابق جدول زیر تنظیم شوند. از آنجا که ما قصد داشتیم این فرآیند توسط میکروکنترلر قابل تنظیم باشد این پایهها به میکرو متصل شده و به نحوی برنامه ریزی شده است که نرخ ارسال پورت سریال روی 9600 باشد.
نکته مهم : پایه های D5 ،D4 و D6 در حالت عادی pull-up هستند.
نحوه اتصال ماژول CH376S برای راه اندازی مموری:
ما برای راه اندازی مموری توسط ماژول USB-HOST از پروتکل سریال استفاده کردیم که در تصویر زیر نحوه سیم بندی مدار را مشاهده می کنید.
نگران نباشید در بسته ای که در ادامه به عنوان دانش فنی این آموزش در اختیار شما قرار می گیرد شما میتوانید از اصل این فایل طراحی به همراه شماتیک آن برخوردار شوید.
کد نویسی با کامپایلر کدویژن با هدف مدیریت فایل
برای راه اندازی راحت ماژول CH376S و مدیریت فلش مموری تیم فنی پژوهشگران برنامه ای با کامپایلر کدویژن آماده کرده است که توسط آن براحتی می توانید اطلاعات خود را داخل فلش مموری مدیریت کنید.
قابلیت های برنامه
- ساخت یک فایل بروی حافظه فلش (فلش مموری) با فرمت FAT32/FAT16
- نوشتن و خواندن اطلاعات فایل درون فلش مموری
- اضافه کردن یک فایل درون فلش مموری
- پاک کردن یک فایل از روی فلش مموری
- نمایش حجم فایل های داخل فلش مموری
- ساخت فولدر
توابع نمونه آن در زیر معرفی شده است:
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 و مدیریت فایل محتوای فلش مموری متصل شده را مشاهده می کنید که نمونه کد آن عینا در بسته دانش فنی قابل خریداری است:
نکته: در فیلم فوق برد نمونه ای مشاهده می شود که صرفا جهت تست و راه اندازی ماژول آماده شده است، لذا بدیهی است که امکان راه اندازی این پروژه بر روی بردبرد یا هر برد نمونه ای دیگری با توجه به شماتیک ارائه شده در بسته فنی فراهم است.
با سلام
فایلهای تولیدی با این ماژول توسط windows قابل خواندن نیست. برای این مشکل راه حلی وجود دارد
خیلی بعیده. تغییر فرمت بدید و مجدد تست کنید.
با سلام
با سلام و درود ، مشکلی برای من در ارتباط با ماژول CH376 پیش آمده . خواهش می کنم که کمکم کنید . وقتی دستور DiskMount رو می فرستم چیزی جواب نمیده مطمین هستم که USB_Confige درسته . چرا چنین اتفاقی می افته ؟
https://github.com/djuseeq/Ch376msc#firmware-difference در این لینک میگه بعضی از ماژول ها با دستور DiskMount و Create File مشکل دارن . شما نظری دارین ؟
سلام. یحتمل بالای 90 درصد مشکل از تراشه Ch کپی شماست!
با سلام و احترام
من فایل جدید میسازم. توش اطلاعات و متغیر و … رو میریزم. اما مشکل من رفتن به خط بعد در فایل ایجاد شده هست. تمام اطلاعات همون خط اول و جای اطلاعات قبلی میشینه. با n\ و r\ جواب نمیده.
لطفا راهنمایی بفرمایید.
سلام
من میخوام یه فایل text رو که ۴۰۰۰ تا ۶۰۰۰ هزار عدد سه رقمی داخلش هست رو بخونم، یعنی میخوام همه اعداد رو یکجا بخونم و در یه آی سی حافظه فلش ذخیره کنم.
تابع file read این قابلیت رو داره یا محدودیت داره در خواندن؟
صد در صد محدودیت دارید شما توی فضای میکروکنترلری. بله باید تیکه تیکه بخونید.
سلام و عرض ادب و خسته نباشید و تشکر از آموزشهای شما . من میخوام از این ماژول در پروژه صوتی استفاده کنم یعنی فایل صوتی از usb خوانده شود و به دیکودر فرستاده شه آیا امکان این هدف در این ماژول فراهم هست ممنون میشم راهنماییم کنید.با تشکر
باید تحقیق و توسعه انجام بشه روش، باید خودتون تست کنید. روی کاغذ هر انتقالی داده ای رو انجام میدهد.
سلام
وقتتون بخیر وتشکر از پاسخ گویی شما
سئوال من این هست که آیا با تهیه آموزش شما میتونم ماژولch376را به بصورتspiیا پارالل راه اندازی کنم؟ چون سرعت خواندن و نوشتن برام مهمه
سلام
ممون از پاسختون
از فرمت CSV استفاده کردم اما در اکسل هم مانند فایل CSV دادهها به صورت سطری نمایش داده میشه و شکل ستونی نداره.
آیا مشکل واقعا از ماژول هست که نمیتونه دستور n\ اجرا کنه یا ما کد اشتباهی رو میزنیم.
در دیتا شیت از دستور دیگهای برای ارسال کدهای کاراکترهای کنترلی استفاده میکنه؟؟؟؟؟
یا اصلا کد دیگهای رو برای رفتن به خط بعد گفته استفاده کنید؟؟
از بقیهی کاراکترهای کنترلی هم استفاده کردم اما اونارم نشناخت و یه جورایی انگار وقتی این کدها رو دریافت میکنه هنگ میکنه و زمان میبره تا دستور بعدی رو اجرا کنه.
منظور از خط بعد یک خط جدید هست که مانند اکسل بشه داده هارو به صورت ستونی نوشت.( create new line)
من شما رو ارجاع میدم به روش و فرمت CSV که به صورت متنی هست ولی قابل تبدیل به صورت جدولی و اکسلی. لذا بهتره روشتون رو برای نوشتن داده ها تغییر بدید.
من در رفتن به خط بعد مشکل دارم. از n\ استفاده میکنم اما نمیشناسه و در فلش اجرا نمیکنه. آیا کد خاصی برای رفتن به خط بعد وجود داره برای این ماژول؟؟؟؟؟؟؟
معمولا برایEnter در این جور پروژه ها از n\ یا r\ استفاده میشه. ولی باید بررسی بیشتر کنیم تا قطعی بتونم جواب بدم.
با سلام
امکانش هست کتابخانه ماژول را توسط spi هم قرار بدین برای کارهایی که نیاز به خواندن با سزعت بالا دارن مثل نمایش عکس روی lcd با ft810 و …
باتشکر
سلام. مجتبی عزیز.
پیشنهاد خوبی هست ولی باید بگم برای FT81x ما آموزش کاملی را ارائه داده ایم که در یک بخش آموزش اون پخش تصاویر از روی میکروSD هست ، توجه شما رو جلب می کنم به اون آموزش کامل و جامع، با اون روش و کدها شما نیازی به این ماژول ندارید.
سلام. مجتبی عزیز. روال کار مشخص شده شما خودتون می تونید رابط کاربری رو تغییر بدید. الان سریال هست با تغییر توابع مربوط به ارسال و دریافت داده برای spi هم آماده میشه.
سلام واین مشکلو بزطرف کردم از دیتاشیت کمک گرفتم ودرست شد تشکر.
فقط یه سوال دیگه چرا تو خط اول که میخواد اطلاعات رو ذخیره کنه همیشه اولیش یه کاراکتر (یا یه عدد یا یه حرف) مینویسه؟
مثلا من می نویسم 13-04-1398 ولی تو فایلی که ساخته 13-04-1398} مینویسه فقط هم توی خط اولش هست.
سلام دوست عزیز
خیلی خوبه که مشکل تون برطرف شد فقط اگر ممکن راه حل بگین تا بقیه دوستان که به این مشکل برخوردند، بتونن از راه حل شما استفاده کنن.
برای اینکه یک کارکتر همیشه اول فایل درست میشه رو باید چک کنم، چون بهش برنخوردم تاحالا !!!
الان همیشه یک کارکتر ثابت اول فایل ایجاد میشه ؟
بله دقیقا من هم از همون تابع استفاده میکنم و خودش در آخر فایل رو میبنده(FileClose)،من حتی با نمونه کدی هم که شما در قسمت while گذاشته بودید تست کردم و این مشکلو داشته ، و دلیلشم هرچی گشتم پیدا نکردم .:-(
سلام.تشکر بابت پاسخ گوییتون
ولی این مثالی که شما زدید برای زمانی هستش که مثلا 800 بایت را در یک مرحله بفرستیم.
ولی من اطلاعات رو هر باری که میفرستم 40 بایت هستش تا 12 بار که میفرسته 481 بایت میشه برای بار 13 دیتای من میرسه به 520 بایت که ماژول ارور میده و دیگه درست نمیشه تا ماژول ریست بشه .من در قسمت FileWrite این قسمت را حذف کردم else if(RxBuf[0] != 0x14) return 0; و میکرو ادامه کار خودشو میده و اروری نمیده ولی یه مشکلی هستش وقتی مرحله 13 انجام میشه و اطلاعات ارسال میشه تا 512 بایت رو بیشتر ذخیره نمیکنه و اطلاعات ناقص ذخیره میشه و انگار بافر ماژول خالی میشه و ادامه میده به کارش تا دوباره به 512 برسه و تا آخر.!!؟؟
سلام دوست عزیز
برای هر بار نوشتن و آپدیت فایل هم باید مرحله به مرحله عمل کنید که برای نمونه کل این مراحل داخل تابع USB_FileWrite وجود داره . شما بهتره از این تابع استفاده کنید .
شما عملا دارین فقط تو sector 0 که 512 بایت هست ذخیره می کنید باید به sector های بعدی برین
سلام.
من این برنامه ذخیره فلش را خریداری کرده ام.ولی مشکلی که هست هر فایلی که می سازه تا 512 بایت بیشتر نمیتونه داخلش ذخیره بکنه و ارور میده .دلیلش چی میتونه باشه؟
سلام دوست عزیز
اگر به تابع 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 مورد استفاده قرار گیرد.
قابل توجه بازدیدکنندگان عزیز
با کمک این آموزش شما می توانید:
* دیتا لاگر بسازید.
* دستگاه های حضور و غیاب بسازید.
* ویرایشگر زنده داده بسازید.
* در پروژه های خود به حافظههای بلند مدت و گسترده دسترسی داشته باشید.
* و هزاران پروژه دیگر …