SPI - это полнодуплексный последовательный синхронный интерфейс передачи данных. Полнодуплексный означает что прием данных и их передача может происходить одновременно. Для этого в данном интерфейсе есть 2 провода один из которых называется MOSI (M-мастера O-выход S-слейва I-вход) а второй MISO (M-мастера I-вход S-слейва O-выход). Если по SPI соединяются два устройства то один из них является мастером а другой слейвом. Мастер управляет процессом передачи и приема а также генерирует синхроимпульсы. Синхроимпульсы нужны для того чтобы точно задавать моменты времени в которые на проводах MOSI и MISO замеряются уровни напряжений чтобы быть записанными. Синхронные интерфейсы надежнее асинхронных т.к. в асинхронных приемник и передатчик должны работать с одинаковой (чего практически никогда не бывает) или очень близкой частотой чтобы приемник записывал 0 или 1 именно тогда когда это нужный по счету 0 или 1. Неточность частот также влияет на скорость передачи данных в худшую сторону. Поэтому синхронные интерфейсы также быстрее асинхронных. Из за полного дуплекса и синхронности возможно что это самый быстрый последовательный интерфейс который только можно придумать. Быстрее могут быть только параллельные интерфейсы. Синхроимпульсы идут по проводу CSK. Итого, как минимум и не учитывая земли, для данного интерфейса нужно 3 провода. Если необходимо соединить по SPI более 2х устройств то задействуются дополнительные провода SSx где x-номер слейва. Из за этого количество проводов увеличивается на 1 при добавлении одного нового устройства на шину. Т.е. количество проводов SS равно количеству слейвов если оно больше 1. Если слейв 1 то провод SS можно не использовать. Поэтому SPI плох в плане экономии проводов. Если требуется передача, с небольшой скоростью, данных по небольшому количеству проводов то лучше использовать например I2C. Если нужна большая скорость передачи данных с небольшим количеством устройств то SPI лучше подойдет чем I2C. Из за того что данный интерфейс синхронный, стабильность частоты его работы не важна, настолько что если например микроконтроллер является слейвом то мастером может быть человек с кнопкой подключенной к SCK, переключателем подключенным к MOSI и светодиодом подключенным к MISO. С таким подключением человек-мастер может протестировать слейва. Чтобы подключить два устройства по SPI нужно соединить MOSI вывод мастера с MOSI выводом слейва, MISO мастера с MISO слейва а также CSK мастера с CSK слейва. Мастер и слейв имеют внутри себя сдвиговые регистры и после соединения, их описанным выше способом, получается кольцевой сдвиговый регистр при сдвиге битов столько раз сколько битов в одном из регистров (мастера или слейва) происходит обмен данными между мастером и слейвом:
воскресенье, 9 января 2022 г.
USI в режиме SPI slave на ATtiny2313
Рисунок 1 - Диаграмма обмена данными межу слейвом и мастером по SPI
Рисунок 2 - Схема SPI слейва на ATtiny2313 для взаимодействия с человеком
Чтобы мастер смог забрать байт данных от слейва, нужно поместить этот байт в регистр USIDR. после того как обмен произойдет, из этого регистра можно извлечь байт данных пришедший от мастера. Об окончании обмена свидетельствует бит 6 регистра USISR. Его можно проверять в цикле прежде чем забирать байт от мастера но прежде его нужно программно сбросить записав в регистр число 0b01000000 т.е. именно присвоить это число этому регистру а не выполнить операцию побитового или с данным числом. На схеме на рисунке 2 есть светодиод VD1. Этот светодиод нужен для того чтобы сигнализировать об окончании обмена с мастером т.к. если считать синхроимпульсы слишком долго то можно сбиться со счета а данный светодиод упрощает тестирование слейва вручную. Полный код программы приведен в текстовом поле ниже:
Подписаться на:
Комментарии к сообщению (Atom)
Комментариев нет:
Отправить комментарий