Розрахункова СЗіВІ / Розрахункова робота / MMC_SD_FAT16 / Методичка_5
.pdf
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ПОБУДОВА СИСТЕМИ ЗБЕРІГАННЯ ІНФОРМАЦІЇ НА MMC/SD FLASH-КАРТАХ ПАМ’ЯТІ
З ПІДТРИМКОЮ ФАЙЛОВОЇ СИСТЕМИ FAT16
Методичні вказівки до лабораторної роботи № 5
з курсу “ Системи запису та відтворення інформації ” для студентів базового напряму 6.170102 “Системи технічного захисту інформації”
Затверджено
на засiданнi кафедри "Захист інформації" Протокол № вiд ..2009 p.
Львів 2009
Побудова системи зберігання інформації наMMC/SD Flash-картах пам’яті з підтримкою файлової системи FAT16: Методичні вказівки до лабораторної роботи № 5 з курсу ”Системи запису та відтворення інформації” для студентів базового напряму"6.170102 “Системи технічного захисту інформації” / Укл. Я. Р. Совин - Львiв: Національний університет "Львівська політехніка", 2009. – 21 с.
Укладачі: |
Я. Р. Совин, к.т.н., доцент |
Вiдповiдальний за випуск:
Рецензент:
1
Мета роботи – набути вміння організовувати файловий ввід-вивід даних наFlash-носіях інформації в портативних аудіо/відеопристроях.
1. ТЕОРЕТИЧНІ ВІДОМОСТІ
Завдяки високим параметрам модулі MultiMedia Card (MMC) та Secure Digital (SD) Card
ідеально відповідають вимогам, що пред’являються до накопичувачів даних, орієнтованих на застосування в мобільних пристроях запису і відтворення інформації різного призначення.
1.1. MULTIMEDIA CARD
Всередині карти пам’яті (як MMC так і SD) міститься NAND-флеш масив і вбудований контролер, що виконує функції управління та обміну даними з зовнішніми пристроями (рис. 1).
Рис. 1. |
В даний час випускаються ММС-карти пам’яті об’ємом від32 до 1024 Мбайт. Обмін даними здійснюється в послідовному форматі. Для підключення картка має всього сім металізованих контактів. Напруга живлення карти(1.8...3.6)/(2.7...3.6) В. Передача даних проводиться з тактовою частотою до 20 МГц. Габаритні розміри ММС-карт 32.0x24.0x1.4 мм.
Архітектура ММС-карт приведена на рис. 2. Крім масиву NAND-флеш пам’яті та внутрішнього контролера карти також містять спеціальні регістри, які зберігають поточний стан та налаштування карти пам’яті.
Power on detection |
Рис. 2.
Для передачі команд використовується двонаправлена лінія вводу/виводуCMD/DI, для обміну даними – DAT0/DO. Тактування даних здійснюється сигналомCLK, який формується хост-процесором. Контролер ММС-карти окрім стандартного ММС-протоколу підтримує також прийом/передачу даних з використаннямSPI-інтерфейсу. Перемикання в цей режим обміну
2
даними виконується на програмному рівні.
Недоліки: порівняно невелика швидкість обміну даними.
Переваги: мініатюрні розміри, низький рівень енергоспоживання, висока надійність, порівняно невисока вартість.
1.2.SECURE DIGITAL CARD
Упорівнянні зMultiMedia Cards в картах Secure Digital число контактів збільшене до дев’яти (рис. 3). Контакти виконані у вигляді металізованих площадок. На відміну від ММСкарт інформація може передаватися не по одній лінії даних, а одночасно по декількох (всього до чотирьох DAT0-DAT3), що дозволяє збільшити швидкість обміну. Передача даних виконується
зтактовою частотою до25 МГц. Габаритні розміри 24.0x32.0x2.1 мм, маса 2 г. Струм споживання не перевищує 100 мА.
Рис. 3 |
Переваги: низький рівень енергоспоживання, невеликі розміри, порівняно великий об'єм пам'яті і висока швидкість запису/читання, сумісність з ММС-картами(у слот дляSD-карти можна встановлювати картку ММС, але не навпаки).
Окрім SD-карт випускаються також miniSD-карти, що мають габаритні розміри всього 21.5x20.0x1.4 мм. Об’єм пам’яті карт цього типу становить від64 до 512 Мбайт, максимальна швидкість читання 7.8, запису – 5.5 Мбайт/с.
MiniSD-карти мають одинадцять контактів. Зважаючи на різну ширину карт, неможливо безпосередньо встановити картуminiSD в слот, призначений для SD-карт, а лише з використанням спеціальних адаптерів.
1.3. Інтерфейс MMC/SD-карт пам’яті
Розташування контактних площадок SD-карти пам’яті представлено на рис. 4.
3
Рис. 4. |
Номер |
Назва |
Призначення |
|
|
Призначення |
|
|
||
виводу |
(SD Mode) |
|
|
(SPI Mode) |
|
|
|||
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
– Chip Select. Лінія вибору |
карти. Операції |
|
1 |
DAT3/ |
|
|
Лінія даних 3 |
CS |
||||
CS |
|
обміну даними з картою відбуваються при CS = 0. |
|||||||
|
|
|
|
|
Вхід. |
|
|
||
2 |
CMD/DI |
Лінія команд |
Master Out Slave In (MOSI). Лінія |
прийому |
(Data |
||||
Input) даних від хост-контролера. Вхід. |
|
||||||||
|
|
|
|
|
|
||||
3 |
GND |
Земля |
Земля. |
|
|
||||
4 |
VCC |
Живлення |
Живлення. |
|
|
||||
5 |
CLK |
Тактові імпульси |
|
Тактові імпульси. Вхід. |
|
|
|||
6 |
GND |
Земля |
Земля. |
|
|
||||
7 |
DAT0/DO |
Лінія даних 0 |
Master In Slave Out (MISO). Лінія |
передачі |
(Data |
||||
Output) даних в хост-контролер. Вихід. |
|
||||||||
|
|
|
|
|
|
||||
8 |
DAT1/IRQ |
Лінія даних 1 |
NC (Not Connected) – не використовується. Вхід. |
||||||
9 |
DAT2/NC |
Лінія даних 2 |
NC (Not Connected) – не використовується. Вхід. |
||||||
|
|
|
|
|
|
|
|
|
|
SD-карти пам’яті є сумісні з MMC-картами в режимі SPI (рис. 5).
|
|
|
|
Рис. 5. |
|||
|
|
|
|
|
|
|
|
Номер |
Відповідність між виводами MMC- і SD-карт в режимі SPI |
||||||
виводу |
|
MMC-карта |
|
SD-карта |
|||
1 |
|
|
(Chip Select) |
|
DAT3/ |
|
(Chip Select) |
CS |
CS |
||||||
|
|
|
|
4 |
|
|
|
2 |
CMD/DI (Command/ Data Input) |
CMD/DI (Command/ Data Input) |
3 |
GND |
GND |
4 |
VCC |
VCC |
5 |
CLK (Clock) |
CLK (Clock) |
6 |
GND |
GND |
7 |
DAT0/DO (Data Output) |
DAT0/DO (Data Output) |
8 |
NA |
DAT1 |
9 |
NA |
DAT2 |
Пам’ять MMC/SD-карт розбита на сектори розміром 512 байт (переважно), подібно як це зроблено у жорстких дисках (рис. 6). Запис і читання здійснюється також секторами.
Sector № 00
Sector № 01
Sector № 02
Sector № 31 998
Sector № 31 999
Рис. 6.
1.4. Управління MMC/SD-картами
MMC карти можуть працювати в двох режимах обміну – MultiMediaCard Protocol і SPI Protocol. SD карти можуть працювати в трьох режимах обміну– SD 1-bit Protocol, SD 4-bit Protocol і SPI Protocol. Надалі будемо розглядати саме SPI-інтерфейс, оскільки він підтримується обома типами карт і є простим в реалізації для мікроконтролерів.
Підключення MMC/SD-карт до мікроконтролера в режиміSPI-інтерфейсу та напрями передачі інформації наведено на рис. 7.
5
Рис. 7.
Для обміну даними з картою пам’яті черезSPI-інтерфейс хост-МК встановлює сигнал
вибірки CS в активний низький рівень(логічний 0). Далі хост-МК формує тактові імпульси на лінії CLK . По кожному тактовому імпульсу МК передає карті1 біт інформації по лінії DI та зчитує 1 біт з лінії DO . Прийом і передача здійснюється за переднім фронтом імпульсів CLK. Тобто прийом і передача ведуться паралельно (рис. 8).
Рис. 8.
Протокол MMC/SD-карт є протоколом типу"команда-відповідь". Всі команди посилає хост-МК. MMC/SD-карти відсилають відповідь на команду (Response), а також можуть посилати токени (Token), які вказують початок даних або причину помилки.
Команди позначаються CMDXX, де ХХ – номер команди. Команди передаються пакетами по 6 байт. Перший байт команди завжди містить біти 01, далі йде 6-бітний номер команди. Наступні 4 байти – аргумент команди (першим передається старший байт). Останній байт містить 7-бітний CRC та стоповий біт рівний 1. Команди пересилаються через лінію MOSI. В режимі SPI-інтерфейсу біти CRC не використовуються і можуть містити будь-які значення.
Формат SD-команд
|
Байт 1 |
Байти 2-5 |
Байт 6 |
|
|
0 |
1 |
Команда |
Аргумент команди (старший байт перший) |
CRC |
1 |
При роботі MMC/SD-карт в режимі SPI доступні близько 15 команд, що дозволяють поперше отримати повну інформацію про тип і поточний стан карти, по-друге проводити запис і читання даних. Розглянемо лише 5 команд, за допомогою яких можна читати та записувати дані з MMC/SD-карт блоками.
Табл. Основні команди MMC/SD-карт
Номер |
Аргумент |
Позначення |
Опис |
6
команди |
|
|
|
|
|
|
|
|
|
CMD0 |
відсутній |
|
GO_IDLE_STATE |
Скидання. |
Код |
команди 0x40, |
0x00, |
|
|
|
0x00, 0x00, 0x00, 0x95. |
|
|
|
|||||
|
|
|
|
|
|
|
|||
CMD1 |
відсутній |
|
SEND_OP_COND |
Ініціалізація. Код |
команди 0x41, |
0x00, |
|
||
|
0x00, 0x00, 0x00, 0xFF. |
|
|
|
|||||
|
|
|
|
|
|
|
|||
CMD16 |
[31:0] довжина блоку |
SET_BLOCKLEN |
Встановити розмір блоку. Код команди |
|
|||||
0x50, Size, Size, Size, Size, 0xFF. |
|
|
|||||||
|
|
|
|
|
|
||||
CMD17 |
[31:0] адреса |
блока |
READ_SINGLE_BLOCK |
Прочитати |
блок |
даних |
розміром, |
||
вказаним |
SET_BLOCK_LEN. |
Код |
|||||||
|
|
|
|
команди 0x51, Adr, Adr, Adr, Adr, 0xFF |
|||||
CMD24 |
[31:0] адреса |
блока |
WRITE_SINGLE_BLOCK |
Записати блок даних розміром, вказаним |
|
||||
SET_BLOCK_LEN. 0x58, Adr, Adr, Adr, |
|||||||||
|
|
|
|
Adr, 0xFF. |
|
|
|
|
|
На кожну розглянуту вище команду карти видають відповідь типуR1. Відповідь R1 складається з одного байта, старший біт байту завжди рівний 0. Інші біти – прапорці помилок (1
– є помилка, 0 – немає).
Response R1
Байт Біт |
Призначення |
7 Start Bit. Завжди рівний0.
6Parameter Error. Аргумент команди поза допустимими межами для даної карти.
5Address Error. Помилкова адреса.
4Erase Sequence Error. Помилка в команді стирання.
13 CRC Error. Остання прийнята команда не пройшла перевіркуCRC.
2Illegal Command. Виявлений неприпустимий номер команди.
1 |
Erase Reset. Стирання не виконане, так як операція перервана до завершення |
||
виконання. |
|||
|
|||
0 |
In Idle State. Карта знаходиться в сплячому режимі і виконується процес ініціалізації. |
|
|
Ініціалізація карти
Перед роботою карту необхідно правильно ініціалізувати. Для цього через декілька мілісекунд після подачі живлення потрібно подати в карту SPIпо -інтерфейсу не менше74
тактових імпульсів по лінійCLK і почекати ще 1 мс. Весь цей час на лінії CS повинна бути логічна "1". Тепер карта готова до прийому команд. Для переводу карти в режимSPI треба відправити команду CMD0 (Скидання). Команда CMD0 має вигляд: 0x40, 0x00, 0x00, 0x00, 0x00, 0x95. Далі слід посилати холості байти, доки не отримаємо відповіді R1 = 0x01 (рис. 9).
Рис. 9.
Далі потрібно послати командуCMD1 (Ініціалізація) до тих пір, поки не отримаємо у відповідь байт R1 = 0х00 (рис. 10). Це означатиме, що карта готова до роботи. Тепер можна посилати інші команди (CMD16, CMD17 і т. п.).
7
Рис. 10.
Читання/запис даних
Для читання одного блоку (сектора) мікроконтролер виставляє сигнал 0 на лінію CS . Далі посилає команду CMD17 (READ_SINGLE_BLOCK). Потім хост читає дані по шині SPI поки у відповідь карта не видасть токен зі значенням0хFE. Після отримання відповіді0хFE хост-МК зчитує з карти 512 байт даних та 2 контрольні байти CRC (розраховані для твірного поліному x16 + x12 + x5 +1 ). Їх вміст в режиміSPI можна ігнорувати, але прочитати потрібно
обов’язково! Після закінчення обміну потрібно подати 1 на лінію CS (рис. 11).
Рис. 11.
У випадку виникнення помилки в процесі читання карта видає спеціальний токен, який містить код помилки (рис. 12).
CS
|
|
Від хоста |
|
|
|
|
|
|
|
|
Наступна |
|||
|
|
|
|
|
|
|
|
|
|
команда |
||||
|
|
до карти |
|
|
|
Від карти |
|
Від карти |
||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
до хоста |
|
до хоста |
|
|
||
|
DataIn |
Command |
|
|
|
|
|
|
Command |
|
||||
|
CMD17 |
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DataOut |
|
|
|
Responce |
|
Data Error |
|
|
||||||
|
|
|
|
|
Token |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 12. |
|
|
|||
|
|
|
|
|
|
|
|
Read Error Token |
|
|
||||
|
Байт |
|
Біт |
|
|
|
|
|
|
Призначення |
|
|
||
|
|
|
7 |
|
Завжди |
рівний0. |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
6 |
|
Завжди |
рівний0. |
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
5 |
|
Завжди |
рівний0. |
|
|
|
|
|
|||
|
1 |
|
|
|
|
|||||||||
|
|
4 |
|
Card Locked. Карта блокована - доступ не дозволений, так як карта захищена паролем. |
||||||||||
|
|
|
|
|
|
|
|
|||||||
|
|
|
3 |
|
Out of Range. Аргумент команди поза допустимими межами. |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8
|
2 |
Card ECC Failed. Алгоритм ЕСС (Error Correction Code) не зміг відновити дані. |
||
|
|
|
|
|
|
1 |
Card Controller Error. Збій внутрішнього контролера. |
||
|
|
|
|
|
|
0 |
Unspecified Error. Невідома помилка - збій з невідомої причини. |
||
|
|
|
|
|
|
|
|
|
|
Для запису одного блоку (сектора) мікроконтролер виставляє сигнал 0 на лінію CS . Далі посилає команду CMD24 (WRITE_SINGLE_BLOCK). Потім хост-МК зчитує відповідь від карти типу R1. Якщо помилок немає (R1 = 0x00) хост передає токен початку даних зі значенням 0хFE. Після цього хост-мікроконтролер передає в карту512 байт даних та2 контрольні байти. Контрольні байти в режимі SPI можуть мати довільне значення, але передати потрібно обов'язково. Далі хост очікує відповіді від карти, яка має наступний формат:
Біт 7 |
Біт 6 |
Біт 5 |
Біт 4 |
Біт 3-1 |
Біт 0 |
|
|
|
|
|
|
х |
х |
х |
0 |
Status |
1 |
|
|
|
|
|
|
Status = 010 – Дані прийняті;
Status = 101 – Дані відкинуті через помилку CRC; Status = 110 – Дані відкинуті через помилку запису.
Отримавши значення ххх00101 хост-мікроконтролер очікує відповіді від карти типу R1 = 0х00. Отримання цієї відповіді означає, що карта пам’яті успішно завершила операцію запису і
готова до наступних операцій. Після закінчення обміну потрібно подати 1 на лінію CS (рис. 13).
Рис. 13.
Як правило, на MMC/SD-карти пам’яті встановлюється файлова система(переважно FAT16, для карт великого об’єму– FAT32). Тому на хост-мікроконтролер додатково покладаються функції читання/запису файлів, а не просто секторів (рис. 14).
Рис. 14.
9
