اگر شما هم دانشجوی الکترونیک باشید حتما یک پروژه در زمینه روش کار با mmc یا همان کارتهای حافظه sd، توسط میکروکنترلر را باید انجام داده باشید. معمولاً این پروژه در ابتدای کار، یکی از سخت ترین کارهای برنامهنویسان الکترونیک است به ویژه برای دانشجویان، در ادامه این مقاله شما را با نحوه راه اندازی mmc از طریق میکروکنترلر آشنا میکنیم.
کارت حافظه mmc و ssd
در ابتدا حافظههای mmc، با داشتن ابعاد کوچک و تعداد پایههای کم از یک بیت برای انتقال اطلاعات استفاده میکردند اما با گذشت زمان و با توجه به نیاز جامعه این حافظهها به مرور برای انتقال دادهها به سرعت 832 مگابایت بر ثانیه رسیدند. اما باز هم جوابگوی نیاز کاربران و پیشرفت تکنولوژی روز نبود.
از سال 2000، دیسکهای sd روانه بازار شدند که نه تنها با نسلهای قبلی سازگاری داشتند بلکه قابلیت انتقال اطلاعات در آنها تا سرعت ۵ گیگابایت بر ثانیه نیز افزایش پیدا کرد. قبل از اینکه بخواهیم این کارتهای حافظه را به مداری وصل کنیم باید از تعداد پایههای آنها اطلاعات داشته باشیم.
در واقع تولید کارتهای حافظه متنوع، سبب متفاوت بودن پایهها در آنها شده است. برای شروع باید راجع به هر یک اطلاعات داشته باشید. ما در تصاویر پایین تعداد پایههای حافظه های مختلف را برایتان مشخص کردیم.
ویژگی کارت حافظه MMC
کارت حافظه MMC طبق تصاویر دارای هفت پایه و کارت حافظه SD دارای نه پایه میباشد. پروتکلی که در هر دو نوع این حافظهها مشترک بوده SPI است. معمولا این پروتکل در تمامی کارتهای حافظه به صورت سخت افزاری وجود دارد. در این غیر این صورت،پیادهسازی آن راحت است.
برای طراحی مدار بهتر است از پروتکل spi استفاده کنیم تا برای برقراری ارتباط با کارت حافظه، نه تنها از هر دو این حافظهها پشتیبانی کند بلکه بر روی هر میکروکنترلری قابل اجرا باشد. توجه داشته باشید که در صورت پشتیبانی میکروکنترلر شما، رابط SDIO از سرعت بالاتری برخوردار است.
- ولتاژ کاری هر کارت حافظه متفاوت بوده. مقدار دقیق آن از روی رجیستر OCR، قابل خواندن است.
- معمولاً از ولتاژ 3.0 یا 3.3 برای راه اندازی و شروع کار استفاده میشود.
- نباید از ولتاژ ۵ ولت برای کارتهای حافظه، چه برای تغذیه وچه برای IO استفاده کرد.
- برای برقراری ارتباط با کارت حافظه، رابط SPI را در حالت 0 یا MODE0 قرار دهید.
- از داشتن مقاومت پول آپ یا همان مقاومت Rpu، اطمینان حاصل کنید. چرا که عدم وجود آن سبب خطا در کارکرد دستگاه شما میشود.
روش کار با mmc/sd
شکل بالا نشان دهنده حداقل سخت افزار قابل استفاده برای اتصال میکروکنترلر به کارت حافظه است.
- در پروتکل SPI، دادهها به صورت سریال و بایت به بایت انتقال پیدا کرده و جهت خط های دیتا ثابت است.
- دستوراتی که از میکروکنترلر به کارت حافظه ارسال میشوند دارای قالب ثابتی بوده و ۶ بایت را شامل میشوند. این شش بایت عبارتند از؛
بایت اول: نوع دستور، بایت دو تا پنج: پارامترهای مورد استفاده دستور، بایت شش: CRC برای اعتبار سنجی. - اگر پایه DO یک باشد یعنی آماده دریافت دستور است پس از دریافت و پردازش دستور، کارت حافظه آماده ارسال جواب میشود.
- در پروتکل SPI، همواره ارتباط از طریق مستر مدیریت میشود و میکروکنترلر مدام با فرستادن 0xFF، بودن و یا نبودن جواب را چک میکند.
- کارت حافظه جواب مورد نظر را باید تا مقدار Ncr آماده کند. مقدار NCR با توجه به نوع کارت حافظه متفاوت است، کارتهای حافظه SD از صفر تا هشت و MMC، از یک تا هشت متغیر هستند.
- اگر جواب آماده باشد کارت حافظه مقدار DO را در یک سیکل کلاک صفر میکند و با فرستادن FLAG مربوطه، آماده بودن خود را برای ارسال جواب اعلام میکند.
- قبل از ارسال هر دستوری باید خط CS، از حالت یک به صفر تغییر کند تا جواب دستور مورد نظر توسط کارت حافظه ارسال شود.
- در مود SPI، اهمیتی به بایت CRC داده نمیشود.
باید بدانید!
- دو بیت Command Index، یا همان ارسال دستور، ثابت بوده و برای انتخاب دستور، شش بیت باقی مانده است که ۶۴ حالت یا دستور مجزا را تشکیل میدهد.
- در عکس بالا شماره Index هر یک از دستورها مقابل آن نوشته است برای مثال CMD25، دستور شماره ۲۵ بوده که ۴ بایت آدرس را با نام پارامتر دریافت کرده و در قالب R1، جواب را ارسال میکند.
- کارت حافظه پاسخهای خود را در قالبهای R1,R2,R3,R7 ارسال میکند و معمولاً جواب بیشتر دستورات، در قالب R1 و به صورت یک بایت ارسال میشوند.
- در قالب R1، با ارزش ترین بیت، صفر بوده و دریافت عدد صفر نشان دهنده موفق بودن اجرای دستور است.
- قالب های R3 و R7، دارای یک بیت R1 و ۳۲ بیت دیتای مربوطه هستند و فقط برای دستورات CMD58 و CMD8، استفاده میشوند. عکس زیر ترتیب باقی بیتها را نشان میدهد.