На сайте самсунга есть полная документация MMC стандарта как в работе по SPI так и в MMC режимах.
Спецификация гласит что так называемый TOKEN "синхронизирующий бит начала передачи", может появляться в любой момент тактов ожидания ответа, то-есть он может быть не кратен 8-ми циклам. Решение проблемы: надо отлавливаить не код "FE" , а всего-лишь первый нулевой бит, и по нему уже синхронизироваться, он может появляется в любое время а не так как вы его ожидаете. Я в интернете на зарубежных форумнаходил исходники с подобным неправильным способом работы с карточкой и так-же жалобы на неспособность работы некоторых карточек от некоторых производителей. Поэтому пришлось написать полность свои функции. С обработкой токенов-ответов на разные там ошибки карты. Карточки с которыми я работал вот такие: APACER 512Mb, Kingston 1G, Transced 2G и пару каких-то неизвестных ( 5 вольтовых )производителей. И никаких проблем. Написал функции обработки информационных структур (CCD, SCD - по моему их так зовут), для определения размерности карты и максимального рабочего пакета, без обработки этих структур в которых присутствует информация о максимальных размерах: входном пакете записи и пакете чтения. Так же перед работой карточки надо установить командами размерность пакета, это как за правило. Еще, можно пересекать границы адресов, но только не адресов которые кратны максимально заявленного размера блока передачи текущей карты.
Я думаю Вам надо переписать код, для того чтобы синхронизировать работу вашего SPI в микроконтролере Вы должны написать чисто програмный отлавливатель первого нулевого бита. Тогда у Вас не будут проблемы с несовместимостью Вашего устройства с карточками.
|