Команды mmc в режиме spi
Команда имеет длину 6 байт, передача всегда начинается со старшего бита. Пакет команды имеет формат, представленный на рисунке 1.16.
Рисунок 1.16
При работе MMC в режиме SPI доступно около 15 команд, позволяющих, во-первых, получить полную информацию о типе и текущем состоянии карты, во-вторых, производить запись и
чтение данных. В плеере используются всего 4 команды, с помощью которых можно лишь читать данные с MMC блоками размером 1÷512 байт. Они представлены на рисунке 1.17.
Рисунок 1.17
Все числа, аргументы передаются, начиная со старшего бита, а адрес блока - адрес первого байта блока.
Ответ на любую из вышеприведённых команд состоит из одного байта, старший байт всегда равен 0. Другие биты - флаги ошибок.
Рисунок 1.18
На рисунке 1.18 представлены ошибки:
в спящем режиме - карта находится в спящем режиме и выполняется процесс инициализации;
еrase reset - стирание не выполнено, т.к. операция прервана до исполнения;
недопустимая команда - обнаружен недопустимый номер команды;
ошибка CRC - последняя принятая команда не прошла проверку CRC;
еrase_seq_error - ошибка в команде стирания;
ошибка адреса - блок пересекает границу физического сектора;
ошибка параметра - аргумент команды вне допустимых пределов для данной карты.
Ошибки еrase reset, CRC и ошибка параметра встречаться в плеере не должны. Для операции чтения CMD17 считываемый блок должен быть в пределах одного физического сектора: его размер не должен превышать 512 байт, а начало и конец располагаться в одном и том же секторе. Если это не выполнено, то появится ошибка №6. Блок данных имеет длину от 4 до N+3 байт, где N - число, указанное в аргументе CMD16. Первый байт при передаче от MMC к МК равен 0xFE, далее следуют N байт запрашиваемой информации, а в конце - 2 байта CRC (их содержимое можно игнорировать, но прочесть нужно обязательно). Если же при чтении произошел сбой и карта не может предоставить данные, то вместо указанного блока передаётся 1 байт с флагом ошибки (рисунок 1.19)
На рисунке 1.19 приведены следующие ошибки:
неизвестная ошибка - сбой по неизвестной причине;
ошибка СС - сбой внутреннего контроллера;
сбой ЕСС - алгоритм ЕСС не смог восстановить данные;
выход за границу - аргумент команды вне допустимых пределов;
карта блокирована - доступ не разрешён, т.к. карта защищена паролем.
Рисунок 1.1 9
Инициализация карты
После включения карта находится в режиме Multimedia Card protocol. Для перевода её в режим SPI надо отправить команду Сброс (CMD0). В режиме SPI проверка CRC отключена по умолчанию, поэтому содержимое поля CRC7 игнорируется. Однако для CMD0 поле CRC7 нужно указать правильно. Поскольку команда не имеет меняющихся в процессе работы аргументов, то и специально вычислять это поле не обязательно. Далее карту необходимо проинициализировать. Для этого посылаем команду CMD1 до тех пор, пока в ответе карты бит 0 (в спящем режиме) не сменится с 1 на 0. Это будет означать, что карта готова к работе. Теперь можно посылать команды CMD16 и CMD17.