ارتباط میکروکنترلر با حافظه هاي فلش (sd،mmc) ; (قسمت چهارم)
اﯾﻦ ﻧﻮع ﺣﺎﻓﻈﻪﻫﺎ ﮐﻪ از ﻧﻮع FLASH ﻣﯽﺑﺎﺷﻨﺪ و ﺑﻪ ﺻﻮرت ﻣﺮﺳﻮم در دﺳﺘﮕﺎهﻫﺎي ﻗﺎﺑﻞ ﺣﻤﻠﯽ ﻣﺎﻧﻨﺪ  MP3 PLAYERﻫﺎ ،COOL DISK ﻫﺎ و ﻣﻮﺑﺎﯾﻞﻫﺎ اﺳﺘﻔﺎده ﻣﯽﺷﻮﻧﺪ.
از ﺧﺼﻮﺻﯿﺎت ﺑﺎرز آن ﻣﯽﺗﻮان ﺑﻪ ﺳﺮﻋﺖ ﺑﺎﻻ و ﺣﺠﻢ ﺑﺴﯿﺎر ﺑﺎﻻي آن اﺷﺎره ﮐﺮد. اﯾﻦ ﺣﺠﻢ ﺑﺎﻻ ﮐﻪ از ﭼﻨﺪﯾﻦﻣﮕﺎﺑﺎﯾﺖ ﺗﺎ ﭼﻨﺪﯾﻦ ﮔﯿﮕﺎﺑﺎﯾﺖ ﻣﯽﺑﺎﺷﺪ ﺑﻪ ﻫﻤﺎن ﻗﺪر ﮐﻪ ﺑﺮاي ﺗﻮﻟﯿﺪ ﮐﻨﻨﺪﮔﺎن اﯾﻦ دﺳﺘﮕﺎهﻫﺎ وﺳﻮﺳﻪ اﻧﮕﯿﺰ اﺳﺖ ﮐﻪﺑﺮاي ﻣﻬﻨﺪﺳﺎن اﻟﮑﺘﺮوﻧﯿﮏ. ﺷﺎﯾﺪ دﻟﯿﻞﻋﻤﺪه اﯾﻦ ﺗﻮﺟﻪ از ﻃﺮف ﻣﻬﻨﺪﺳﺎن اﻟﮑﺘﺮوﻧﯿﮏ ﻓﻀﺎي زﯾﺎدي ﺑﺎﺷﺪ ﮐﻪ در ﻫﯿﭻ ﻣﺪار ﻣﯿﮑﺮوﮐﻨﺘﺮﻟﺮي ﺑﻪ آندﺳﺘﺮﺳﯽ ﻧﺪارﻧﺪ.
اﻟﺒﺘﻪ ﻗﻄﻌﺎت ﻣﺨﺘﻠﻔﯽ ﺑﺮاي رﻓﻊ اﯾﻦ ﻧﯿﺎز ﻣﺎﻧﻨﺪ ﺧﺎﻧواده  AT45DBXXXاز ﺷﺮﮐﺖ اﺗﻤﻞ ﺗﻮﻟﯿﺪﺷﺪ ﮐﻪ ﻧﻮﻋﯽ  FLASH ﺑﻮده وﻟﯽ از ﻟﺤﺎظ ﻇﺮﻓﯿﺖ ﻫﺮﮔﺰ ﺑﻪ ﮔﺮد  SDﯾﺎ  MMCﻧﺨﻮاﻫﻨﺪ رﺳﯿﺪ. وﯾﮋﮔﯽ ﺑﺎرز دﯾﮕﺮ اﯾﻦ ﺣﺎﻓﻈﻪ ﻗﺎﺑﻠﯿﺖ ﭘﺸﺘﯿﺒﺎﻧﯽ از اﺳﺘﺎﻧﺪاردﻫﺎي  FATاﺳﺖ ﮐﻪ ﺑﺎ اﯾﻦ وﯾﮋﮔﯽاﻣﮑﺎن دﺳﺘﺮﺳﯽ ﺑﻪ دادهﻫﺎ در ﮐﺎﻣﭙﯿﻮﺗﺮ ﺑﻮﺟﻮد ﻣﯽآﯾﺪ.
 
ﺑﺮرﺳﯽ مموري ﮐﺎرت از دﯾﺪ ﺳﺨﺖ افزاري :
SD و  MMCﺗﻨﻬﺎ از ﻧﻈﺮ ﺳﺮﻋﺖ و  ﺣﺠﻢ ﺑﺎﻓﺮ ﺑﺎ ﻫﻢ ﺗﻔﺎوت دارﻧﺪ وﻟﯽ از ﻧﻈﺮ ﻧﻮع ﻓﻀﺎ و آدرس دﻫﯽﻫﺎ و... ﺑﺎ ﻫﻢ ﻓﺮﻗﯽ ﻧﺪارﻧﺪ. ﭘﺮوﺗﮑﻞ ارﺗﺒﺎﻃﯽ ﻣﻤﻮري ﺑﻪ دو ﺷﮑﻞ  IDE MODEﯾﺎ ارﺗﺒﺎط ﻣﻮازي ﭼﻬﺎرﺑﯿﺘﯽ و ﻧﻮع  SPI MODE ﯾﺎ ارﺗﺒﺎط ﺳﺮﯾﺎل ﺳﻨﮑﺮون ﻣﯽﺑﺎﺷﺪ ﮐﻪ ﻣﺘﺎﺳﻔﺎﻧﻪ ﻣﻄﺎﻟﺐ زﯾﺎدي درﺑﺎره ﻧﻮع اول ﻣﻮﺟﻮد ﻧﯿﺴﺖ اﻣﺎ ﻧﻮع دوم ارﺗﺒﺎط ﻣﺮﺳﻮﻣﯽ در ﻣﯿﮑﺮوﮐﻨﺘﺮﻟﺮﻫﺎﺳﺖ.
اﯾﻦ ﭘﺮوﺗﮑﻞ ارﺗﺒﺎﻃﯽ ﺑﻪ ﻃﻮر ﻣﻌﻤﻮل داراي ﺳﻪ ﺧﻂ اﺻﻠﯽ ارﺗﺒﺎﻃﯽ ﻣﯽﺑﺎﺷﺪ ﮐﻪ ﯾﮑﯽ از اﯾﻦ ﺳﻪ ﺧﻂ وﻇﯿﻔﻪ ارﺳﺎل داده، دﯾﮕﺮي درﯾﺎﻓﺖ داده و ﺧﻂ ﺳﻮم ﺣﺎﻣﻞ ﮐﻼك ﻣﯽﺑﺎﺷﺪ.
 در اﯾﻦارﺗﺒﺎط ﻃﺮﻓﯿﻦ در دو ﺣﺎﻟﺖ ﻗﺮار ﻣﯽﮔﯿﺮﻧﺪ ﯾﮑﯽ  MASTERﮐﻪ ﺗﻮﻟﯿﺪ ﮐﻨﻨﺪه ﭘﺎﻟﺲ و ﺣﺎﻟﺖ دوم
 SLAVEﮐﻪ ﻫﯿﭽﮕﻮﻧﻪ اﻋﻤﺎﻟﯽ روي ﮐﻼك اﻧﺠﺎم ﻧﻤﯽدﻫﺪ و ﻓﻘﻂ درﯾﺎﻓﺖ ﮐﻨﻨﺪه آن اﺳﺖ. 
در اﯾﻦ ارﺗﺒﺎط ﯾﮏ ﺧﻂ ﻧﯿﺰ ﺣﺎﻣﻞ ﺳﯿﮕﻨﺎل  SSﯾﺎ  SLAVE SELECTﻣﯽﺑﺎﺷﺪ ﮐﻪ ﺑﺎ ﻓﻌﺎل ﺷﺪن آن ﺳﯿﺴﺘﻢ درﯾﺎﻓﺖ ﮐﻨﻨﺪه اﯾﻦ ﺳﯿﮕﻨﺎل ﺑﻪ ﻣﺪ  SLAVEﻣﯽرود اﻣﺎ اﯾﻦ ﺧﻂ ﺑﻪ ﺻﻮرت  OPTIONALﯾﺎ اﺧﺘﯿﺎري
اﺳﺖ و در اﮐﺜﺮ ﻣﻮارد ﻧﯿﺎزي ﺑﻪ آن ﻧﯿﺴﺖ. در ارﺗﺒﺎط ﺑﺎ ﻣﻤﻮري ﮐﺎرتﻫﺎ اﯾﻦ ﺧﻂ ﺑﻪ ﻧﻮﻋﯽ ﺑﻌﻨﻮان  CSﯾﺎ
CHIP SELECT ﺑﻪ ﮐﺎر ﻣﯽرود.
در ﺷﮑﻞ زﯾﺮ ﯾﮏ ﻧﻤﻮدار ﺳﯿﮕﻨﺎﻟﯽ اﯾﻦ ارﺗﺒﺎط را ﻣﺸﺎﻫﺪه ﻣﯽﮐﻨﯿﺪ:
 
شکل زیر ساختار درونی MMC را نشان میدهدکه از بلوکهایی جداگانه تشکیل شده است.همه این بلوکها به وسیله یک اسیلاتور داخلی کلاک می خورند.چون MMC دارای اوسیلاتور داخلی با فرکانس مشخص میباشد بنا براین برای انتقال داده توسط خطوط ( CMD دستور) و ( DAT داده) باید فرکانس اسیلاتور داخلی با فرکانس خط( CLK کلاک) که توسط( Host کنترلر) بوجود میاید سنکرون (همزمان) شود.این کار توسط واحد Interface driver انجام میشود.
برای بزرگنمایی روی عکس کلیک کنید.
MMc ها به وسیله سه پین )خط داده ( CMD,DAT.CLK کنترل میشوند که هر یک از این خطوط داده کار خاصی را در طول انتقال داده انجام میدهند.
همچنین MMCها دارای چهار رجیستر داخلی هستند که از این رجیستر ها برای شناسایی و یک سری از خصوصیات MMC استفاده میشود.این رجیستر ها عبارنتد از:
OCR یا(Operation Condition Register) :
این رجیستر رنج ولتاژهایی را که توسط کارت پشتیبانی میشود نشان میدهد.
CID یا (Card Identification) :
این رجیستر , رجیستر شناسایی کارت میباشد.
CSD یا (Card specific):
این رجیستر , رجیستر تعیین داده میباشد.
RCA یا  (Rela Card Address) :  
رجیستر تخصیص آدرس برای انتقال داده ها بین Host و mmc میباشد.
MMC برای انتقال داده از دو پروتکل پشتبانی می کند یا به عبارت دیگر به دو روش mode می توان داده ها را بین MMC و Host تبادل کرد که عبارتند از:
1. Multimedia Mode یا MMC Mode
2. Serial Peripheral Interface یا SPI Mode
برای بزرگنمایی روی عکس کلیک کنید.
در این مد برای انتقال داده از کمترین خط داده استفاده شده است که عبارتند از :
CLK :با هر دوره تناوب از سیگنال ورودی به این پین یک بیت داده بر روی خط DAT یا CMD جا به جا میشود.فرکانس این خط میتواند از صفر تا ماکزیمم فرکانس ممکنهباشد و این فرکانس میتواند در حین انتقال داده تغيیر کند
CMD : این خط یک خط داده دو طرفه است که برای فعال کردن MMC و دستور انتقال داده و پاسخ مورد استفاده قرار میگیرد.این خط به دو روش عمل میکند.
Open Drain Mode : برای فعال کردن MMC
Push Pull Mode : برای انتقال سریع داده دستور همیشه توسطHost يا مستر ارسال مي شود اما پاسخ توسط MMC فرستاده میشود.
DAT : این خط یک خط داده دو طرفه است و برای انتقال داده که باید بروی حافظه ذخیره یا از حافظه خوانده شودمورد استفاده قرار میگیرد.
ﻓﺮﮐﺎﻧﺲ ﮐﺎري ﺣﺎﻓﻈﻪ در ﻣﺪ  SPIﺗﺎ 50 ﻣﮕﺎﻫﺮﺗﺰ ﺑﻮده و در اﯾﻦ ﭘﺮوژه ﮐﻪ ﺑﺎ ﻣﯿﮑﺮوﮐﻨﺘﺮﻟﺮ  AVRاﻧﺠﺎم ﺷﺪه ﻓﺮﮐﺎﻧﺲ ﮐﺎري ﺣﺪاﮐﺜﺮ 16 ﻣﮕﺎﻫﺮﺗﺰ ﻣﯽﺑﺎﺷﺪ.
ﻧﮑﺘﻪ: ﺑﺮاي ارﺳﺎل ﻫﺮ داده ﯾﺎ دﺳﺘﻮر ﺑﻪ ﻣﻤﻮري ﺑﺎﯾﺪ اﺑﺘﺪا  CSﻓﻌﺎل ﺷﻮد ﺑﺠﺰ ﻣﻮاردي ﮐﻪ ذﮐﺮ ﺧﻮاﻫﺪ ﺷﺪ.
ﻧﮑﺘﻪ: اﯾﻦ ﻧﻮع ﺣﺎﻓﻈﻪ ﺷﺎﻣﻞ ﭼﻨﺪﯾﻦ ﺳﮑﺘﻮر اﺳﺖ ﮐﻪ ﻫﻤﻪ ﺳﮑﺘﻮرﻫﺎ در ﻫﻤﻪ اﻧﻮاع ﻣﻤﻮري ﮐﺎرت512 ﺑﺎﯾﺖ اﺳﺖ.
1. رﯾﺴﺖ:
ﺑﺮاي راه اﻧﺪازي ﺣﺎﻓﻈﻪ اﺑﺘﺪا ﺑﺎﯾﺪ از ﻧﻈﺮ ﺳﺨﺖاﻓﺰاري رﯾﺴﺖ ﺷﻮد. ﺑﺮاي اﯾﻨﮑﺎر ﻣﺨﺎﻟﻒ ﻫﻤﻪ دﺳﺘﻮرﻫﺎ ﺑﺎﯾﺪ  CSﻏﯿﺮ ﻓﻌﺎل ﺷﻮد ﺳﭙﺲ ده ﺑﺎر ﻋﺪد  0XFFاز ﻃﺮﯾﻖ  SPIﺑﻪ ﻣﻤﻮري ارﺳﺎل ﺷﻮد. ﺑﻼﻓﺎﺻﻠﻪ ﻋﺪد 0X40  ﮐﻪ دﺳﺘﻮر  RESETﻣﯽﺑﺎﺷﺪ ارﺳﺎل و ﭼﻬﺎر ﺑﺎر ﻋﺪد 0X00 ارﺳﺎل ﺷﻮد. در اداﻣﻪ ﻋﺪد 0X95 ارﺳﺎل ﺷﻮد و ﺗﺎ زﻣﺎﻧﯿﮑﻪ ﻋﺪد 0X01 از ﻃﺮف ﻣﻤﻮري درﯾﺎﻓﺖ ﻧﺸﺪ ﺑﻪ ﻣﻤﻮري ﻋﺪد  0XFFارﺳﺎل ﺷﻮد.
2.مقدار دهي اوليه  :INITIALIZATION MEMORY
ﺑﺮاي  INITﮐﺮدن ﻣﻤﻮري اﺑﺘﺪا  CSرا ﻓﻌﺎل ﮐﺮده و ﻋﺪد 0X41 را ارﺳﺎل ﻣﯽﮐﻨﯿﻢ و ﺑﻼﻓﺎﺻﻠﻪ ﭼﻬﺎر ﺑﺎر ﺻﻔﺮ را ارﺳﺎل ﮐﺮده و ﺗﺎ زﻣﺎﻧﯿﮑﻪ از ﻃﺮف ﻣﻤﻮري ﻋﺪد 0X00 درﯾﺎﻓﺖ ﻧﺸﺪ ﺑﻪ ﻣﻤﻮري ﻋﺪد  0XFFرا ارﺳﺎل ﻣﯽﮐﻨﯿﻢ.
3. ﺧﻮاﻧﺪن ﯾﮏ ﺳﮑﺘﻮر از ﻣﻤﻮري: 
ﺑﻌﺪ از ﻓﻌﺎل ﺷﺪن  CSو ﻋﺪد 0X15 را ﺑﻪ آن ارﺳﺎل ﻣﯽﮐﻨﯿﻢ و ﺑﻪ ﺻﻮرت  BIG INDIANدو ﺑﺮاﺑﺮ آدرس ﻣﻮرد ﻧﻈﺮ را ﺑﻪ ﻣﻤﻮري ارﺳﺎل ﮐﺮده و ﯾﮏ ﺑﺎر ﻋﺪد 0X00 را ارﺳﺎل ﮐﺮده و ﺗﺎ زﻣﺎﻧﯿﮑﻪ ﻋﺪد  0XFEرا درﯾﺎﻓﺖ ﻧﮑﺮدﯾﻢ ﺑﻪ ﻣﻤﻮري ﻋﺪد 0XFFرا ارﺳﺎل ﻣﯽﮐﻨﯿﻢ. در اﯾﻦ ﻟﺤﻈﻪ ﻣﻤﻮري آﻣﺎده ارﺳﺎل دادهﻫﺎي ﻣﻮﺟﻮد در ﺳﮑﺘﻮر ﻣﻮرد ﻧﻈﺮ ﺑﻮده و ﺑﺎ ﻫﺮ ﺑﺎر ارﺳﺎل  0XFFﯾﮑﯽ از 512 ﺑﺎﯾﺖ را ارﺳﺎل ﻣﯽﮐﻨﺪ.
ﺑﺮاي ﻧﻮﺷﺘﻦ در ﯾﮏ ﺳﮑﺘﻮر اﺑﺘﺪا ﻋﺪد0X58 ارﺳﺎل ﺷﺪه ﺳﭙﺲ دو  ﺑﺮاﺑﺮ آدرس ﺳﮑﺘﻮر ﻣﻮرد ﻧﻈﺮ ارﺳﺎل و ﺳﻪ ﺑﺎر 0XFF و يك بار 0XFE ارسال شده در اين لحظه مي توان 512 بايت داده را ارسال كرد بعد از اين داده ها دو بار 0XFF ارسال مي شود و مي توان CS را غير فعال كرد. البته در اين پروژه تنها خواندن اطلاعات نياز است.
[1] . Secure Digital

