Каталог статей

Главная » Все схемы » Теория » Справочные материалы

Выбранная схема!!!


3370
Как использовать карты MMC/SDC

Как использовать карты MMC/SDC



Оригинал: ChaN, "How to Use MMC/SDC"

Перевод с английского © PIClist-RUS (piclist.ru)


Введение

Сейчас SD-карты памяти (Secure Digital Memory Card) являются самыми популярными картами памяти для мобильных устройств. SD-карты (далее SDC) были разработаны как внешне совместимые с MMC-картами (Multi Media Card) (далее MMC), при этом SDC-совместимые устройства тоже могут использовать MMC, но с некоторыми оговорками. Также существуют уменьшенные версии, такие как RS-MMC, miniSD и microSD, с аналогичными функциями. MMC/SDC имеет встроенный микроконтроллер, все средства управления flash-памятью (стирание, чтение, запись и защита от ошибок) полностью сосредоточены внутри карты. По умолчанию данные передаются между картой и ведущим контроллером блоками по 512 байтов, так что с точки зрения прикладных программ её можно рассматривать как подобие обычному жёсткому диску. В настоящее время в качестве файловой системы в основном используются FAT12 и FAT16 с правилом разделения на разделы FDISK. FAT32 применяется только для карт большой ёмкости (≥ 2 Гб).

В этой статье приведены элементарные знания и разнообразные интересные моменты, о которых я узнал, используя MMC/SDC в небольших встраиваемых системах.

Рис. 1. SDC и MMC

Контактная поверхность

Ниже, на Рис. 2, показаны контактные поверхности SDC и MMC. MMC имеет семь контактных площадок, а у SDC их девять, две из которых как бы добавлены к семи площадкам MMC. Три контакта у каждой карты заняты в качестве выводов источника питания, так что количество рабочих сигналов составляет соответственно четыре или шесть. Обмен данными между ведущим контроллером и картой осуществляется в виде последовательной тактируемой передачи.

Диапазон рабочего напряжения питания указан в регистре OCR, его необходимо считать, чтобы убедиться в правильности выбранного напряжения. Однако питающее напряжение можно установить и в фиксированное значение, поскольку MMC/SDC работают в диапазоне напряжений от 2.7 до 3.6 вольт. Так как потребление тока в худшем случае может достигать нескольких десятков миллиампер, ведущий контроллер должен быть способен обеспечить 100 миллиампер.

Рис. 2. Контактная поверхность SDC и MMC

Режим SPI

Режим SPI является альтернативным режимом работы с MMC/SDC, более простым по сравнению с использованием их родного интерфейса. MMC/SDC можно подключить через универсальный порт SPI или порт GPIO (универсальный порт ввода/вывода), встроенный в большинство микроконтроллеров. Поэтому режим SPI прекрасно подходит для недорогих встраиваемых приложений. Особенно нет никаких причин использовать родной режим для электронных работ, выполненных вручную в качестве хобби. SDC работает в режиме "SPI 0". Что же касается MMC, то они не используют синхронизацию SPI как таковую, а оба действия защёлкивания и сдвига определяются по переднему фронту SCLK. Но вроде бы это работает в режиме "SPI 0". Поэтому наиболее подходящим режимом для работы с MMC/SDC по SPI является режим "SPI 0" (положительный синхроимпульс, защёлкивание по переднему фронту, сдвиг по заднему фронту). Режим "SPI 3" тоже подходит для этих целей.

Команда и ответ

В режиме SPI направление данных на сигнальной линии фиксировано, и данные передаются последовательно по байтам. Кадр команды, передаваемый от ведущего контроллера к карте, имеет фиксированную длину в 6 байтов и формат, приведённый на Рис. 3. В ответ на кадр команды ведущему передаётся ответ на команду (R1, R2 или R3). Так как вся передача данных управляется последовательными синхроимпульсами, генерируемыми ведущим, последний должен продолжать чтение байтов, пока не получит действительный ответ. Время ответа на команду (NCR) составляет от 0 до 8 байтов для SDC, и от 1 до 8 байтов для MMC. Сигнал CS должен удерживаться в состоянии низкого уровня в течение всей транзакции (команда, ответ и передача данных, если таковые имеются). Поле CRC как таковое в режиме SPI не обязательно, но его присутствие хотя бы в качестве битового поля необходимо, чтобы составить кадр команды.

Рис. 3. Кадр команды

Набор команд SPI

Каждая команда представлена в виде аббревиатуры (например, GO_IDLE_STATE) или в виде обозначения CMD, где - номер индекса команды, который может принимать значение от 0 до 63. В приведённой ниже таблице описаны только группа команд, обычно используемых для чтения/записи и инициализации карты. Более детальную информацию по всем командам вы можете найти в спецификациях от MMCA и SDCA.

Индекс команды Аргумент Ответ Данные Аббревиатура Описание
CMD0 Нет(0) R1 Нет GO_IDLE_STATE Программный сброс.
CMD1 Нет(0) R1 Нет SEND_OP_COND Инициировать процесс инициализации.
ACMD41(*1) Нет(0) R1 Нет APP_SEND_OP_COND Только для SDC. Инициировать процесс инициализации.
CMD9 Нет(0) R1 Да SEND_CSD Считать регистр CSD.
CMD10 Нет(0) R1 Да SEND_CID Считать регистр CID.
CMD12 Нет(0) R1b Нет STOP_TRANSMISSION Прекратить чтение данных.
CMD17 Адрес[31:0] R1 Да READ_SINGLE_BLOCK Считать блок.
CMD18 Адрес[31:0] R1 Да READ_MULTIPLE_BLOCK Считать множество блоков.
CMD23 Число блоков[15:0] R1 Нет SET_BLOCK_COUNT Только для MMC. Определить число блоков для передачи со следующей командой многоблочного чтения/записи.
ACMD23(*1) Число блоков[22:0] R1 Нет SET_WR_BLOCK_ERASE_COUNT Только для SDC. Определить число блоков для предварительного стирания для следующей многоблочной команды записи.
CMD24 Адрес[31:0] R1 Да WRITE_BLOCK Записать блок.
CMD25 Адрес[31:0] R1 Да WRITE_MULTIPLE_BLOCK Записать множество блоков.
CMD55(*1) Нет(0) R1 Нет APP_CMD Команда, определяемая приложением.
CMD58 Нет(0) R3 Нет READ_OCR Считать OCR.
*1:ACMD означает последовательность команд CMD55, CMD.

Ответ SPI

Имеется три формата ответа на команду: R1, R2, и R3, зависящие от каждой команды. Для большинства команд возвращается байт ответа R1. Битовые поля для ответа R1 показаны на Рис. 4. Значение, равное 0x00, означает успешное выполнение команды. Когда происходит какая-либо ошибка, будет установлен соответствующий бит ответа R1. Ответ R3 возвращается только для команды CMD58. Его первый байт - это ответ R1, за которым следует содержимое регистра OCR (4 байта).

Некоторые команды отнимают больше времени, чем NCR. Такие команды возвращают ответ R1b, который представляет собой ответ R1 и следующий за ним флаг занятости (на линии DO удерживается низкий уровень до тех пор, пока выполняется внутренний процесс). Ведущий контроллер должен ждать окончания процесса пока не получит 0xFF.

Рис. 4. Структура ответов R1 и R3

Процедура инициализации для режима SPI

После сброса по включению питания MMC/SDC входит в её родной режим работы. Чтобы переключить карту в режим SPI, нужно выполнить следующую процедуру.

Включение питания (вставка)

После того как питающее напряжение достигло 2.2 В, выждите хотя бы миллисекунду, затем установите на линиях DI и CS высокий уровень и подайте более 74 импульсов на SCLK, и карта будет в состоянии принять родную команду.

Программный сброс

Чтобы выполнить сброс карты, выдайте команду CMD0 при низком уровне на линии CS. После обнаружения команды CMD0 карта опрашивает сигнал CS. Если уровень сигнала CS низкий (т.е. активный уровень), карта входит в режим SPI. Поскольку команда CMD0 должна посылаться как родная команда, поле CRC должно содержать правильное значение. Стоит лишь карте войти в режим SPI, проверка CRC отключается и значение CRC не принимается в расчёт, поэтому процедуру передачи команд можно написать с встроенным байтом CRC, равным 0x95, который является правильным только для команды CMD0. Если CMD0 принята успешно, карта войдёт в состояние простоя (idle) и ответит ответом R1 с установленным в единицу битом "In Idle State" (R1 = 0x01). Снова включить проверку CRC можно командой CMD59.

Инициализация

В состоянии простоя карта принимает только команды CMD0, CMD1 и CMD58, любые другие команды будут отклонены. Когда карта обнаруживает команду CMD1, она начинает инициализацию. Чтобы определить, завершена ли инициализация, ведущий контроллер должен повторять посылку команды CMD1 и проверять ответ. Как только карта успешно проинициализировалась, бит "In Idle State" в ответе R1 будет сброшен (R1 = 0x00). Процесс инициализации может занять несколько сотен миллисекунд (большие карты имеют тенденцию к большим затратам времени). После окончания инициализации будут приниматься и команды чтения/записи. В это время можно считать OCR и CID для подтверждения диапазона рабочего напряжения, ёмкости карты или любого другого необходимого свойства.

В случае SDC-карт для инициирования инициализации рекомендуется использовать ACMD41 вместо CMD1. Похоже, что CMD1 работает не для всех SDC, так что если CMD1 была отклонена, или если вышло время ожидания при опросе состояния простоя, необходимо выполнить повторную передачу команды, но уже в виде последовательности ACMD41.

Передача данных

Пакет данных и ответ на данные

В транзакции с передачей данных после ответа на команду может быть передан/получен один или более блоков данных. Блок данных передаётся как пакет данных, который состоит из маркера (Token), блока данных (Data Block) и CRC. Формат пакета данных показан ниже, на Рис. 5. Существует три маркера данных (см. Рис. 5). Один из них, маркер "Stop Tran", который означает конец многоблочной записи, используется в виде одиночного байта без блока данных и CRC.

Рис. 5. Формат пакета данных, ответа данных и маркера ошибки

Одноблочное чтение

Рис. 6. Команда одноблочного чтения

Одноблочное чтение инициируется командой CMD17. Её аргумент задаёт ячейку, из которой следует начать чтение. Чтение осуществляется побайтово. Адрес должен быть байт-ориентированным, т.е. если вы указываете адрес сектора, задаваемый несколькими старшими битами, вам необходимо дополнить его нулями для получения полных четырёх адресных байтов.

В ответ на команду CMD17 карта выдаёт ведущему контроллеру пакет данных. После обнаружения правильного маркера данных ведущий контроллер принимает следующий за ним блок данных и два байта CRC, которые необходимо принять, даже если CRC не используется. По умолчанию размер блока 512 байтов, но его можно изменить командой CMD16. Если во время операции чтения произошла какая-нибудь ошибка, вместо пакета данных будет возвращён маркер ошибки (см. Рис. 5).

Многоблочное чтение

Рис. 7. Команда многоблочного чтения

С помощью команды многоблочного чтения CMD18 можно прочитать из карты последовательность из нескольких блоков, начиная с заданного адреса. Если перед этой командой с помощью команды CMD23 (только для MMC) не было задано число передаваемых блоков, будет инициировано неограниченное многоблочное чтение, то есть операция чтения будет продолжаться, пока ведущий контроллер не прервёт её командой CMD12. Байт, получаемый сразу же после передачи CMD12, является наполняющим, его не нужно учитывать. После этого байта следует ответ на команду.

Одноблочная запись

Рис. 8. Команда одноблочной записи

После того как карта приняла команду записи CMD24, ведущий контроллер после байтового промежутка (один или более байтов) передаёт в карту пакет данных. Формат пакета такой же, как и у команды блочного чтения. После передачи пакета карта сразу же выдаёт ответ на данные (Data Response), за которым следует флаг занятости. Большинство карт не могут менять размер записываемого блока, он является фиксированным и составляет 512 байтов.

По правилам режима SPI сигнал CS должен находится в активном уровне в течение всей транзакции, однако есть исключение из этого правила. Когда карта занята, ведущий контроллер может снять сигнал CS, чтобы освободить шину SPI для какого-нибудь другого SPI-устройства. Если же снова выбрать карту в то время, когда она занята выполнением внутреннего процесса, карта снова установит сигнал DO в низкий уровень. Поэтому, чтобы сократить время ожидания, лучше выполнять проверку на занятость непосредственно перед выдачей команды и пакета данных, а не ожидать освобождения карты после посылки команды. Кроме того, внутренний процесс инициируется спустя байт после ответа данных, т. е. необходимо выдать 8 тактовых импульсов, чтобы инициировать внутреннюю операцию записи. Состояние сигнала CS во время этих восьми тактовых импульсов не учитывается, поэтому можно совместить эту инициацию с процессом освобождения шины, описанным ниже (см. "Система со многими ведомыми").

Многоблочная запись

Рис. 9. Команда многоблочной записи

С помощью команды многоблочной записи CMD25 можно записать последовательность из нескольких блоков, начиная с заданного адреса. Если перед этой командой число передаваемых блоков не было задано с помощью команды CMD23 (только для MMC) или ACMD23 (для SDC), транзакция будет инициирована как неограниченная многоблочная запись, то есть операция записи будет продолжаться, пока ведущий контроллер не прервёт её передачей маркера "Stop Tran". Флаг занятости появиться байт спустя после маркера "Stop Tran". Что же касается SDC, то транзакция многоблочной записи должна прерываться маркером "Stop Tran" независимо от того, является ли она предопределённой или неограниченной.

Чтение CSD и CID

Эти команды подобны одноблочному чтению за исключением длины блока. CSD и CID передаются ведущему в виде 16-байтовых блоков данных. Более детальную информацию по CMD, CID и OCR вы сможете найти в спецификациях на MMC/SDC.

Неподключенная шина и "горячее" подключение

По сути, любая линия, которая может оставаться неподключенной должна притягиваться к низкому или высокому уровню через резистор. Это основное правило проектирования на МОП-устройствах. Поскольку для DI и DO обычным является состояние высокого уровня, их следует притянуть к высокому уровню. Согласно спецификациям SDC/MMC для потягивающих резисторов рекомендуется выбирать значения 50 - 100 кОм. Однако тактовый сигнал в спецификациях SDC/MMC не упоминается, поскольку он обычно управляется ведущим контроллером. Если существует вероятность, что в течение какого-то времени он может оставаться неподключенным, его следует подтянуть к его обычному уровню, то есть к низкому.

MMC/SDC позволяет использовать "горячую" вставку/удаление, но для этого необходимо кое-что учесть в схеме основной платы во избежание некорректной работы. Например, если питающее напряжение системы (Vcc) подключается к разъёму карты напрямую, то в момент замыкания контакта питающее напряжение упадёт из-за тока зарядки конденсатора, встроенного в карту. Ниже, на Рис. 10 A приведена осциллограмма, показывающая, что в этом случае происходит падение напряжение на 600 милливольт. Этого вполне достаточно, чтобы запустить детектор падения напряжения. На Рис. 10 B показано, что при использовании для блокировки импульса тока катушки индуктивности, падение напряжения уменьшилось до 200 милливольт. Электролитический конденсатор большой ёмкости (OS-CON) (Рис. 10 C) может радикально уменьшить падение напряжения. Однако он может вызывать колебания на LDO-регуляторе.

Рис. 10. "Горячее" подключени

Система со многими ведомыми

В SPI каждое ведомое устройство выбирается отдельным сигналом CS, поэтому к шине SPI можно подключить несколько устройств. Обычное ведомое устройство SPI управляет/освобождает линию DO по сигналу CS асинхронно. Однако MMC/SDC управляет/освобождает линию DO синхронно с SCLK. Поэтому, если к шине SPI присоединены MMC/SDC и какие-нибудь другие ведомые устройства SPI, то существует вероятность возникновения конфликта на шине. На Рис. 11 показана временная диаграмма управления/освобождения для MMC/SDC (линия DO подтянута к 1/2 Vcc, чтобы видеть состояние шины). Поэтому, чтобы заставить MMC/SDC освободить линию DO, ведущее устройство должно передать один дополнительный байт после снятия сигнала CS.

Рис. 11. Процесс освобождения шины

Оптимизация производительности записи

Большинство MMC/SDC в качестве массива памяти используют NAND Flash Memory (flash-память типа НЕ-И). Такая память имеет низкую стоимость и может быстро читать/записывать большое количество данных, но, с другой стороны, её недостаток состоит в неэффективном перезаписывании небольших объёмов данных. Обычно для flash-память требуется стирать существующие данные перед записью новых, а минимальная единица для операции стирания (блок стирания) больше минимального размер записываемого блока. Обычная flash-память типа НЕ-И имеет размер блоков 512/16К байтов для операции записи/стирания соответственно, а новейшие карты больших объёмов имеют микросхемы с ещё большими блоками 2K/128K байтов. Это означает, что перезапись всех данных в блоке стирания в карте выполняется даже в том случае, если записывается только один сектор (512 байтов).

Контрольный тест

Я исследовал производительность чтения/записи некоторых MMC/SDC (см Рис. 12) на недорогом 8-разрядном микроконтроллере (ATmega64 на частоте 9.2 МГц) при условии, что встраиваемая система является системой с ограниченным объёмом памяти. Из соображений объёмов памяти, write() и read() выполнялись по 2048 байтов за раз.

Результат:

Карта Скорость чтения, Кбайт/с Скорость записи, Кбайт/с
128 Мб SDC 328 77
512 Мб SDC 234 28
128 Мб MMC 312 182

Судя по эти результатам, производительность записи 512 Мб SDC оказалась в три раза хуже по сравнению с 128 Мб SDC.

Как правило, производительность чтения/записи запоминающих устройств большой ёмкости увеличивается пропорционально его плотности записи, однако среди карт памяти иногда возникает противоположная тенденция. Что же касается MMC, то, похоже, она в несколько раз быстрее SDC, и это неплохая производительность. После этого эксперимента я протестировал некоторые SDC, поставляемые разными производителями, и обнаружил, что SDC от PQI была быстрее, чем MMC от Hitachi, а вот у SDC от Panasonic и Toshiba была очень плохая производительность.

Рис. 12. Протестированные карты

Размер блока стирания

Чтобы проанализировать детали операции записи, время занятости (число циклов опроса) после передачи записываемых данных выводилось на консоль в низкоуровневой функции записи диска. Множество чисел на строке указывает блоки данных и маркер "Stop Tran", который выдаётся транзакцией многоблочной записи.

Результаты теста:

128MB Mutli Media Card: HB28B128MM2 (Hitachi)

--------------------------------------------------------
>fo 10 rwtest.dat
rc=0
>fw 65536 0x55
521
93 14 14 14 491
93 15 14 15 463
93 15 14 15 475
94 15 15 15 470
93 15 14 15 494
90 15 15 15 463
93 15 14 15 460
93 15 15 15 463
93 15 14 15 505
93 15 15 14 462
93 15 14 14 474
93 15 15 14 462
93 15 15 15 514
93 15 14 14 463
93 15 14 15 457
93 15 14 15 444
93 15 15 15 492
93 15 15 15 460
93 15 14 15 471
94 15 15 15 449
93 14 14 15 532
93 14 15 15 463
91 14 14 15 486
93 15 14 15 463
93 14 14 15 487
93 14 15 14 462
93 14 15 15 487
93 14 15 15 448
93 14 15 15 506
93 14 15 15 490
93 14 15 15 514
93 14 15 15 462
65536 bytes written with 182044 bytes/sec.
>fc
477
451
521
rc=0
>fo 1 rwtest.dat
rc=0
>fr 65536
65536 bytes read with 312076 bytes/sec.
>fc
rc=0
>
128MB SD Memory Card: RP-SD128B (Panasonic)
--------------------------------------------------------
>fo 10 rwtest.dat
rc=0
>fw 65536 0x55
3879
1840 21 16 7 1997
1896 21 16 7 1944
1946 21 16 7 1891
1999 21 16 7 1839
2052 21 16 7 1785
2104 21 16 7 1735
2160 21 16 7 1679
2210 21 16 7 1627
2263 21 16 7 1574
2316 21 16 7 1521
2369 21 16 7 1471
2419 21 16 7 1415
2476 21 16 7 1365
2528 21 16 7 1309
2580 21 16 7 1256
2634 21 16 7 1206
2684 21 16 7 1150
2740 21 16 7 1089
2790 21 16 7 1047
2846 21 16 7 991
2899 21 16 7 941
2949 21 16 7 886
3004 21 16 7 836
3054 21 16 7 783
3110 21 16 7 730
3153 21 16 7 677
3213 21 16 7 621
3269 21 16 7 571
3319 21 16 7 518
3375 21 16 7 463
3425 21 255 7 3783
95 21 16 7 3733
65536 bytes written with 77101 bytes/sec.
>fc
3901
3904
3902
rc=0
>fo 1 rwtest.dat
rc=0
>fr 65536
65536 bytes read with 327680 bytes/sec.
>fc
rc=0
>

512MB SD Memory Card: RP-SD512B (Panasonic)
--------------------------------------------------------
>fo 10 rwtest.dat
rc=0
>fw 65536 0x55
955
3 3 3 3 396
3 3 3 28986 268
3 3 3 3 406
3 3 3 29211 260
3 3 3 3 408
3 3 3 29317 253
3 3 3 3 403
3 3 3 28718 259
3 3 3 3 419
3 3 3 29197 256
3 3 3 3 399
3 3 3 29092 260
3 3 3 3 406
3 3 3 28777 250
3 3 3 3 410
3 3 3 28772 256
3 3 3 3 399
3 3 3 28817 275
3 3 3 3 410
3 3 3 29145 264
3 3 3 3 410
3 3 3 29178 253
3 3 3 3 399
3 3 3 29143 301
3 3 3 30167 400
3 3 3 3 234
3 3 3 30570 381
3 3 3 3 227
3 3 3 30542 380
3 3 3 3 224
3 3 3 30500 381
3 3 3 3 234
65536 bytes written with 27769 bytes/sec.
>fc
32481
785
971
rc=0
>fo 1 rwtest.dat
rc=0
>fr 65536
65536 bytes read with 234057 bytes/sec.
>fc
rc=0
>

В результате анализа выявлено различие внутренних процессов между 128 Мб SDC и 512 Мб SDC. 128 Мб SDC перезаписывает блок стирания в конце многоблочной транзакции. 512 Мб SDC, похоже, имеет буферы данных размером 4 Кбайта и перезаписывает блоки стирания по каждой границе в 4 Кбайта. Поэтому их нельзя сравнивать напрямую, но время обработки перезаписи блока стирания в тиках составляет 3800 для 128 Мб SDC и 30000 для 512 Мб SDC, то есть в 8 раз дольше, чем для 128 Мб SDC. Судя по этому результату, похоже, что 128 Мб SDC использует микросхему с блоками небольшого размера, а 512 Мб SDC использует микросхему с блоками большого размера, либо многоканальный контроллер (MLC)*. Конечно, больший размер блока снижает производительность при частичной перезаписи блоков. В 512 Мб SDC только область в 512 Кбайт от начала памяти является относительно быстрой. Это можно увидеть по времени записи в close(). Возможно, к этой области применена какая-то специальная обработка для более быстрого доступа к FAT.

*Возможно, для термина "MLC" имеется другой перевод, более правильный, исходя из смысла текста. - прим. пер.

Улучшение производительности записи

Чтобы избежать этого узкого места и поднять производительность записи SDC/MMC, за один раз следует выполнять запись максимально возможного числа блоков (в идеале выровненного по блоку стирания). Другими словами, необходимо выделить большую буферную память и передать её в fwrite(). Что касается низкоуровневой функции записи диска, то для повышения эффективности обработки записи нужно предварительно сообщать карте число записываемых секторов. Это называется "предопределённая многоблочная запись". Однако для этих целей используются разные команды: CMD23 для MMC и ACMD23 для SDC.

Правда, такой подход мог бы привести к тщетным попыткам увеличить производительность записи SDC на микроконтроллерах с несколькими килобайтами ОЗУ. Если вам нужна производительность записи в карту памяти, то лучше применить CompactFlash или MMC, а не SDC. В частности, CompactFlash имеет хорошую производительность, которая в десять раз быстрее, чем у SDC.

Карты памяти изначально разбиты на разделы и отформатированы, чтобы выровнять единицу выделения памяти по блоку стирания. При неосторожном переразбиении или переформатировании карты памяти системой, которая не совместима с MMC/SDC (обычный ПК), оптимизация нарушится, и производительность записи может быть утеряна. Я попытался переформатировать 512 Мб SDC под FAT32 на ПК, и производительность записи (измерялась копированием файла) понизилась в несколько раз. Поэтому переформатирование карты должно выполняться с помощью оборудования, совместимого с MMC/SDC, а не на ПК.

Описание интерфейса SPI

SPI (Serial Peripheral Interface - последовательный периферийный интерфейс) - один из внутрисхемных интерфейсов связи. Он был разработан фирмой Motorola (Freescale Semiconductor). Благодаря его простоте и универсальности он встраивается в различные периферийные ИС и стоит в одном ряду с шиной I2C от Philips. Количество сигнальных линий SPI составляет три или четыре, это больше двух проводов шины I2C, но зато скорость передачи может составлять до 20 Мбит/с и выше, в зависимости от возможностей устройства (это в 5 - 50 раз больше, чем скорость шины I2C). Поэтому интерфейс SPI используется в различных приложениях, АЦП, ЦАП или ИС связи, для которых требуется максимально возможная скорость передачи данных.

Структура интерфейса SPI

Основная структура интерфейса SPI показана на Рис. 13. Мастер* и ведомый связаны между собой с помощью трёх сигнальных линий: SCLK (Serial Clock - последовательная синхронизация), MISO (Master-In Slave-Out - вход мастера выход ведомого) и MOSI (Master-Out Slave-In - выход мастера вход ведомого). Оба 8-разрядных регистров обмениваются между собой содержимым при сдвиге, управляемом тактовыми сигналами от мастера. Дополнительный сигнал SS (Slave Select - выбор ведомого) используется для синхронизации начала пакета или границы байта, а также для реализации конфигурации со многими ведомыми. Для большинства ведомых устройств выводы SPI имеют другие обозначения: DI (Data Input - вход данных), DO (Data Output - выход данных) и CS (Crystal Select - выбор кристалла). Для устройств с однонаправленной передачей, таких как ЦАП или одноканальный АЦП, одной из линий данных можно пренебречь. Данные выдвигаются, начиная со старшего бита.

*На самом деле "master" принято переводить как "ведущий", но мы будем использовать термин "мастер", чтобы избежать путаницы между "ведущий" и "ведомый". - прим. пер.

Если к шине SPI подключено несколько ведомых устройств, то к трём линиям SCLK, MISO и MOSI устройства присоединяются параллельно, а сигналы CS от мастера подключаются к каждому ведомому отдельно. Если ведомый выбран сигналом CS, то для него разрешена выдача данных. Те же устройства, для которых CS не активен, отключены от линии MISO.

Рис. 13. Структура интерфейса SPI

Временная диаграмма передачи данных по SPI

В SPI выдвигание и защёлкивание данных происходит по противоположным фронтам тактовых импульсов. Такое разделение операций сдвига и защёлкивания имеет определённое преимущество, позволяя избегать жёсткого временного режима между этими двумя операциями. Это позволяет облегчить решение вопроса обеспечения синхронизации при разработке ИС или плат. Но, с другой стороны, из-за комбинаций полярности и фазы синхроимпульсов возникает четыре режима работы, и мастеру приходится настраиваться на тот режим, который используется ведомым.

Режим SPI Временная диаграмма
Режим "SPI 0"
Активные уровень импульсов - высокий.
Сначала защёлкивание, затем сдвиг.
Режим "SPI 1"
Активные уровень импульсов - высокий.
Сначала сдвиг, затем защёлкивание.
Режим "SPI 2"
Активные уровень импульсов - низкий.
Сначала защёлкивание, затем сдвиг.
Режим "SPI 3"
Активные уровень импульсов - низкий.
Сначала сдвиг, затем защёлкивание.


Категория: Справочные материалы | Добавил: Cosmogor (21.11.2011)
Просмотров: 8829 | Рейтинг: 5.0/2


Всего комментариев: 0

Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов! Подробно тут!
Жалоба

ьте свои комментарии !!!!

Имя *:
Email:
Код *:

Copyright Zloy Soft (Company) © 2008 - 2024