top of page
Управление устройствами через SPI

Можно ли управлять огромным количеством внешних устройств используя минимальные ресурсы микроконтроллера МК? Рассмотрим периферийный интерфейс SPI используемому во всех МК семейства Tiny и Mega для программирования флэш-памяти МК.

Выберем для эксперимента МК ATMega8 с тактовой частотой 8 мГц. В качестве периферийного устройства выберем 8-и разрядный сдвиговый регистр на базе 2-х четырёхразрядных регистров К155ТМ8.

  В интерфейсе SPI будем использовать следующие порты МК  ATMega8:

  1. PB5, он же SCK, программируется на выход, используется как канал синхронизации при программировании и записи в ТМ8.

  2. PB3, он же MOSI, программируется на выход, используется как канал выдачи данных при программировании и записи в ТМ8.

  3. PB4, он же MISO, программируется на вход, используется как канал данных контроля исключительно при программировании.

Также будем использовать PB1 как канал сброса внешнего регистра на ТМ8.

Так как канал SPI используется при программировании и записи во внешний регистр необходимо создать условия недопустимости нагрузки на канал менее 1к, что выполняется большим входным сопротивлением ТМ8. При программировании МК в ТМ8, могут записываться коды программы что  не представляет никакой опасности, так как при работе на реальный объект режим программирования отсутствует. Использование данного интерфейса для управления внешними устройствами необходимо его запрограммировать следующим образом:

  1. Определить МК как «МАСТЕР», биту MSTR регистра SPCR присвоить единицу, MSTR=1.

  2. Биту CPOL регистра SPCR присвоить единицу,  CPOL=1. Это означает что импульсы синхронизации SCK будут отрицательной полярности, а при отсутствии импульсов на выходе SCK будет присутствовать ВЫСОКИЙ уровень.

  3. Биту CPHA регистра SPCR присвоить единицу,  CPHA=1. Это означает, что обработка данных (в данном случае запись в ТМ8) производится по заднему фронту импульсов SCK, (в данном случае по нарастающему фронту SCK).

  4. Разрешение включения SPI, биту SPE  регистра SPCR присвоить единицу,  SPE=1.

На языке С да и в ассемблере  данное описание выглядит достаточно компактно  

 

             SPCR=(1<<SPE)+(1<<MSTR)+(1<<CPOL)+(1<<CPHA); Строка программы 1

 

Для программирования частоты записи (или скорости передачи) используются 2 бита регистра SPCR – SPR1 и SPR0 и один бит SPI2X регистра статуса SPSR. При SPR1= SPR0= SPI2X=0 скорость передачи максимальна и составляет fclk/4. В нашем случае это составляет 8000000/4=2 мГц. Если указанные биты не программируются, то по умолчанию они равны нулю. На Рис.1 представлена принципиальная схема.

Рис.1

Рис.1

Рис.2

Рис.3

bottom of page