توصیه شده, کتابخانه برنامه نویسی

همه چیز درباره راه اندازی MMC/SD قسمت اول

معرفی:

تصور یک مدار دیجیتال بدون حافظه ، تقریبا غیر ممکن است. تمام مدارات دیجیتال نیاز به حافظه دارند و بدون آن عملکرد آنها مختل می شود. حافظه ها انواع مختلفی دارند.

در این مقاله سعی داریم که به معرفی حافظه هایی با حجم بالا بپردازیم. حافظه هایی که برای ذخیره سازی انبوه داده به کار می روند. تا قبل از معرفی حافظه های کوچک قابل حمل داده ها درون دیسک ها ذخیره می شدند که به دلیل ساختار مکانیکی دیسک ها امکان استفاده آنها در ادوات الکترونیکی کوچک و قابل حمل نبود. این مهم باعث ایجاد محدودیت های جدی در توسعه دستگاه های دیجیتالی قابل حمل می شد تا این که در سال 1997 شرکت SanDisk با همکاری شرکت Siemens AG حافظه MMC (MultiMediaCard) را معرفی کردند.

ابعاد کوچک در کنار تعداد پایه های کم ، به سرعت باعث محبوبیت این نوع حافظه شد. اولین نسخه های MMC از یک بیت(سریال) برای برقراری ارتباط استفاده می کرد تا این که نیاز به سرعت بیشتر جهت دسترسی به داده ها شرکت ها رو مجبور به تولید دیسک های پر سرعت و رابط 4 بیتی ارتباطی کرد به صورتی که سرعت انتقال داده از 20 مگابیت بر ثانیه (نمونه اولیه) به سرعت 832 مگابیت بر ثانیه(MMCplus) رسید.

شاید برای شما مفید باشد: هک تگ آسانسور و همه چیز راجع به هک کارت های Mifare

با این حال با توجه به نیاز روز افزون دنیای دیجیتال به سرعت بالاتر شرکت های تولید کننده را مجبور به طراحی نسل جدیدی کرد که علاوه بر سرعت بیشتر ، قابلیت ها بیشتری نیز داشته باشد. در همین راستا شرکت SanDisk با همکاری Panasonic و Toshiba دست به طرحی حافظه ای شدند که علاوه بر سازگاری با حافظه MMC دارای قابلیت های جدیدی باشد و نیازهای به وجود آمده را پاسخگو باشد. نتیجه این همکاری معرفی دیسک SD شد.

دیسک های SD علاوه بر سازگاری با نسل قبلی دارای سرعت بیشتر و ابعاد کوچکتری هم بودند. این دیسک ها از سال 2000 تا هم اکنون در حال استفاده هستند و به نظر می رسد که تا آینده های دور نیز مورد استفاده قرار گیرند. دیسک های تولید شده SD قابلیت انتقال اطلاعات را با سرعتی بالغ بر 5 گیگابیت بر ثانیه را دارا می باشند.

پیکربندی پایه ها:

قبل از هر چیزی جهت اتصال یک حافظه به مدار مورد نظر ، نیاز است که ترتیب پایه ها و عملکرد آنها را بدانیم . با توجه به تنوع حافظه های موجود ، ترتیب و تعداد پایه های آنها متفاوت است. که در تصور های زیر تفکیک نوع حافظه شما قادر به مشاهده ترتیب و نام پایه مورد نظر هستید.

SD/MMC

Mini SD

Micro SD

 

همانطور که تصاویر فوق مشاهده می کنید ، کارت حافظه 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 بیت دیتای مروبطه است.

 

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

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

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

24 دیدگاه در “همه چیز درباره راه اندازی MMC/SD قسمت اول

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

    سلام من یه کارت حافظه MMC دارم که اطلاعات داخلش برام مهمه ولی نمیدونی با چی بازش کنم؟
    لطفا راهنمایی کنید
    ..

  2. Avatar for هادی دادگستر هادی دادگستر گفت:

    سلام
    جای یه آموزش در مورد راه اندازی میکرو اس دی با SDIO و فرق راه اندازی در حالت 1 بیتی و 4 بیتی
    در سایت شما خیلی خالی هست . !!!!!!

    1. Avatar for Shadow Shadow گفت:

      سلام دوست عزیز
      حتما در پست های بعدی به این موضوع می پردازیم.

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

    سلام
    برای راه اندازی سخت افزاری با باطری های لیتیومی و محدوده تغییرات ولتاژ 3.5 الی 4.1 ولت چه طراحی رو پیشنهاد میدین؟

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

      بهتره که از رگولاتورهای LDO استفاده کنید

  4. Avatar for نجم الدین نجم الدین گفت:

    سلام.وقت بخیر.
    من با یه تراشه XMEGA کار میکنم و نیاز دارم که بتونم اطلاعات 16 بیتی را با سرعت 100هزار نمونه در ثانیه و حجم نهایی 16 مگابایت ذخیره کنم پیشنهاد شما چه روش و تراشه حافظه ای و …. هست؟
    با تشکر.

    1. Avatar for Zeus Zeus گفت:

      میشه نرخ ۲۰۰ کیلوبایت بر ثانیه – هم میتونید از mmc استفاده کنید هم nand flash و هم nor flash
      به جز mmc که من خیلی به استیبیلیتیش اطمینان ندارم دو گزینه دیگه گزینه های خوبی هستن

      1. Avatar for مهدی نجم الدین مهدی نجم الدین گفت:

        با تشکر از شما.
        لطفا چند شماره نمونه از nand flash و nor flash معرفی بفرمایید.با تشکر از شما

  5. Avatar for امید امید گفت:

    قسمت دوم نداره ؟ 😐

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

      واقعا فراموش کردم بنویسمش 🙁

      1. Avatar for مجهول ابن بهلول مجهول ابن بهلول گفت:

        خوب بنویسیدش :))))

        1. Avatar for zeus zeus گفت:

          پیشنهاد خوبیه – و زمان اگر اجازه بده حتما 🙂

  6. بازتاب: فایل سیستم در STM32 – نامینیک
  7. Avatar for Ali Ali گفت:

    سلام دوست عزیز من این کتابخونه رو برای آردوینو تغییر دادم میخوام تو صفحه گیت هاب اسم درستشو بنویسم الان شما مطرح کردید شک کردم اسم سایت chan هست ولی شما میگین chang کدوم درسته بالاخره?

    1. Avatar for Ali Ali گفت:

      ببخشید کامنتو اشتباه گذاشتم اینجا من منظورم کتابخونه ی pff.h هست

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

      سلام دوست عزیز
      تا اونجا که من اطلاع دارم chanاسم گربه ایشونه لینک زیر رو نگاه بندازید
      http://elm-chan.org/profile_e.html
      ولی هرچی فکر میکنم من یادم نمیآد گفته باشم chang :/
      میشه بگید کجا گفتم ؟

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

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

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

      یه نرم افزار هست معروف به SD Formater مربوط به خود شرکت SD ؛ اگر با اون هم کازساز نشد ؛ احتمال خیلی زیاد کارت حافظه مشکل داره و برای گارانتی باید مراجعه کنید.

  9. Avatar for بنده خدای یکتا بنده خدای یکتا گفت:

    اقا یا خانوم زئوس به کار الکترونیکت برس.
    یه خدا داریم همون کافی و کامل.

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

      اینم از اون کامنت ها بود
      منم دارم همین کار رو میکنم

  10. Avatar for Cozmo Cozmo گفت:

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

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

      سلام
      باید دقت داشته باشید که توی fat32 به صورت پیش فرض طول فایل ها نهایتا می تونند 8 کارکتر باشند (مگر با فعال کردن LFN) با این فرض شما با استفاده از تابع sprintf اسم فایل دلخواهتون که میتونه شامل هر متغییری باشه رو می سازید و استفاده می کنید
      به عنوان نمونه ، کد زیر رو ببینید
      char filename[13] = {0}
      sprintf(filename,"%02i%02i%02i.txt",year,mon,day);

  11. Avatar for رضا رضا گفت:

    ممنونم راهنمای جامعی بود

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

      خواهش میکنم

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

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