Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру

Глава 1 2. Интерфейс SPI 0 - fill � О ш 111 (.) 111 Q. � "' i ш"' + � 1 111 - t ..J о u a u а 1111111 1 2 3 4 5 6 7 Рис. 1 2.З. Подключение flash-кapты ММС к схеме, показанной на рис 1 2 . 2 ; самодельный разъем для присоединения карты (справа) П одача команд и инициализация ММС 337 Общий принцип работы интерфейса SPI в картах немного отличается от привычно­ го нам побайтного доступа. Если помните, в главе 3 было сказано, что в интерфейсе SPI нет никакого маркера, разделяющего байты, - это попросту бесконечный по­ ток битов, синхронизированных фронтами по линии SCL. У карт памяти, которые и сами могут иметь самое разное устройство и применяться с различными контрол­ лерами, между информационными посылками могут присутствовать достаточно большие промежутки, необходимые контроллеру или карте на то, чтобы «перева­ рить» нужную информацию. Поэтому промежуток до команды, или от команды до получения отклика, или до начала массива данных (см. далее описание команд) может быть произвольным. Поскольку внутреннего тактового генератора у карты нет, то работа ее в таких пау­ зах обеспечивается тактами по линии CLK, при этом на линии DI должен быть вы­ ставлен высокий уровень (что равносильно посылке байтов, равных $ FF) . На линии DO в большинстве случаев при этом также присутствует высокий уровень, за ис­ ключением состояния, когда карта занята, например, записью блока в память ( вuzY ) , - тогда здесь низкий уровень . Стандарт устанавливает для большинства таких промежутков максимальное значение в 8 восьмибитовых посылок (мини­ мальное может быть в разных случаях как О, так и 1 ) . Первый (старший) бит любой команды (либо байта отклика, о чем далее) всегда равен нулю, так что по сбросу в нулевое состояние на линии можно определить начало информационного байта. Аналогично, массив данных всегда предваряется байтом, в котором последний (младший) бит равен нулю ($ FE, о чем далее), так что устройство «знает», когда на­ чинать отсчитывать данные. Общий принцип подачи команд и данных иллюстрируется приведенной на рис. 1 2 .4 диаграммой, отображающей пример процедуры записи блока данных.

RkJQdWJsaXNoZXIy MTExODQxMg==