Arduino:Библиотеки/SPI/Расширенное использование шины SPI на Due
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Расширенное использование шины SPI на Due[1]
Эти API в новых проектах использовать не нужно. Ее функционал передан объекту SPISettings и функции SPI.beginTransaction() – параметры SPI теперь настраиваются с помощью них.
Модель Arduino Due оснащена чипом SAM3X, который имеет продвинутые SPI-возможности. Вы можете использовать и эти расширенные функции, и те, что используются для AVR.
Расширенный API может использовать для SS контакты 4, 10 и 52.
Использование
Вам нужно указать SS-контакт для всех SPI-устройств, которые вы хотите использовать.
Модель Due умеет самостоятельно выполнять SS-переключение между разными устройствами, которые делят одну и ту же шину SPI. Кроме того, у каждого из этих девайсов могут быть разные параметры вроде скорости и режима передачи данных.
При использовании нескольких устройств с разными SS-контактами вам нужно объявить эти контакты в блоке setup(). В примере ниже имеется два устройства, которые пользуются одними и теми же MISO, MOSI и SCK. У одного устройства SS-линия подключена к 4-ому контакту, а у другого – к 10-ому.
void setup(){
// инициализируем шину для девайса на контакте 4:
SPI.begin(4);
// инициализируем шину для девайса на контакте 10:
SPI.begin(10);
}
Когда контакт будет объявлен SS-контактом, мы можем менять его настройки. К примеру, если устройства работают на разных тактовых частотах, блок setup() может выглядеть примерно так:
void setup(){
// инициализируем шину для девайса на контакте 4:
SPI.begin(4);
// устанавливаем разделитель частоты на 4-ом контакте на «21»:
SPI.setClockDivider(4, 21);
// инициализируем шину для девайса на контакте 10:
SPI.begin(10);
// устанавливаем разделитель частоты на 10-ом контакте на «84»:
SPI.setClockDivider(10, 84);
}
Передача одного байта на устройство, подключенное к 4-ому контакту, может выглядеть следующим образом:
void loop(){
byte response = SPI.transfer(4, 0xFF);
}
Во фрагменте выше «0xFF» передается SPI-девайсу на 4-ом контакте, и данные, идущие от MISO, сохраняются внутри переменной response. Выбор устройства выполняется автоматически SPI-контроллером, а команда передачи данных подразумевает следующее:
- Активация SS путем установки 4-ого контакта на LOW
- Отправка «0xFF» через SPI-шину и возвращение полученного байта
- Выключение SS путем установки 4-ого контакта на HIGH
За один раз можно передать и больше одного байта, но при этом функции SPI.transfer() нужно сказать, чтобы она не выключала SS у SPI-устройства после передачи данных:
void loop(){
// передача «0x0F» устройству на 10-ому контакте; SS остается включенным:
SPI.transfer(10, 0xF0, SPI_CONTINUE);
// передача «0x00» устройству на 10-ому контакте; SS остается включенным:
SPI.transfer(10, 0×00, SPI_CONTINUE);
// передача «0x00» устройству на 10-ому контакте; сохраняем полученный байт в response1, SS остается включенным:
byte response1 = SPI.transfer(10, 0×00, SPI_CONTINUE);
// передача «0x00» устройству на 10-ому контакте; сохраняем полученный байт в response2 и выключаем SS:
byte response2 = SPI.transfer(10, 0×00);
}
Параметр SPI_CONTINUE нужен для того, чтобы устройство оставалось выбранным между передачами данных. У последнего вызова SPI.transfer() параметра SPI_CONTINUE нет – значит, это последний отправленный байт.
Для использования расширенных функций нужно знать правильный синтаксис базовых функций setClockDivider(), setDataMode(), transfer() и setBitOrder(), найти который можно на соответствующих страницах.
Примечание: Как только будет вызвана функция SPI.begin(), объявленный контакт уже нельзя будет использовать в качестве I/O контакта общего пользования.
См.также
Внешние ссылки
Arduino продукты | |
---|---|
Начальный уровень | Arduino Uno • Arduino Leonardo • Arduino 101 • Arduino Robot • Arduino Esplora • Arduino Micro • Arduino Nano • Arduino Mini • Arduino Starter Kit • Arduino Basic Kit • MKR2UNO • TFT-дисплей Arduino |
Продвинутые функции | Arduino Mega 2560 • Arduino Zero • Arduino Due • Arduino Mega ADK • Arduino Pro • Arduino Motor Shield • Arduino USB Host Shield • Arduino Proto Shield • MKR Proto Shield • MKR Proto Large Shield • Arduino ISP • Arduino USB 2 Serial Micro • Arduino Mini USB Serial Adapter |
Интернет вещей | Arduino Yun • Arduino Ethernet • Arduino MKR1000 • Arduino WiFi 101 Shield • Arduino GSM Shield V2 • Arduino WiFi Shield • Arduino Wireless SD Shield • Arduino Wireless Proto Shield • Arduino Ethernet Shield V2 • Arduino Yun Shield • Arduino MKR1000 Bundle |
Носимые устройства | Arduino Gemma • Lilypad Arduino Simple • Lilypad Arduino Main Board • Lilypad Arduino USB • LilyPad Arduino SimpleSnap |
3D-печать | Arduino Materia 101 |
Устаревшие устройства | - |
Примеры Arduino | |
---|---|
Стандартные функции | |
Основы |
|
Цифровой сигнал |
|
Аналоговый сигнал |
|
Связь |
|
Управляющие структуры |
|
Датчики |
|
Дисплей |
Примеры, объясняющие основы управления дисплеем:
|
Строки |
|
USB (для Leonardo, Micro и Due плат) |
В этой секции имеют место примеры, которые демонстрируют использование библиотек, уникальных для плат Leonardo, Micro и Due.
|
Клавиатура |
|
Мышь |
|
Разное |
- Страницы, использующие повторяющиеся аргументы в вызовах шаблонов
- Справочник языка Arduino
- Arduino
- Перевод от Сubewriter
- Проверка:myagkij
- Оформление:myagkij
- Редактирование:myagkij
- Страницы, где используется шаблон "Навигационная таблица/Телепорт"
- Страницы с телепортом
- Стандартные библиотеки
- Стандартная библиотека
- Стандартная библиотека Arduino
- Стандартные библиотеки Arduino
- Библиотека SPI
- Стандартная библиотека SPI
- SPI