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

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

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

معرفی:

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

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

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

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

 

حمایت از Zeus ‌

خوشحال میشیم برای تداوم و کیفیت ما رو حمایت کنید.

0 نفر

پــــســنــدیـده انـد

توجه

Zeus ‌
Zeus ‌

زئوس هستم ساکن المپ

دیدگاه ها

19 دیدگاه

  • نجم الدین
    ۲۵ مهر ۱۴۰۰

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

    • Zeus ‌
      Zeus
      ۲۶ مهر ۱۴۰۰

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

      • مهدی نجم الدین
        ۲۰ آبان ۱۴۰۰

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

  • امید
    ۲۱ آذر ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۲۳ آذر ۱۳۹۸

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

      • مجهول ابن بهلول
        ۱۸ خرداد ۱۴۰۰

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

        • Zeus ‌
          zeus
          ۲۱ خرداد ۱۴۰۰

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

  • فایل سیستم در STM32 – نامینیک
    ۱۴ مهر ۱۳۹۸

    […] شکل بالا پین های خروجی حافظه SD نمایش داده شده است ( اطلاعات بیشتر از کارت های حافظه […]

  • Ali
    ۳۱ شهریور ۱۳۹۸

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

    • Ali
      ۳۱ شهریور ۱۳۹۸

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

    • Zeus ‌
      زئوس Zeus
      ۱ مهر ۱۳۹۸

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

  • حامد
    ۲۴ بهمن ۱۳۹۷

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

    • Zeus ‌
      زئوس Zeus
      ۲۷ بهمن ۱۳۹۷

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

  • بنده خدای یکتا
    ۱۹ دی ۱۳۹۷

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

    • Zeus ‌
      زئوس Zeus
      ۲۰ دی ۱۳۹۷

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

  • Cozmo
    ۱۹ مرداد ۱۳۹۷

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

    • Zeus ‌
      زئوس Zeus
      ۲۰ مرداد ۱۳۹۷

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

  • رضا
    ۲۶ فروردین ۱۳۹۶

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

پر بحث ترین ها

مسابقه دوم : چالش برنامه نویسی به زبان C

مسابقه اول سیسوگ (مسابقه اول: درک سخت افزار) انتقادهای زیادی رو در پی داشت تا جایی که حتی خودمم به نتیجه مسابقه...

Zeus ‌ Zeus ‌
  • 2 سال پیش

راه اندازی LCD گرافیکی Nokia 1661 و دانلود کتابخانه آن

LCD گرافیکی یکی از مهم ترین پارامترهای موجود در طراحی انواع مدارات الکترونیکی پیچیده و حتی ساده است ، نمایش وضعیت و...

Zeus ‌ Zeus ‌
  • 4 سال پیش

ریموت کدلرن و چکونگی دکد کردن آن به همراه سورس برنامه

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

همه چیز درباره ریموت کنترل‌های هاپینگ

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

Zeus ‌ Zeus ‌
  • 5 سال پیش

مسابقه سوم: استخراج داده از رشته ها در زبان C

نزدیک به 5 ماه از مسابقه دوم سیسوگ می‌گذره و فکر کردم که بد نیست یک چالش جدید داشته باشیم! البته چالش‌ها...

Zeus ‌ Zeus ‌
  • 2 سال پیش

مسابقه ششم: بزن میکروکنترلر را بسوزون!

بزنم میکروکنترلر را بسوزونم اونم تو  این شرایط!، طراحی مسابقه از اون چیزی که به نظر می‌رسه سخت‌تر است، باید حواست باشه...

Zeus ‌ Zeus ‌
  • 11 ماه پیش

آموزش قدم به قدم راه اندازی +NRF24L01

آموزش قدم به قدم راه اندازی +NRF24L01  با کتابخانه سازگار با انواع میکروکنترلرها و کامپایلرها قبل از اینکه قسمت بشه با ماژول...

رسول خواجوی بجستانی رسول خواجوی بجستانی
  • 3 سال پیش

ساخت ماینر با FPGA و ARM

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

Zeus ‌ Zeus ‌
  • 3 سال پیش

کار با ماژول تمام عیار mc60 – قسمت دوم – راه اندازی OpenCPU

در قسمت اول به یکسری اطلاعات کلی ماژول mc60 پرداختیم، با نرم افزار QNavigator کار کردیم و یک هدربرد هم برای کار...

Mahdi.h   Mahdi.h  
  • 3 سال پیش

مسابقه چهارم: کدام حلقه سریع‌تر است؟

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

Zeus ‌ Zeus ‌
  • 1 سال پیش
سیـــســـوگ

مرجع متن باز آموزش الکترونیک