Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 1 2. Интерфейс SPI brne delay_8 0 c l r AdrHH clr AdrHL clr AdrLH clr AdrLL ; посылаем команду SEND ОР COND сколько надо раз sd ini : ldi CMD , $ 4 1 ; CMDl rcall Send command cpi temp , O brne sd ini ; rcall out com ; можно послать наружу через UART для контроля ; конец инициализации ; окончание процедуры ser temp ; $ FF rcall WR_spi ; пустой байт - пауза sbi PORTB , CS ; CS = 1 ret 34 1 Поскольку эта программа демонстрационная, то средств предотвращения зависания тут не предусматривается, однако в рабочих проектах следует ограничить число циклов посылки команды SEND_ОР_COND (например, значением несколько сотен) и при неудаче инициализации карты (она, например, может быть просто не встав лена в устройство) принимать соответствующие меры. З апись и чтение ММС Карты ММС внутри устроены аналогично любым микросхемам flаsh-памяти - все пространство поделено на страницы, размер которых равен сектору на жестком диске (5 1 2 байтов), и которые в документации называются блоками (или сектора ми). Как и на жестком диске, величину блока для операции чтения можно изменить (от l до 2048 байтов), но эта операция имеет ограничения для операций записи, и притом для карт разных производителей несколько разные, потому проще сми риться с тем, что читать и писать придется одинаково массивами по 5 1 2 байтов (можно, правда, читать и писать сразу несколько таких массивов) . Отличие ММС от рассмотренной ранее микросхемы AT45DB в том, что базовые операции чтения и записи производятся без явного участия буфера - непосредственно в память, поэтому для записи на карту в МК придется либо иметь буфер данных такого объ ема, либо получать данные извне (а при чтении - посьmать «наружу»). Емкости встроенной в контроллер SRAM не всегда хватает для организации буфера разме ром 5 1 2 байтов (напомним, что даже если емкость SRAM равна 5 1 2 байтов, как в большинстве младших моделей Mega, то часть ее занята под стек) . Потому млад шие АVR- не очень удобное устройство для «общения» с картами памяти. Однако положение облегчается следующим нюансом. Задав команду чтения или записи блока, ее всегда приходится выполнять до конца, подав нужное число так-
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==