Главная chevron_right Функции chevron_right Связь chevron_right SPISettings

SPISettings

SPISettings объединяет частоту, порядок битов и режим тактирования SPI в один объект, который передаётся в SPI.beginTransaction() для настройки шины под конкретное устройство.

Полная статья

Описание

SPISettings — это вспомогательный объект библиотеки SPI, который объединяет три параметра шины в одно целое: максимальную тактовую частоту, порядок битов и режим данных. Готовый объект передаётся в SPI.beginTransaction(), после чего шина настраивается под конкретное периферийное устройство.

Подход с SPISettings удобен тем, что настройки можно описать один раз — прямо в вызове SPI.beginTransaction() или заранее как именованный объект — и переиспользовать без дублирования кода. Если все три параметра известны на этапе компиляции (то есть являются константами), передача SPISettings непосредственно внутри SPI.beginTransaction() позволяет компилятору оптимизировать код: он становится компактнее и быстрее. Если же хотя бы один параметр вычисляется в рантайме (например, частота зависит от пользовательского ввода), лучше создать именованный объект заранее.

Этот объект является частью библиотеки SPI. Подробности см. в разделе SPI.

Синтаксис

  • SPISettings(speedMaximum, dataOrder, dataMode)
  • SPISettings mySetting(speedMaximum, dataOrder, dataMode)

Параметры

  • speedMaximum: максимальная тактовая частота шины в Гц. Библиотека SPI автоматически выберет ближайшую поддерживаемую частоту, не превышающую указанное значение. Например, используйте 20000000 для устройства, рассчитанного на частоту до 20 МГц.
  • dataOrder: порядок передачи битов. MSBFIRST — старший бит первым (наиболее распространённый вариант), LSBFIRST — младший бит первым. Нужный порядок указан в даташите устройства.
  • dataMode: режим тактирования SPI, определяющий полярность тактового сигнала (CPOL) и фазу выборки данных (CPHA). Допустимые значения: SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3. Большинство устройств работают в режиме SPI_MODE0; точный режим всегда указан в документации на микросхему.

Возвращает

Ничего.

Пример кода

// Использование SPISettings напрямую (лучший вариант, когда все настройки — константы)
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));

// Использование именованного объекта SPISettings (лучший вариант, когда хотя бы одна настройка — переменная)
SPISettings mySetting(speedMaximum, MSBFIRST, SPI_MODE0);
SPI.beginTransaction(mySetting);

Где применяется

  • Работа с несколькими SPI-устройствами на одной шине, каждое из которых требует своих настроек частоты и режима.
  • Подключение дисплеев, SD-карт, АЦП, ЦАП и радиомодулей через SPI.
  • Ситуации, когда настройки шины нужно переключать «на лету» между транзакциями.
  • Библиотеки для SPI-периферии, которые инкапсулируют настройки устройства внутри класса.

Практические замечания

  • Всегда сверяйте все три параметра с даташитом устройства: неверный dataMode или dataOrder — самая частая причина, по которой данные по SPI приходят искажёнными.
  • Библиотека SPI никогда не превысит указанную частоту speedMaximum, но может выбрать более низкую, если аппаратный делитель не позволяет попасть точно в нужное значение.
  • Если на шине несколько устройств, создайте отдельный объект SPISettings для каждого из них и вызывайте SPI.beginTransaction() перед каждой транзакцией с нужным объектом.
  • Не забывайте завершать транзакцию вызовом SPI.endTransaction() — это освобождает шину и позволяет корректно работать с прерываниями.
  • При отладке начинайте с заниженной частоты (например, 1 МГц): на низкой скорости проще поймать проблему логическим анализатором или осциллографом.