Bascom avr spi. SPI интерфейс в микроконтроллерах AVR: конфигурация и использование в Bascom-AVR

Что такое SPI интерфейс. Как настроить SPI в Bascom-AVR. Какие режимы работы SPI существуют. Как использовать аппаратный и программный SPI. На что обратить внимание при работе с SPI.

Что такое SPI интерфейс и для чего он используется

SPI (Serial Peripheral Interface) — это высокоскоростной синхронный последовательный интерфейс, который широко применяется для связи между микроконтроллерами и периферийными устройствами. Основные особенности SPI:

  • Полнодуплексная связь (одновременная передача в обоих направлениях)
  • Режим ведущий-ведомый (master-slave)
  • Высокая скорость передачи данных (до нескольких МГц)
  • Простота реализации на уровне оборудования

SPI используется для подключения к микроконтроллеру различных устройств — АЦП, ЦАП, датчиков, дисплеев, карт памяти и т.д. Этот интерфейс является одним из самых распространенных в embedded-системах благодаря своей универсальности и эффективности.

Конфигурация SPI в Bascom-AVR

Для настройки SPI в Bascom-AVR используется директива Config SPI. Она позволяет задать все основные параметры интерфейса. Рассмотрим основные варианты конфигурации:


Программный SPI

При использовании программной эмуляции SPI можно задать произвольные выводы микроконтроллера для сигналов интерфейса:

Config SPI = Soft, Din = PinB.0, Dout = PortB.1, SS = PortB.2, Clock = PortB.3

Аппаратный SPI

Для использования аппаратного модуля SPI микроконтроллера применяется следующая конфигурация:

Config SPI = Hard, Interrupt = Off, Data_Order = MSB, Master = Yes, Polarity = Low, Phase = 0, Clockrate = 128

Здесь задаются основные параметры работы SPI — порядок битов, полярность и фаза тактового сигнала, скорость передачи и т.д.

Режимы работы SPI

Существует 4 режима работы SPI, которые определяются комбинацией параметров полярности (CPOL) и фазы (CPHA) тактового сигнала:

  • Режим 0: CPOL=0, CPHA=0
  • Режим 1: CPOL=0, CPHA=1
  • Режим 2: CPOL=1, CPHA=0
  • Режим 3: CPOL=1, CPHA=1

От выбранного режима зависит, в какой момент будут считываться и устанавливаться биты данных относительно тактового сигнала. Правильный режим необходимо выбирать в соответствии с документацией на подключаемое SPI-устройство.


Использование аппаратного SPI

Аппаратный SPI является предпочтительным вариантом, когда он доступен в микроконтроллере. Его преимущества:

  • Более высокая скорость передачи данных
  • Меньшая загрузка процессора
  • Поддержка режима ведомого (slave)

Для использования аппаратного SPI необходимо:

  1. Выполнить конфигурацию с помощью Config SPI = Hard
  2. Инициализировать SPI командой SPIINIT
  3. Использовать команды SPIIN, SPIOUT для обмена данными

Пример отправки байта по SPI:

Dim data As Byte
data = 123
SPIOUT data, 1

Особенности работы с сигналом SS

Сигнал SS (Slave Select) используется для выбора ведомого устройства при работе с несколькими SPI-устройствами. При работе с аппаратным SPI необходимо учитывать следующее:

  • Вывод SS должен быть настроен как выход даже если не используется
  • Для отключения автоматического управления SS используется параметр NOSS=1
  • При NOSS=1 нужно вручную управлять сигналом SS перед обменом данными

Пример работы с несколькими устройствами:

Config SPI = Hard, NOSS=1
SS1 Alias PORTB.2
SS2 Alias PORTB.3

SS1 = 0 'Выбор первого устройства
SPIOUT data1, 1
SS1 = 1

SS2 = 0 'Выбор второго устройства  
SPIOUT data2, 1
SS2 = 1

Программная реализация SPI

Программный SPI позволяет использовать произвольные выводы микроконтроллера для организации интерфейса. Это может быть полезно, когда:


  • Аппаратный SPI недоступен или занят
  • Требуется подключить большое количество устройств
  • Нужна гибкость в выборе выводов

Для настройки программного SPI указываются конкретные выводы:

Config SPI = Soft, Din = PinB.0, Dout = PortB.1, SS = PortB.2, Clock = PortB.3

Затем используются те же команды SPIINIT, SPIIN, SPIOUT для работы с интерфейсом.

Оптимизация производительности SPI

Для достижения максимальной скорости обмена по SPI рекомендуется:

  • Использовать аппаратный SPI, где это возможно
  • Выбирать максимально возможную тактовую частоту (параметр Clockrate)
  • Отключать прерывания SPI, если они не нужны
  • Использовать команду SPIMOVE для одновременной отправки и приема
  • Передавать данные блоками, а не по одному байту

Пример оптимизированной передачи блока данных:

Dim data(100) As Byte SPIMOVE data(1), 100

Обработка ошибок при работе с SPI

При работе с SPI могут возникать различные ошибки и проблемы. Основные способы их обнаружения и устранения:

  • Проверка флага SPIF после передачи для подтверждения завершения
  • Использование тайм-аутов при ожидании ответа от устройства
  • Проверка корректности принятых данных (контрольные суммы)
  • Отслеживание состояния линии MISO при работе в режиме мастера

Пример обработки ошибки тайм-аута:


SPIOUT data, 1
Start Timer1
Do
  If SPIF = 1 Then Exit Do
  If Timer1 > 100 Then
    Print "SPI timeout error"
    Exit Do  
  End If
Loop

Заключение

SPI является мощным и гибким интерфейсом для организации связи в микроконтроллерных системах. Правильная настройка и использование SPI в Bascom-AVR позволяет эффективно работать с широким спектром периферийных устройств. Важно учитывать особенности как аппаратной, так и программной реализации SPI для достижения оптимальной производительности и надежности обмена данными.


Bascom avr spi

Вернуться в Микроконтроллеры. Сейчас этот форум просматривают: Google [Bot] и гости: 1. Как соединить две АТмеги на одном роботе? Разработка и изготовление печатных плат для модулей.


Поиск данных по Вашему запросу:

Схемы, справочники, даташиты:

Прайс-листы, цены:

Обсуждения, статьи, мануалы:

Дождитесь окончания поиска во всех базах.

По завершению появится ссылка для доступа к найденным материалам.

Содержание:

  • Справочник по программированию «Bascom-AVR» (М.Л. Кулиш)
  • roboforum.ru
  • AVR Урок 29. SPI. Внешний АЦП MCP 3201
  • Прошиваем ардуину из BASCOM AVR
  • SPI BASCOM AVR
  • Радиомодули NRF24L01 Atmega8A
  • SPI BASCOM AVR

ПОСМОТРИТЕ ВИДЕО ПО ТЕМЕ: SPI Basic Programming

Справочник по программированию «Bascom-AVR» (М.Л. Кулиш)


Интерфейс SPI позволяет организовать последовательную синхронную высокоскоростную передачу данных между ATmega и другим периферийным устройством или между несколькими AVR-микроконтроллерами. Рисунок Функциональная схема интерфейса SPI. Система состоит из двух сдвиговых регистров и генератора ведущей синхронизации. Ведущий SPI инициирует сеанс связи подачей низкого уровня на вход SS того подчиненного устройства, с которым необходимо обмениваться данными.

Оба респондента ведущий и подчиненный подготавливают данные к передаче в своем сдвиговом регистре, при этом на стороне ведущего генерируются также импульсы синхронизации на линии SCK. По окончании передачи каждого пакета данных ведущий SPI должен засинхронизировать подчиненный путем подачи высокого уровня на линию SS выбор подчиненного интерфейса.

Данная операция должна быть выполнена программно перед началом сеанса связи. После этого, запись в регистр данных SPI инициирует генерацию синхронизации и аппаратный сдвиг 8-ми разрядов в подчиненное устройство. Мастер может продолжить сдвигать следующий байт, если записать его в регистр SPDR, или подать сигнал окончания пакета путем установки низкого уровня на линии SS. Последний принятый байт сохраняется в буферном регистре.

В режиме подчиненного, интерфейс SPI находится в состоянии ожидания, в котором MISO переводится в третье состояние, до тех пор, пока на выводе SS присутствует высокий уровень. В этом состоянии программа может обновлять содержимое регистра данных SPI SPDR , но при этом входящие импульсы синхронизации не сдвигают данные до подачи низкого уровня на вывод SS.

После того как один байт был полностью сдвинут, устанавливается флаг окончания передачи SPIF. Подчиненный может продолжать размещать новые данные для передачи в регистр SPDR перед чтением входящих данных. Последний принятый байт хранится в буферном регистре. Внешнее соединение ведущего мастера и подчиненного SPI.

В направлении передачи данных система выполнена как однобуферная, а в направлении приема используется двойная буферизация. Это означает, что передаваемые байты не могут быть записаны в регистр данных SPI, прежде чем полностью завершится цикл сдвига.

Во время приема данных необходимо следить, чтобы принятая посылка была считана из регистра данных SPI, прежде чем завершится цикл входящего сдвига новой посылки. В противном случае первый байт будет потерян. В следующих примерах показаны инициализация SPI как мастера и организация простой передачи данных.

Например, если MOSI размещен на выв. В следующем примере показано как инициализировать SPI как подчиненного и как выполнить простой прием данных. Последовательный периферийный интерфейс — SPI Интерфейс SPI позволяет организовать последовательную синхронную высокоскоростную передачу данных между ATmega и другим периферийным устройством или между несколькими AVR-микроконтроллерами.

Функциональная схема интерфейса SPI Прим. Внешнее соединение ведущего мастера и подчиненного SPI В направлении передачи данных система выполнена как однобуферная, а в направлении приема используется двойная буферизация.

Таблица Поиск по сайту:. По базе:. Мероприятия: Реклама:. Реклама на сайте О проекте Карта портала тел.


roboforum.ru

Продолжаем цикл уроков по шине SPI. И сегодня мы впервые поработаем с данной шиной на приём данных от устройства. Я думаю этого уже многие ждут с нетерпением. Для этого мы возьмём микросхему MCP Эта микросхема является внешним аналого-цифровым преобразователем.

Обзор IDE BASCOM AVR. по шинам I2C (шина, известная также как IIC и TWI), 1-wire (стандарт де-факто от компании Dallas Semiconductors), SPI.

AVR Урок 29. SPI. Внешний АЦП MCP 3201

Самую свежую с лекарством. Программирование AVR на Бэйсике — это просто! Соблюдайте технику безопасности! Используйте средства защиты. Думайте и только потом делайте. Всегда защищайте глаза! Не работайте с приборами под высоким или сетевым напряжением, а если все же придется то не работайте в одиночку и одну руку всегда держите за спиной. Настройки в Bascom 4. Первая программа 5.

Прошиваем ардуину из BASCOM AVR

Прерывания в микроконтроллере AVR возникают при возникновении событий, обусловленных изменением состояния аппаратного компонента периферии, находящейся на кристалле. Предусмотрено прерывания по следующим событиям:. Возможные варианты срабатывания на низкий, высокий или любое изменение уровня;. Наличие событий прерывания и сочетание с другими функциями определяется моделью микроконтроллера. Для каждого типа прерываний предусмотрен собственный вектор — адрес, с которого начинается исполнения программы в случае регистрации события.

Интерфейс SPI позволяет организовать последовательную синхронную высокоскоростную передачу данных между ATmega и другим периферийным устройством или между несколькими AVR-микроконтроллерами. Рисунок

SPI BASCOM AVR

Обладает неожиданно продвинутым функционалом. Она не имеет функциональных ограничений, за исключением лимита на объем кода байт, запрещается только удалять из кода ссылки на компанию MCS Electronics, и отсутствуют исходники для дополнений от других компаний. Софтверный симулятор у меня почему-то работал криво — уходил в непрерывный запуск, когда я пытался выполнять операторы пошагово. Однако есть приятная возможность — объектный файл расширение. Отлаживать можно прямо по исходному коду на Basic, работают точки останова, пошаговое выполнение. Далее при внесении изменений в код и перекомпиляции AVR Studio предупреждает об этом и дает возможность перезагрузить код.

Радиомодули NRF24L01 Atmega8A

Войдите , пожалуйста. Хабр Geektimes Тостер Мой круг Фрилансим. Мегапосты: Криминальный квест HR-истории Путешествия гика. Войти Регистрация. А еще он почему-то у меня очень ме-е-едленно компилирует, а потом долго думает перед прошивкой. Я постараюсь рассказать об альтернативной среде для программирования AVR-контроллеров, которая совмещает в себе редактор кода, компилятор, и отладчик-симулятор.

‘АЦП 12Бит 4 канала MCP $regfile = «all-audio.pro» $crystal = $ hwstack = $swstack = 64 $framesize = Config Spi = Hard.

SPI BASCOM AVR

Логин или эл. Войти или Зарегистрироваться. Авторизация Логин или эл.

These devices are available with different memory sizes, different packages and moreover with some, and different, Communication Protocols. In this chapter well descrive the SPI Protocol. The devices can be Written a very high number of times and they can be Read without limits, as standard RAM. The internal structure is reported in the following Diagram that lists all the logic blocks included in the device. Over the Read and Write commands naturally there is the address that specifies the location to use.

Войдите , пожалуйста. Хабр Geektimes Тостер Мой круг Фрилансим.

Интерфейс SPI, пожалуй, самый распространенный интерфейс коммуникации между микроконтроллерами и периферией. Он широко распространился за счет универсальности, простоты реализации и высокой скорости передачи данных по шине. Поэтому пришло время подобраться к этому интерфейсу поближе и разобраться с принципом работы в Bascom-AVR. Пример подключения одного подчиненного устройства к ведущему:. В это время на выводе SCLK генерируются импульсы, которые задвигают данные в регистр. Чтобы подчиненное устройство знало, что работают именно с ним, контроллер должен просадит его линию SS к земле.

Это удел избранных и в лучшем случае мы останавливаемся на повторении готовых изделий. Я попытаюсь опровергнуть устоявшееся мнение и доказать, что программирование МК не такое уж сложное дело. Если за день Вы и не станете профессионалом, то гарантированно сможете пройти курс ускоренного обучения с теорией, практикой и готовой конструкцией, способной укрепить Вашу веру в собственные силы. Я предполагаю, что Вы имеете опыт пользователя ПК и владеете паяльником, а также в состоянии отличить Вольт от Ома и микросхему от трансформатора.


Decada

Автор: WildCatМаломощные микроконтроллеры AVR

С расширением линейки МК AVR, появилось множество новых моделей контроллеров для выполнения самых разных задач. Одним из направлений стал выпуск линейки ATTiny микроконтроллеров для небольших приложений с низким энергопотреблением. Сам производитель базирует их как «маломощные», но на самом деле это не совсем так. Посмотрим для примера на ATTiny13 в восьмилапом SMD исполнении. У него 1 килобайт программной памяти, 64 байта оперативной памяти и 64 байта EEPROM. Для использования нам доступны 5 лапок ввода/вывода. Хоть контроллер и называется Tiny, но он может работать на скорости до 20 МГц! И его можно программировать точно так же через SPI, как и старших собратьев.

Убедитесь, что вы прочитали даташит ATTiny13.

Соберем следующую схему:

Запустим TWinAvr и нажмем Config. Мы увидим настройки фузов для «чистого» ATTiny13:

По умолчанию ATTiny13 поставляется с включенным внутренним RC генератором частотой 9.6 МГц. При делении на 8 он дает тактовую частоту примерно 1.2 МГц. Вы можете убрать фуз CK8DIV, чтобы заставить работать контроллер на полной скорости.
Сам ATTiny может работать на частотах до 20 МГц. Для этого нужно установить фуз CKSEL в «00» и подключить внешний тактовый генератор к выводу 2 (PB2/CKLI).

Теперь давайте запрограммируем мигающий светодиод:
ledflasher.bas


'The ATTiny2313 is used.
$regfile = "ATtiny13.dat"
$crystal = 1200000

Config Portb = Output

Do
  Portb = 255
  Waitms 50
  Portb = 0
  Waitms 50
Loop

End

На самом деле ATTiny может гораздо больше. У него на борту есть 10-битный АЦП на выводах 1, 2, 3 и 7. Вот пример программы, считывающей значение АЦП с одного из каналов:
readadc.bas


'The ATTiny13 is used.
$regfile = "ATtiny13.dat"
$crystal = 1200000

Config Portb.2 = Output
Led Alias Portb.2
Config Adc = Single , Prescaler = Auto , Reference = Internal

Dim Adcin As Word

Open "comb.1:9600,8,n,1" For Output As #1
Open "comb.0:9600,8,n,1" For Input As #2
Start Adc

Do
  Set Led
  Waitms 500

  'get adc reading on channel 3 (pin 2 on attiny13)
  Adcin = Getadc(3)
  Print #1 , "adc ch#3: " ; Adcin
  Reset Led
  Waitms 500
Loop

End

Программный UART используется для отправки полученных данных в компьютер. Вы можете использовать терминал в Bascom для просмотра результатов. (Tools / Terminal emulator).
Хоть в программе и открыт порт comb.0 и настроен на вход, в программе он не используется. Но вы можете попробовать отправлять на него команды с терминала.
Вся эта программа заняла чуть больше 50% программной памяти, это с учетом библиотек для организации программного UART, которые сами по себе немаленькие. Так что для небольших приложений контроллеры ATTiny подходят идеально!

CONFIG SPI

Действие

Настраивает режим SPI и контакты.

 

 

Синтаксис программного обеспечения SPI

КОНФИГУРАЦИЯ SPI|SPISOFT = МЯГКАЯ, DIN = PIN, DOUT = PIN, SS = PIN|NONE, CLOCK = PIN, SPIIN=значение, MODE=режим, SPEED=скорость, SETUP =setup , EXTENDED=ext

 

 

Синтаксис для аппаратного SPI

КОНФИГУРАЦИЯ SPI|SPIHARD = HARD, INTERRUPT=ON|OFF, DATA_ORDER = LSB|MSB , MASTER = YES|NO , POLARITY = HIGH| = 0|1, CLOCKRATE = 4|16|64|128, NOSS=1|0, SPIIN=value, EXTENDED=ext

 

 

Синтаксис для аппаратного SPI1

КОНФИГУРАЦИЯ SPI1 = HARD, INTERRUPT=ON|OFF, DATA_ORDER = LSB|MSB , MASTER = YES|NO , POLARITY = HIGH|LOW , PHASE = 0|1, 4 CLOCKRATE |16|64|128 , NOSS=1|0 , SPIIN=значение

 

 

Если вы просто хотите использовать один подчиненный чип SPI с помощью HW SPI, используйте это: Config Spi = Hard , Interrupt = Off , Data_Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128

Если вам нужна дополнительная информация, ознакомьтесь с подробностями и параметрами ниже.

 

 

Примечания ПО SPI

SPI

МЯГКАЯ

для программной эмуляции SPI, это позволяет вам выбирать контакты для использования. Работает только в мастер-режиме.

 

HARD для внутреннего оборудования SPI, которое будет использовать фиксированные выводы микропроцессора.

DIN

Ввод данных или MISO. PIN-код — это номер контакта для использования, например PINB.0

ДВЫХ

Вывод данных или MOSI. PIN-код — это номер контакта, например PORTB.1

.

нержавеющая сталь

Выбор ведомого. PIN-код — это номер контакта, например PORTB.2

.

 

Используйте NONE, если вы не хотите, чтобы генерировался сигнал SS. См. примечания. Или в качестве альтернативы вы можете использовать: NOSS=1.

ЧАСЫ

Часы. PIN-код — это номер контакта, например PORTB.3

.

ЗАКАЗ ДАННЫХ

Выбирает, будет ли сначала передаваться MSB или LSB.

Для программного SPI также необходимо использовать опцию MODE.

В противном случае доступен только заказ MSB.

МАСТЕР

Выбирает, работает ли SPI в ведущем или ведомом режиме.

СПИН

При чтении с подчиненного устройства SPI не должно иметь значения, какие данные вы отправляете. Но для некоторых микросхем требуется значение 255, а для других требуется значение 0. По умолчанию, когда опция SPIIN не указана, ведомому SPI будет отправлено значение 0. С помощью этой опции SPIIN вы можете переопределить это значение.

РЕЖИМ

Константа в диапазоне от 0 до 3, определяющая РЕЖИМ SPI.

Без РЕЖИМА будет использоваться режим 1 по умолчанию.

Также при использовании MODE будет использоваться новый код SPI.

При использовании РЕЖИМА вы также можете указать СКОРОСТЬ и НАСТРОЙКА.

РЕЖИМ

предназначен только для программного SPI!

 

Режим

Передняя кромка

Задняя кромка

0

Рост, образец

Падение, установка

1

Подъем, установка

Падение, образец

2

Падение, образец

Подъем, установка

3

Падение, Настройка

Рост, образец

СКОРОСТЬ

Числовая константа для дополнительной задержки. Эта задержка внутри нас. Когда вы укажете 1, это приведет к задержке в 2 мкс: 1 мкс до и 1 мкс после часов. По умолчанию задержки нет. Задержка может потребоваться только для медленных подчиненных микросхем.

СКОРОСТЬ применяется, только если указан РЕЖИМ.

НАСТРОЙКА

Настройка — это задержка в мкс перед выборкой вывода MISO. Необходимо использовать числовую константу.

НАСТРОЙКА предназначена только для программного SPI и при использовании РЕЖИМА!

РАСШИРЕННЫЙ

Необязательный параметр для увеличения максимального размера данных для чтения/записи.

Значение по умолчанию, равное 0, заставит процедуры SPIIN, SPIIOUT, SPIMOVE обрабатывать максимальный размер данных 255 байт.

 
Значение 1 увеличит размер данных с байтов до слов, что означает, что вы можете перемещать данные размером 65535 байт.

 

 

Программный SPI позволяет выбрать выводы процессора для работы SPI. Обычно вам нужны контакты MISO, MOSI, CLOCK и SS.

Хотя это и преимущество, недостатком является то, что программный SPI использует больше ресурсов процессора.

 

В программном режиме SPI инструкция SPIINIT установит для выводов SPI соответствующий логический уровень. Например:

sbi PORTB,5 ;установить бит защелки hi (неактивный)SS

sbi DDRB,5 ;сделать его выходом SS

cbi PORTB,4 ;установить clk line lo

sbi DDRB,4 ;сделать его 0 an

cbi PORTB,6 ;set data-out lo MOSI

sbi DDRB,6 ;сделать выходным MOSI

cbi DDRB,7  ;MISO input

Ret

 

Это просто пример. Фактический код отличается от процессора к процессору. А также зависит от используемых контактов порта.

 

В большинстве случаев для управления/адресации используется только один подчиненный чип. В таком случае вам нужен только один вывод ведомого (SS) для управления этим чипом. Но SPI также можно использовать для управления несколькими ведомыми устройствами SPI.

Эти ведомые устройства должны использовать один и тот же режим. Вы не можете динамически изменять режим SPI во время выполнения.

 

BASCOM автоматически установит на выводе SS логический уровень 0 при использовании команды SPI. И когда команда SPI будет выполнена, она установит вывод SS обратно в логическую 1.

Когда подчиненный чип имеет инвертированный вывод SS (для его активации требуется 1), вы не можете использовать эту автоматическую генерацию сигнала SS.

Если вы хотите адресовать несколько ведомых устройств с помощью программного SPI, вам потребуется несколько контактов для выбора различных ведомых микросхем. В этом случае также нельзя использовать автоматическую генерацию сигнала SS.

Решение состоит в том, чтобы указать NONE для SS. Это устранит автоматическую генерацию сигнала SS. Но это также означает, что вы, как пользователь, должны справиться с этим. На практике это означает:

— выберите вывод порта, который будет служить выводом SS

— установите его на выход и на правильный логический уровень (в большинстве случаев 1 для отключения ведомого устройства)

— перед использованием оператора SPI выберите ведомое устройство, нажав SS логический 0.

— после оператора SPI установите логический уровень SS обратно на 1.

 

Конфигурация Spi = Soft, Din = Pinb.0, Dout = Portb.1, Ss = NONE, Clock = Portb.3
Псевдоним MySS portb.2
Конфигурация MySS=OUTPUT : MySS=1 ‘ деактивировать
Dim var As Byte
SPIINIT                     ‘ Инициализировать состояние и контакты SPI.
MySS=0                     ‘ выберите SS
SPIOUT var , 1             ‘ отправить 1 байт
Myss = 1 ‘Deselect SS

ЗАМЕЧАНИЯ Аппаратное обеспечение SPI

SPI

МЯГКАЯ

для программной эмуляции SPI, это позволяет вам выбирать контакты для использования. Работает только в мастер-режиме.

 

HARD для внутреннего оборудования SPI, которое будет использовать фиксированные выводы микропроцессора.

ЗАКАЗ ДАННЫХ

Выбирает, будет ли сначала передаваться MSB или LSB.

МАСТЕР

Выбирает, работает ли SPI в ведущем или ведомом режиме.

ПОЛЯРНОСТЬ

Выберите HIGH, чтобы установить на линии CLOCK высокий уровень, пока SPI находится в режиме ожидания. LOW переводит часы в состояние LOW во время простоя.

ФАЗА

Обратитесь к техническому паспорту, чтобы узнать о различных настройках в сочетании с полярностью.

ЧАСОВАЯ ЧАСТЬ

Тактовая частота выбирает деление частоты генератора, который служит тактовым сигналом SPI. Таким образом, с 4 у вас будет тактовая частота 4.000000 / 4 = 1 МГц, когда используется XTAL 4 МГц.

NOSS

1 или 0. Используйте 1, если вы не хотите, чтобы сигнал SS автоматически генерировался в ведущем режиме.

ПРЕРЫВАНИЕ

Укажите ВКЛ или ВЫКЛ. ON разрешает прерывания SPI. В то время как OFF отключает прерывания SPI. ENABLE SPI и DISABLE SPI сделают то же самое.

СПИН

При чтении с подчиненного устройства SPI не должно иметь значения, какие данные вы отправляете. Но для некоторых микросхем требуется значение 255, а для других требуется значение 0. По умолчанию, когда опция SPIIN не указана, ведомому SPI будет отправлено значение 0. С помощью этой опции SPIIN вы можете переопределить это значение.

РАСШИРЕННЫЙ

Необязательный параметр для увеличения максимального размера данных для чтения/записи.

Значение по умолчанию, равное 0, заставит процедуры SPIIN, SPIIOUT, SPIMOVE обрабатывать максимальный размер данных 255 байт.

 
Значение 1 увеличит размер данных с байтов до слов, что означает, что вы можете перемещать данные размером 65535 байт.

 

 

Аппаратный SPI — лучший вариант, когда он доступен. Аппаратный SPI может использоваться в ведущем и ведомом режимах. Все операторы BASCOM SPI являются процедурами основного режима.

Единственным недостатком является то, что вы должны использовать специальные аппаратные контакты, включая контакт SS!

 

При использовании CONFIG SPI = HARD без каких-либо других параметров будет включен только SPI. Тогда он будет работать в ведомом режиме с CPOL =0 и CPH=0.

 

В аппаратном режиме spi инструкция SPIINIT установит для выводов SPI следующие значения:

SCK = Ouput

MISO = Input

MOSI = Output

В режиме Master вывод SS также будет установлен на вывод SS.

 

Как объяснялось для программного SPI, не всегда желательно использовать вывод SS для управления подчиненным чипом SPI. Поскольку вы хотите использовать другой контакт, используйте несколько ведомых устройств, или ведомые устройства имеют инвертированный сигнал SS.

Поскольку аппаратный SPI всегда имеет вывод SS, для него существует переопределение с другим именем, чем для программного spi: NOSS=0|1

Таким образом, где SS=NONE используется для SOFT SPI, чтобы отключить автоматическую генерацию сигнала SPI. , HARDWARE SPI использует опцию NOSS=1, чтобы сделать то же самое. NOSS означает НЕТ генерации сигнала SS.

Когда NOSS не используется или NOSS=0, будет использоваться значение по умолчанию, где выделенный вывод SS будет создавать сигналы выбора ведомого устройства.

 

Одно большое отличие программного SPI заключается в том, что для использования SPI в ведущем режиме вывод SS должен быть установлен в режим вывода. Даже если вы не используете выделенный вывод SS для управления подчиненным чипом SPI!

Когда контакт SS находится в режиме ввода, логический 0 на входе переводит режим ведущего в режим ведомого. Подтягивающий резистор может сделать то же самое, но мы советуем: используйте контакт SS в качестве выходного контакта.

Вывод SS устанавливается в режим вывода, когда выбран режим MASTER. Таким образом, даже если NOSS=1, вывод SS устанавливается в режим вывода, когда MASTER=YES.

 

 

При использовании NOSS=1 : Чтобы использовать аппаратный SPI в ведущем режиме, необходимо установить вывод SS на выход. В режиме ввода этот контакт можно использовать для перевода шины SPI в подчиненный режим. Вам нужно только установить пин для вывода, когда вы используете опцию NOSS=1. При NOSS=0 компилятор установит вывод SS на вывод и установит логику вывода SS в 1.

Когда используется NOSS=1, контакт SS становится выходным контактом только в режиме MASTER. Логический уровень не устанавливается, когда NOSS=1.

 

В этой таблице показано, как устанавливается вывод SS с различными параметрами режима HW.

РЕЖИМ

NOSS

PIN-код из нержавеющей стали

МАСТЕР

0

выход, логическая 1


1

выход, логический уровень без изменений

ПОДЧИНЕННЫЙ

0

ввод


1

ввод

 

Все подпрограммы SPI являются ведущими подпрограммами SPI. В каталоге примеров вы также найдете образец аппаратного ведущего устройства SPI и ведомого устройства SPI.

Протокол SPI описан в главе: Использование протокола SPI. частота.

 

 

Микросхемы с 2 полными портами SPI

Некоторые новые процессоры, такие как ATMEGA328PB, имеют 2 порта SPI. Чтобы использовать этот второй порт SPI, вы должны добавить «1» к оператору.

CONFIG SPI1

SPI1IN

SPI1OUT

SPI1INIT

SPI1MOVE

 

 

See also

SPIIN , SPIOUT , SPIINIT , SPI , SPIMOVE

 

 

Example for Software SPI

Config Spi = Soft , Din = Pinb.0, Dout = Portb.1, Ss = Portb.2, Clock = Portb.3
Dim var As Byte
SPIINIT ‘Инициализировать состояние и контакты SPI.
SPIOUT var, 1 ‘отправить 1 байт

 

 

Пример аппаратного SPI, 1 ведомое устройство

Конфигурация Spi = Hard, Interrupt = Off, Data_Order = Msb, Master = Yes, Polarity = High, Phase = 1, Clockrate = 4, Noss = 0

Spiinit

 

Использование протокола SPI

Общее описание SPI

 

SPI обеспечивает высокоскоростную синхронную передачу данных между AVR и периферийными устройствами или между несколькими устройствами AVR. В большинстве случаев SPI имеет вторую цель, когда он используется для системного программирования (ISP).

 

Соединение между двумя устройствами SPI всегда происходит между ведущим устройством и ведомым устройством. По сравнению с некоторыми периферийными устройствами, такими как датчики, которые могут работать только в ведомом режиме, SPI AVR можно настроить как для ведущего, так и для ведомого режима.

 

Режим, в котором работает AVR, определяется настройками главного бита (MSTR) в регистре управления SPI (SPCR).

 

Необходимо учитывать особые соображения, касающиеся вывода /SS. Это будет описано позже в разделе «Системы с несколькими ведомыми устройствами — функциональность вывода /SS».

 

Мастер является активной частью этой системы и должен обеспечивать тактовый сигнал, на котором основана последовательная передача данных. Ведомое устройство не способно генерировать тактовый сигнал и, следовательно, не может активироваться самостоятельно.

 

Ведомое устройство только отправляет и принимает данные, если ведущее устройство генерирует необходимый тактовый сигнал. Однако мастер генерирует тактовый сигнал только при отправке данных. Это означает, что ведущее устройство должно отправлять данные ведомому устройству, чтобы считать данные с ведомого устройства.

 

 

Передача данных между ведущим и ведомым

 

Взаимодействие между ведущим и ведомым AVR показано на рисунке 1. Отображаются два идентичных блока SPI. Левый блок настроен как ведущий, а правый — как ведомый. Линии MISO, MOSI и SCK соединяются с соответствующими линиями другой части.

 

Режим, в котором работает часть, определяет, являются ли они входными или выходными сигнальными линиями. Поскольку бит сдвигается от ведущего к ведомому и от ведомого к ведущему одновременно за один такт, оба 8-битных регистра сдвига можно рассматривать как один 16-битный циклический регистр сдвига. Это означает, что после восьми тактовых импульсов SCK произойдет обмен данными между ведущим и ведомым.

 

Система имеет одинарную буферизацию в направлении передачи и двойную буферизацию в направлении приема. Это влияет на обработку данных следующим образом:

 

1. Новые отправляемые байты не могут быть записаны в регистр данных (SPDR) / сдвиговый регистр до завершения всего цикла сдвига.

2. Полученные байты записываются в буфер приема сразу после завершения передачи.

3. Перед завершением следующей передачи необходимо прочитать буфер приема, иначе данные будут потеряны.

4. При чтении SPDR будут возвращены данные приемного буфера.

 

После завершения передачи флаг прерывания SPI (SPIF) будет установлен в регистре состояния SPI (SPSR). Это приведет к выполнению соответствующего прерывания, если это прерывание и глобальные прерывания разрешены. Установка бита разрешения прерывания SPI (SPIE) в SPCR разрешает прерывание SPI, а установка бита I в SREG разрешает глобальные прерывания.

 

 

Выводы SPI

 

SPI состоит из четырех различных сигнальных линий. Этими линиями являются часы сдвига (SCK), линия Master Out Slave In (MOSI), линия Master In Slave Out (MISO) и активная линия выбора подчиненного устройства с низким уровнем (/SS). Когда SPI включен, направление данных выводов MOSI, MISO, SCK и /SS переопределяется в соответствии со следующей таблицей.

 

 

Таблица 1. Переопределение выводов SPI

Переопределение направления выводов

Переопределение направления режима главного SPI

Ведомые режимы SPI

МОСИ

Определяется пользователем

Ввод

МИСО

Ввод

Определяется пользователем

СКК

Определяется пользователем

Ввод

нержавеющая сталь

Определяется пользователем

Ввод

 

 

В этой таблице показано, что автоматически настраиваются только входные контакты. Выходные контакты должны быть инициализированы вручную программным обеспечением. Это делается для того, чтобы избежать повреждений, т.е. из-за конфликта драйверов.

 

 

Системы с несколькими ведомыми устройствами — Функциональность контакта /SS

Контакт выбора ведомого устройства (/SS) играет центральную роль в конфигурации SPI. В зависимости от режима, в котором работает деталь, и конфигурации этого контакта, его можно использовать для активации или деактивации устройств. Вывод /SS можно сравнить с выводом выбора микросхемы, который имеет некоторые дополнительные функции. В ведущем режиме вывод /SS должен быть высоким, чтобы обеспечить работу главного SPI, если этот вывод сконфигурирован как входной. Низкий уровень переключит SPI в ведомый режим, и оборудование SPI выполнит следующие действия:

 

1. Главный бит (MSTR) в регистре управления SPI (SPCR) очищается, и система SPI становится ведомой. Направление контактов будет переключаться в соответствии с таблицей 1.

 

2. Будет установлен флаг прерывания SPI (SPIF) в регистре состояния SPI (SPSR). Если прерывание SPI и глобальные прерывания разрешены, будет выполнена процедура обработки прерывания. Это может быть полезно в системах с более чем одним мастером, чтобы избежать одновременного доступа к шине SPI двух мастеров. Если контакт /SS настроен как выходной контакт, его можно использовать как выходной контакт общего назначения, который не влияет на систему SPI.

 

 

Примечание. В случаях, когда AVR настроен на режим ведущего и невозможно гарантировать, что вывод /SS будет оставаться высоким между двумя передачами, состояние бита MSTR должно быть проверено перед новым байтом. написано. После сброса бита MSTR низким уровнем на линии /SS он должен быть установлен приложением для повторного включения режима ведущего SPI.

 

 

В ведомом режиме контакт /SS всегда является входом. Когда /SS удерживается на низком уровне, SPI активируется, и MISO становится выходным, если это настроено пользователем. Все остальные контакты являются входами. Когда /SS имеет высокий уровень, все контакты являются входными, а SPI пассивен, что означает, что он не будет получать входящие данные.

 

В таблице 2 представлен обзор функциональных возможностей контакта /SS.

 

 

Примечание. В подчиненном режиме логика SPI будет сброшена, как только на выводе /SS будет установлен высокий уровень. Если во время передачи на вывод /SS устанавливается высокий уровень, SPI немедленно прекращает отправку и прием, и как полученные, так и отправленные данные должны считаться потерянными.

 

 

ТАБЛИЦА 2. Обзор контакта SS.

Режим

/SS Конфигурация

/SS Уровень контакта

Описание

Подчиненный

Всегда вводите

Высокий

Ведомый деактивирован

Низкий

Подчиненный активирован

Мастер

Ввод

Высокий

Мастер активирован

Низкий

Мастер деактивирован

Выход

Высокий

Мастер активирован

Низкий

 

 

Как показано в таблице 2, вывод /SS в ведомом режиме всегда является входным. Низкий уровень активирует SPI устройства, а высокий уровень вызывает его деактивацию. Система с одним ведущим и несколькими ведомыми устройствами с AVR, настроенным в режиме ведущего, и /SS, настроенным в качестве выходного контакта, показана на рисунке 2. Количество ведомых устройств, которые можно подключить к этому AVR, ограничено только количеством контактов ввода/вывода для генерировать сигналы выбора ведомого.

 

 

 

Возможность подключения нескольких устройств к одной SPI-шине основана на том, что одновременно активен только один ведущий и только один ведомый. Линии MISO, MOSI и SCK всех остальных ведомых устройств имеют три состояния (настроены как входные контакты с высоким импедансом без включенных подтягивающих резисторов). Неверная реализация (например, если два ведомых устройства активированы одновременно) может вызвать конфликт драйверов, который может привести к защелкиванию CMOS, и этого следует избегать. Сопротивления от 1 до 10 кОм последовательно с контактами SPI могут использоваться для предотвращения защелкивания системы. Однако это влияет на максимальную используемую скорость передачи данных, в зависимости от нагрузочной емкости на выводах SPI.

 

 

Однонаправленным устройствам SPI требуется только линия синхронизации и одна из линий данных. Использует ли устройство линию MISO или линию MOSI, зависит от его назначения. Например, простые датчики просто отправляют данные (см. S2 на рис. 2), в то время как внешний ЦАП обычно просто принимает данные (см. S3 на рис. 2).

 

 

Синхронизация SPI

SPI имеет четыре режима работы, от 0 до 3. Эти режимы в основном управляют тем, как данные синхронизируются в устройстве SPI или из него. Конфигурация выполняется двумя битами в регистре управления SPI (SPCR). Полярность тактового сигнала определяется битом управления CPOL, который выбирает активный высокий или активный низкий тактовый сигнал. Бит управления фазой синхронизации (CPHA) выбирает один из двух принципиально разных форматов передачи. Для обеспечения правильной связи между ведущим и ведомым оба устройства должны работать в одном и том же режиме. Это может потребовать реконфигурации ведущего устройства для соответствия требованиям различных периферийных ведомых устройств.

 

Настройки CPOL и CPHA определяют различные режимы SPI, показанные в Таблице 3. Поскольку это не стандарт, а в другой литературе указано иначе, настройка SPI должна выполняться тщательно.

 

 

Таблица 3. Конфигурация режима SPI

Режим SPI

КПОЛ

CPHA

Кромка переключения SCK

Захват края SCK

0

0

0

Падение

Восходящий

1

0

1

Восходящий

Падение

2

1

0

Восходящий

Падение

3

1

1

Падение

Восходящий

 

 

Полярность часов не оказывает существенного влияния на формат передачи. Переключение этого бита приводит к инвертированию тактового сигнала (активный высокий уровень становится активным низким, а низкий уровень простоя становится высоким). Однако настройки фазы синхронизации выбирают одно из двух различных значений времени передачи, которые более подробно описаны в следующих двух главах. Поскольку линии MOSI и MISO ведущего и ведомого напрямую связаны друг с другом, на диаграммах показана синхронизация обоих устройств, ведущего и ведомого. Строка /SS равна

вход выбора ведомого ведомого. Вывод /SS ведущего устройства на диаграммах не показан. Он должен быть неактивным из-за высокого уровня на этом контакте (если он сконфигурирован как входной контакт) или сконфигурирован как выходной контакт.

 

A.) CPHA = 0 и CPOL = 0 (режим 0) и CPHA = 0 и CPOL = 1 (режим 1)

 

Время передачи SPI, где CPHA равно нулю, показано на рисунке 3. Для сигнала SCK показаны две формы волны: одна для CPOL равна нулю, а другая для CPOL равна единице.

 

 

Когда SPI настроен как ведомый, передача начинается с заднего фронта линии /SS. Это активирует SPI подчиненного устройства, и старший бит байта, хранящегося в его регистре данных (SPDR), выводится на линию MISO. Фактическая передача запускается программной записью в SPDR ведущего устройства. Это вызывает генерацию тактового сигнала. В случаях, когда CPHA равен нулю, сигнал SCK остается равным нулю в течение первой половины первого цикла SCK. Это гарантирует стабильность данных на входных линиях как ведущего, так и ведомого. Данные на входных линиях считываются по фронту линии SCK из неактивного состояния в активное (нарастающий фронт, если CPOL равен нулю, и задний фронт, если CPOL равен единице). Фронт линии SCK из активного в неактивное состояние (задний фронт, если CPOL равен нулю, и передний фронт, если CPOL равен единице) вызывает сдвиг данных на один бит дальше, так что следующий бит выводится на линиях MOSI и MISO. .

 

После восьми тактовых импульсов передача завершена. И в ведущем, и в ведомом устройстве устанавливается флаг прерывания SPI (SPIF), и полученный байт передается в приемный буфер.

 

B.) CPHA = 1 и CPOL = 0 (режим 2) и CPHA = 1 и CPOL = 1 (режим 3)

 

Время передачи SPI, где CPHA равно единице, показано на рисунке 4. Для сигнала SCK показаны две формы волны: одна для CPOL равна нулю, а другая для CPOL равна единице.

Как и в предыдущих случаях, задний фронт линии /SS выбирает и активирует ведомое устройство. По сравнению с предыдущими случаями, когда CPHA равняется нулю, на этом этапе передача не начинается и MSB не выводится ведомым устройством. Фактическая передача запускается программной записью в SPDR ведущего, что вызывает генерацию тактового сигнала. Первый фронт сигнала SCK из неактивного в активное состояние (нарастающий фронт, если CPOL равен нулю, и задний фронт, если CPOL равен единице) заставляет как ведущее, так и ведомое устройство выводить старший бит байта в SPDR.

 

Как показано на рисунке 4, здесь нет задержки в половину цикла SCK, как в режимах 0 и 1. Линия SCK меняет свой уровень сразу в начале первого цикла SCK. Данные на входных линиях считываются по фронту линии SCK из активного состояния в неактивное (задний фронт, если CPOL равен нулю, и нарастающий фронт, если CPOL равен единице).

 

Режим

Передняя кромка

Задняя кромка

0 CPOL=0, CPHA=0

Рост, образец

Падение, установка

1 CPOL=0, CPHA=1

Подъем, установка

Падение, образец

2  CPOL=1, CPHA=0

Падение, образец

Подъем, установка

3 CPOL=1, CPHA=1

Падение, установка

Рост, образец

 

 

После восьми тактовых импульсов передача завершена. И в ведущем, и в ведомом устройстве устанавливается флаг прерывания SPI (SPIF), и полученный байт передается в приемный буфер.

 

Соображения относительно высокоскоростной передачи

 

Детали, которые работают на более высоких системных тактовых частотах, и модули SPI, способные работать на скоростях до половины системных тактовых импульсов, требуют более специфической синхронизации, чтобы соответствовать потребностям как отправителя, так и получатель. На следующих двух диаграммах показана синхронизация AVR в ведущем и подчиненном режимах для режимов SPI 0 и 1. Точные значения отображаемых времен варьируются в зависимости от различных параметров и не являются проблемой в этом примечании по применению. Однако функциональность всех частей, в принципе, одинакова, поэтому следующие соображения применимы ко всем частям.

 

 

Минимальная синхронизация тактового сигнала определяется временем «1» и «2». Значение «1» указывает период SCK, а значение «2» указывает время высокого/низкого уровня тактового сигнала. Максимальное время нарастания и спада сигнала SCK определяется временем «3». Это первые тайминги AVR, чтобы проверить, соответствуют ли они требованиям ведомого устройства.

 

Время установки «4» и время удержания «5» являются важными значениями времени, поскольку они определяют требования AVR к интерфейсу подчиненного устройства. Это время определяет, как долго до фронта тактового сигнала ведомое устройство должно иметь готовые действительные выходные данные и как долго после фронта тактового сигнала эти данные должны быть действительными.

 

Если время установки и удержания достаточно велико, ведомое устройство соответствует требованиям AVR, но соответствует ли AVR требованиям ведомого устройства?

 

Время «6» (Out to SCK) определяет минимальное время, в течение которого AVR готов к работе действительных выходных данных, прежде чем произойдет перепад тактового сигнала. Это время можно сравнить со временем настройки «4» ведомого устройства.

 

Время «7» (от SCK до выхода) указывает максимальное время, по истечении которого AVR выводит следующий бит данных, а время «8» (от SCK до высокого уровня) указывает минимальное время, в течение которого выводится последний бит данных. действителен на линии MOSI после того, как SCK был возвращен в состояние ожидания.

 

 

В принципе, тайминги в ведомом режиме такие же, как описано ранее в ведущем режиме. Из-за переключения ролей между ведущим и ведомым требования к времени также меняются местами. Минимальное время основного режима теперь максимальное, и наоборот.

 

Конфликты передачи SPI

Конфликт записи возникает, если SPDR записывается во время передачи. Поскольку этот регистр буферизуется только один раз в направлении передачи, запись в SPDR приводит к тому, что данные записываются непосредственно в регистр сдвига SPI. Поскольку эта операция записи повредит данные текущей передачи, при установке бита WCOL в SPSR будет сгенерирована ошибка записи-коллизии.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *