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

Глава 12. Интерфейс SPI 339 нас - значение последнего байта для этой команды с учетом CRC будет равно $ 95, а вся команда полностью тогда будет представлять последовательность байтов: $ 4 0, $00 , $00 , $ 0 0, $ 0 0, $ 95 . Перед любой командой, как показано на рис . 1 2 .4, лучше подать не менее восьми импульсов по линии CLK при высоком уровне на линии DI - проще говоря, вы­ дать $ FF. После подачи любой команды записи или чтения карта посылает отклик (в SРI-режиме в большинстве команд - один байт), который иногда полезно про­ анализировать : отдельные биты в нем сигнализируют, например, об ошибке, если достигнут конец памяти, или о неправильно принятой команде . Перед посылкой отклика карта выжидает как минимум в течение восьми тактов, посылая единицы (байт, равный $ FF), старший бит отклика всегда равен нулю. Если все нормально, отклик должен содержать нули во всех разрядах, за исключением рассматриваемой команды сброса, где отклик Должен быть равен $ 0 1 . На практике все проверенные мной карты (опыт некоторых авторов публикаций в Сети это также подтверждает) выдавали ровно один пустой байт перед откликом. Таким образом, процедура посылки любой команды в карту, кроме GO_ IDLE_sтАТЕ, будет выглядеть, как показано в листинге 1 2 . 6 . ; ====== Передача команды в карту ======= ; в СМО - команда , в AddrHH : AddrLL аргумент Send command : ser temp ; $ FF rcall WR_spi ; пустой байт mov temp , CМD rcall WR_spi ; команда mov temp , AdrHH rcall WR_spi ; старший байт аргумента mov temp , AdrHL rcall WR_spi ; З байт mov temp , AdrLH rcall WR_spi ; 2 байт mov temp , AdrLL rcall WR_spi ;мnадший байт аргумента ser temp ; $ FF вместо CRC rcall WR_spi ser temp ; $ FF rcall WR_spi ; пустой байт ser temp ; $ FF rcall WR_spi ; в temp - отклик ret Для возврата карты в исходное состояние и перевода ее в SРI-режим необходимо сбросить линию CS в состояние логического нуля и подать команду GO_ IDLE_SТАТЕ

RkJQdWJsaXNoZXIy MTExODQxMg==