ПредишенСледващото

Имайте предвид, че в режим SPI се поддържа само чете режим / запис команда в един или няколко блока (в режим на MMC поддържа последователно четене режим / запис). Размерът на блока за четене / писане може да бъде оразмерен за карта с памет и размера на сектора на 1 байт. Подкрепа частични операции четене / запис на блок данни, съхранявани в картата за регистър CSD памет.
Само не забравяйте да се говори за регистъра, който държи стандартна карта с памет ММС (SD). Тези регистри малко повече от това ще запиша, но тези, които аз не посочват или не са засегнати, или не са налични в режим SPI. Основните регистри, които са от интерес за нас, са следните:

- CID (идентификация данни Card): съдържа данни за лична карта (сериен номер, производител, дата на производство и т.н.)
- CSD (карти, специфични данни): съдържа всички видове информация от картата с памет (картата с памет от размера на сектора да се използва в режим на четене / запис).
- OCR (Работни условия регистър): съдържа карта с памет, захранване, мощност вид памет, състоянието на процеса на инициализиране карта.

Мнозина може би сте забелязали, че в таблицата липсват някои команди. Както казах по-рано, в режим SPI достъпно някои функции, които са налични в режим на MMC. Поради това някои отбори просто не са налични. Както таблица показва, че всички команди в "Resp» настоящото съкращението R1 (2, 3, 7, и т.н.). Това е така наречената реакция картичка за изпращане на отбора си. Малък например обмен на информация с картата памет за илюстрация описано по-горе.

Нека разгледаме този пример. Виждаме, че ние изпращаме карта (DataIn ред) Някои отбори, като това, картата след определен период от време, ще даде отговор (DataOut линия). Размерът на реакцията зависи от команди за изпращане и разполага със собствен формат. Тук е форматът на отговорите, които могат да получат от карта с памет.

Mmc (SD) и AVR

Mmc (SD) и AVR

Mmc (SD) и AVR

Сега докоснете командите си за картата с памет. маса на отбора показва, че всеки отбор има свой собствен индекс. Тази стойност се използва за получаване на истинската стойност на отбора, който искате да изпратите на картата с памет. Общ изглед команда е показано по-долу (в режим на команден SPI е с дължина 6 байта):

Трябва да се отбележи, че в протокола за MMC прекрати всякаква комуникация поле CRC, което е необходимо. Що се отнася до режима SPI сесия, когато в този режим, CRC проверка е забранено. Изключения са отбор CMD0 и CMD8, тъй като те са изпратени на картата, която все още е в режим MMC, така че КРС областта за тези отбори трябва да е вярно. От CMD0 изпратен веднъж и всичките шест байта на екипа са предварително известни и не се променят, а след това поле CRC за всеки отбор, ние ще изпратим на КРС за отбор CMD0 (тя е равна на 0x95). Що се отнася до CMD8, полето КРС, не е постоянно и зависи от минали параметри. Бих искала да отбележа, че полевите проверките на КРС могат да се активират в режим SPI. Това се прави с помощта на съответната команда (CMD59).
Малко разбиране на теорията, погледнете на процеса на инициализиране карта. Ще се опитам да го представя под формата на блок схема. Ето какво излезе vymutit datasheet'a (излагайки само същността, минус някои точки ще рисуват след графиката):

Mmc (SD) и AVR

Е, някои биха казали, че не разбира защо боядисани, а вие го оправи там;) Но това не е толкова лошо. Първото нещо, което трябва да бъде обяснено в тази схема е, че картата, като че ли, че не иска да бъде различен (така вероятно те се наричат ​​по различен начин). И в тази схема, можем да видим, че техните не по-малко, а най-много 4: MMC, SD версии стандартен капацитет 1.x, стандартен капацитет SD 2.x и SD карта версия 2.x High Capacity (SD карта за разширяване на капацитета или SDHC). Всичко друго, но всички те изискват различно инициализация и е най-обидно. По принцип там е обичаен начин за инициализиране на всички от тях, с изключение SDHC, но това не е правилно, тъй като работата със стандартен капацитет SD карта версия 2.x и MMC карти с еднакви карти правилно (за разлика в структурите CID и CSD). Разбира се, че е възможно да се изгради един алгоритъм за всяка карта поотделно, но все пак ще универсален начин (и най-трудно на пръв поглед).
От това следва, от структурата на следващото планирано начин на работа (аз ще посоча основните точки, които трябва да се спазват, но те не са показани в тази схема). Ние установихме, че четеца на карти в контакта вмъкнете някои боклук. Ние, от своя страна, направете следното: Нанесете мощност в диапазона от 2.7-3.6 V, което очакваме

1ms (аз не знам точно колко, но да ustakanilos на мощност). SPI е конфигуриран както се очаква (Мисля, че всеки може да го направи) и карти изход _CS памет пуснати в логическа "1". След това ние трябва да се прилага най-малко 74-тактови импулси на SCLK SPI линия. Правейки всичко това, ние поставяме логическа "0" на изхода _CS картата с памет и вижте отбор CMD0. маса Team ние виждаме, че отговорът на CMD0 е R1, структурата на което ние знаем. Малко по-назад от мисълта, и Аз ще се обърне внимание на факта, че всички отговори съдържа първия байт на R1, 7-ми бит, който е винаги 0. По този начин, ние можем да се прави разлика между отговорите от ходене на Мишо линия на байта 0xFF. Така че, като R1, проверете бита «В състояние на покой» за да се изравни "1". Ако е така, тогава картата е във фазата на инициализация. И сега дойде първата стъпка за определяне на вида на картата. Подаване на команда CMD8, което показва, че поддържа карта MC напрежение към него и го пита избраната карта за това дали може да работи в даден диапазон от напрежения, изчакайте, докато отговор R7. Както може да се види от блок схема, карти с памет и MMC стандарт и SD версии 1.x те не поддържат тази команда и, съответно, в отговора си ще съдържа малко на «незаконна заповед». Ако по-рано каза, е вярно, инсталираната карта или MMC или SD версия 1.x. Сега е време да се разпознава кой от двата вида карти вкарани в слота за карти. За да направите това, ние изпращаме карта с памет команда ACMD41, който инициира картите на процеса на инициализация. Тази команда се изпраща по веригата, или да постигнете това наклони таймер, който проверява отговор на тази команда. Във всеки случай, MMC карта не поддържа ACMD41 и да се върнете на «незаконна командата» в своя отговор. В този случай има поставена карта и MMC, необходима за неговото инициализиране команда CMD1 (също изпраща в една линия, докато в отговор на това не е равен на 0). След получаване на отговор на CMD1 равна на 0x00 MMC карта е готов за употреба. Ако отговорът на ACMD41 не съдържа набор бита (т.е. равен на 0x00), след това SD карта версия 1.x и готови да работят с. Сега обратно точно над и да приемем, че в отговор на команда не съдържаше CMD8 ухапа «незаконна заповед», т.е. имаме стандартен капацитет на паметта формат карти SD версия 2.x (SDSC 2.x) или SDHC. Следващата стъпка в този случай има екип ACMD41 изпращане на параметър показателно за картата с памет, ако нашата устройство поддържа SDHC карти с памет. Независимо от това дали има подкрепа SDHC или не, ние многократно изпращане на тази команда карта е толкова дълго, колкото (картата) е завършил процеса на инициализиране. Когато отговор от ACMD41 ще бъде равна на 0x00, картата с памет се инициализира и готов за работа. Но, за да се разбере какво е на картата, ние ще го команда CMD58 изпратите. Отговорът на тази команда е R3, което от своя страна се състои от регистър OCR. След анализ на монтаж бита OCR CSS може да се определи вида на картата: CCS == 1 - картата SDHC или SDXC, CCS == 0 - карта SDSC. Не е неоснователен, ще дам моя сайт код памет инициализация карта:

Послепис Работещи малко по-напред, няколко снимки на екрани на четене на информация от картата с памет:

Mmc (SD) и AVR

Подкрепете проекта - споделете линка, благодаря!