معرفی:
تصور یک مدار دیجیتال بدون حافظه ، تقریبا غیر ممکن است. تمام مدارات دیجیتال نیاز به حافظه دارند و بدون آن عملکرد آنها مختل می شود. حافظه ها انواع مختلفی دارند.
در این مقاله سعی داریم که به معرفی حافظه هایی با حجم بالا بپردازیم. حافظه هایی که برای ذخیره سازی انبوه داده به کار می روند. تا قبل از معرفی حافظه های کوچک قابل حمل داده ها درون دیسک ها ذخیره می شدند که به دلیل ساختار مکانیکی دیسک ها امکان استفاده آنها در ادوات الکترونیکی کوچک و قابل حمل نبود. این مهم باعث ایجاد محدودیت های جدی در توسعه دستگاه های دیجیتالی قابل حمل می شد تا این که در سال 1997 شرکت SanDisk با همکاری شرکت Siemens AG حافظه MMC (MultiMediaCard) را معرفی کردند.
ابعاد کوچک در کنار تعداد پایه های کم ، به سرعت باعث محبوبیت این نوع حافظه شد. اولین نسخه های MMC از یک بیت(سریال) برای برقراری ارتباط استفاده می کرد تا این که نیاز به سرعت بیشتر جهت دسترسی به داده ها شرکت ها رو مجبور به تولید دیسک های پر سرعت و رابط 4 بیتی ارتباطی کرد به صورتی که سرعت انتقال داده از 20 مگابیت بر ثانیه (نمونه اولیه) به سرعت 832 مگابیت بر ثانیه(MMCplus) رسید.
شاید برای شما مفید باشد: هک تگ آسانسور و همه چیز راجع به هک کارت های Mifare
با این حال با توجه به نیاز روز افزون دنیای دیجیتال به سرعت بالاتر شرکت های تولید کننده را مجبور به طراحی نسل جدیدی کرد که علاوه بر سرعت بیشتر ، قابلیت ها بیشتری نیز داشته باشد. در همین راستا شرکت SanDisk با همکاری Panasonic و Toshiba دست به طرحی حافظه ای شدند که علاوه بر سازگاری با حافظه MMC دارای قابلیت های جدیدی باشد و نیازهای به وجود آمده را پاسخگو باشد. نتیجه این همکاری معرفی دیسک SD شد.
دیسک های SD علاوه بر سازگاری با نسل قبلی دارای سرعت بیشتر و ابعاد کوچکتری هم بودند. این دیسک ها از سال 2000 تا هم اکنون در حال استفاده هستند و به نظر می رسد که تا آینده های دور نیز مورد استفاده قرار گیرند. دیسک های تولید شده SD قابلیت انتقال اطلاعات را با سرعتی بالغ بر 5 گیگابیت بر ثانیه را دارا می باشند.
پیکربندی پایه ها:
قبل از هر چیزی جهت اتصال یک حافظه به مدار مورد نظر ، نیاز است که ترتیب پایه ها و عملکرد آنها را بدانیم . با توجه به تنوع حافظه های موجود ، ترتیب و تعداد پایه های آنها متفاوت است. که در تصور های زیر تفکیک نوع حافظه شما قادر به مشاهده ترتیب و نام پایه مورد نظر هستید.
همانطور که تصاویر فوق مشاهده می کنید ، کارت حافظه MMC دارای هفت پایه و کارت حافظه SD داری 9 پایه است. پروتکل مشترک بین تمام کارت های حافظه چه از نوع SD و یا MMC ، پروتکل SPI است ، پروتکل SPI غالبا در تمام انواع میکروکنترلر ها به صورت سخت افزاری موجود است و در صورت عدم وجود به راحتی قابل پیاده است. اگر قصد طراحی مداری را داشته باشیم که علاوه بر پشتیانی دو نوع حافظه SD/MCC در هر میکرویی قابل پیاده سازی باشد بهتر است از پروتکل SPI جهت برقراری ارتباط با کارت حافظه استفاده کنیم. البته لازم به ذکر است که اگر میکروکنترلر شما به صورت سخت افزای از رابط SDIO پشتیبانی می کنید ، قطعا سرعت رابط SOIO بالاتر است.
ولتاژ کاری کارت حافظه بسته به نوع آن متفاوت است. بسته به نوع کارت حافظه ولتاژ کاری میتواند بین 2.7 تا 3.6 متغییر باشد. مقدار دقیق ولتاژ کاری هر کارت حافظه را می توان از رجیستر OCR خواند. اما به صورت معمول ولتاژ 3.0 یا 3.3 جهت راه اندازی اولیه استفاده می شود. دقت کنید که کارت های حافظه با ولتاژ 5 ولت سازگاری ندارند و نباید این ولتاژ چه به عنوان تغزیه و چه به عنوان IO به آن اعمال شود.
مود SPI:
کارت های حافظه علاوه بر مود پیشفرض خود که بسته به نوع کارت می تواند مود MMC یا مود SDIO باشد ، از مود SPI نیز پشتیبانی می کند. در واقع SPI یک پروتکل ارتباطی همزان است که برای انتقال اطلاعات نیاز یه 4 رشته سیم دارد. با توجه به این مساله که در SPI سیگنال های دوطرفه (ورودی خروجی هم زمان مثل I2C) وجود ندارد ، پیاده سازی آن هم به لحاظ سخت افزاری و هم نرم افزاری ساده است. اگر میکروکنترلر شما به صورت سخت افزاری این پروتکل را پشتیبانی نمی کند ، اصلا جای نگرانی نیست زیرا که با در اختیار داشتن 4 پایه آزاد در سخت افزار خود ، به راحتی می تواند این پروتکل را به صورت نرم افزاری پیاده سازی کنید.
پروتکل SPI دارای 4 حالت کاری مختلف است که به SPI Mode معروف هستند. جهت برقراری ارتباط با کارت های حافظه ، فرقی نمی کند که کدام نوع کارت را استفاده می کنیدو باید رابط SPI خود را در حالت 0 یا Mode 0 پیکر بندی کنید.
حداقل سخت افزار مورد استفاده جهت اتصال میکروکنترلر به کارت حافظه را در شکل زیر مشاهده می کنید. فقط دقت داشته باشید که اگر ولتاژی کاری میکروی شما 5 ولت است باید از تبدیل سطح ولتاژ استفاده کنید. مقاومت Rpu هم ضروری است، بعضی از کارت های حافظه مقاومت پول آپ داخلی ندارند و نبود مقاومت Rpu باعث ایجاد خطا در کارکرد دستگاه شما خواهد شد.
ارسال دستور و دریافت پاسخ
در پروتکل SPI جهت خط های حامل دیتا ثابت است و داده به صورت سریال و بایت به بایت منتقل می شوند. همانطور که در عکس زیر مشاهده می کنید قالب دستورات ارسالی از میکروکنترلر به کارت حافظه ثابت است و شامل 6 بایت است. بایت اول مشخص کننده نوع دستور ، چهار بایت بعدی شامل پارامتر های مورد استفاده دستور مورد نظر است و بایت آخر هم CRC است که جهت اعتبار سنجی به کار برده می شوند. در حالت عادی کارت حافظه با یک کردن پایه DO نشان می دهد که آماده دریافت دستور است. بعد از دریافت دستور و انجام پردازش مربوط به آن کارت حافظه آماده ارسال جواب است (جواب ها در قالب های مشخصی ارسال می شوند.). با توجه به پروتکل SPI که ارتباط همیشه از سمت مستر مدیریت می شود ، میکروکنترلر باید به صورت پیوسته با ارسال 0xFF چک کند که آیا جوابی وجود دارد یا خیر.
کارت حافظه به اندازه Ncr فرصت دارد تا جواب مورد نظر را آماده کند ، مقدار Ncr بسته به نوع کارت متفاوت است ، برای کارت های SD این مقدار بین 0 تا 8 بایت متغییر است و در MMC بین 1 تا 8 بایت. در صورت آماده بودن جواب کارت کافظه با صفر کردن خط DO در یک سیکل کلاک و ارسال Flag مربوطه آمادگی خود را جهت ارسال جواب اعلام می کند.
خط CS قبل از ارسال هر دستور باید از حالت 1 به حالط 0 تغییر وضعیت بدهد و در حالت 0 باقی بماند تا کارت حافظه جواب دستور مورد نظر را ارسال نمایید. بایت CRC در مود SPI به صورت اختیاری است و از سمت کارت حافظه به آن اهمیتی داده نمی شود.
لیست دستورات SPI
با توجه به این که دو بیت پر ارزش Command Index (ارسال دستور) ثابت است ، فقط 6 بیت برای انتخاب دستور باقی می ماند که تشکیل 64 حالت یا دستور مجزا رو می دهد. با توجه به عکس فوق شماره Index هر دستور مقابل آن ذکر شده مثلا CMD25 دستور شماره 25 است که 4 بایت آدرس به عنوان پارامتر دریافت می کند و پاسخ را در قالب R1 ارسال می کند. برای مشاهده توضیحات بیشتر و دستورات کامل تر به برگه مشخات فنی کارت حافظه مربوطه مراجعه کنید.
پاسخ های دریافتی:
پاسخ های ارسالی از کارت حافظه در قالب های R1,R2,R3,R7 می باشد که پاسخ اکثر دستورات به صورت یک بایت و در قالب R1 ارسال می شود. با ارزش ترین بیت R1 همیشه صفر است و ترتیب باقی بیت ها در عکس زیر قابل مشاهده است . در قالب R1 دریافت عدد 0 به معنی موفقیت آمیز بودن اجرای دستور است.
قالب های R3 و R7 که فقط برای دستورات CMD58 و CMD8 ارسال می شوند ، حاوی یک بایت R1 و 32 بیت دیتای مروبطه است.
سلام من یه کارت حافظه MMC دارم که اطلاعات داخلش برام مهمه ولی نمیدونی با چی بازش کنم؟
لطفا راهنمایی کنید
..
سلام
جای یه آموزش در مورد راه اندازی میکرو اس دی با SDIO و فرق راه اندازی در حالت 1 بیتی و 4 بیتی
در سایت شما خیلی خالی هست . !!!!!!
سلام دوست عزیز
حتما در پست های بعدی به این موضوع می پردازیم.
سلام
برای راه اندازی سخت افزاری با باطری های لیتیومی و محدوده تغییرات ولتاژ 3.5 الی 4.1 ولت چه طراحی رو پیشنهاد میدین؟
بهتره که از رگولاتورهای LDO استفاده کنید
سلام.وقت بخیر.
من با یه تراشه XMEGA کار میکنم و نیاز دارم که بتونم اطلاعات 16 بیتی را با سرعت 100هزار نمونه در ثانیه و حجم نهایی 16 مگابایت ذخیره کنم پیشنهاد شما چه روش و تراشه حافظه ای و …. هست؟
با تشکر.
میشه نرخ ۲۰۰ کیلوبایت بر ثانیه – هم میتونید از mmc استفاده کنید هم nand flash و هم nor flash
به جز mmc که من خیلی به استیبیلیتیش اطمینان ندارم دو گزینه دیگه گزینه های خوبی هستن
با تشکر از شما.
لطفا چند شماره نمونه از nand flash و nor flash معرفی بفرمایید.با تشکر از شما
قسمت دوم نداره ؟ 😐
واقعا فراموش کردم بنویسمش 🙁
خوب بنویسیدش :))))
پیشنهاد خوبیه – و زمان اگر اجازه بده حتما 🙂
سلام دوست عزیز من این کتابخونه رو برای آردوینو تغییر دادم میخوام تو صفحه گیت هاب اسم درستشو بنویسم الان شما مطرح کردید شک کردم اسم سایت chan هست ولی شما میگین chang کدوم درسته بالاخره?
ببخشید کامنتو اشتباه گذاشتم اینجا من منظورم کتابخونه ی pff.h هست
سلام دوست عزیز
تا اونجا که من اطلاع دارم chanاسم گربه ایشونه لینک زیر رو نگاه بندازید
http://elm-chan.org/profile_e.html
ولی هرچی فکر میکنم من یادم نمیآد گفته باشم chang :/
میشه بگید کجا گفتم ؟
سلام من یه رم 32 گیگ دارم که اطلاعات داخلشو نگه نمیداره فرمت کردم ولی جواب نداد چه راه کاری رو پیشنهاد میکنید برای درست کردن این رم ممنون از سلیت خوبتون.
یه نرم افزار هست معروف به SD Formater مربوط به خود شرکت SD ؛ اگر با اون هم کازساز نشد ؛ احتمال خیلی زیاد کارت حافظه مشکل داره و برای گارانتی باید مراجعه کنید.
اقا یا خانوم زئوس به کار الکترونیکت برس.
یه خدا داریم همون کافی و کامل.
اینم از اون کامنت ها بود
منم دارم همین کار رو میکنم
سلام
من چطوری میتونم تاریخ رو به عنوان اسم فایل استفاده کنم؟
ینی هر روز یه فایل به اسم تاریخ همون روز تولید شه
سلام
باید دقت داشته باشید که توی fat32 به صورت پیش فرض طول فایل ها نهایتا می تونند 8 کارکتر باشند (مگر با فعال کردن LFN) با این فرض شما با استفاده از تابع sprintf اسم فایل دلخواهتون که میتونه شامل هر متغییری باشه رو می سازید و استفاده می کنید
به عنوان نمونه ، کد زیر رو ببینید
char filename[13] = {0}
sprintf(filename,"%02i%02i%02i.txt",year,mon,day);
ممنونم راهنمای جامعی بود
خواهش میکنم