Главная chevron_right Функции chevron_right Связь chevron_right SPI.endTransaction()

SPI.endTransaction()

endTransaction() завершает транзакцию на шине SPI и освобождает её для других библиотек — вызывайте после того, как подняли вывод CS/SS обратно в HIGH.

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

Описание

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

Правильная последовательность работы с устройством выглядит так: сначала вы вызываете SPI.beginTransaction() с нужными настройками, затем опускаете вывод выбора устройства (SS/CS) в LOW, передаёте данные, поднимаете SS обратно в HIGH и только после этого вызываете endTransaction(). Важно соблюдать именно такой порядок: сначала HIGH на выводе SS, потом endTransaction() — так устройство успевает зафиксировать конец транзакции прежде, чем шина перейдёт к следующему участнику.

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

Синтаксис

SPI.endTransaction()

Параметры

Нет.

Возвращает

Ничего.

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

  • Несколько SPI-устройств на одной шине — когда к одному контроллеру подключены, например, дисплей и SD-карта. Каждое устройство может требовать своих настроек скорости и режима, и SPI.beginTransaction() / endTransaction() обеспечивают корректное переключение между ними.
  • Совместная работа нескольких библиотек — если две библиотеки независимо используют SPI, механизм транзакций не даёт им мешать друг другу.
  • Код с прерываниями — если обработчик прерывания тоже обращается к шине SPI, он безопасно дождётся завершения текущей транзакции.

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

  • Всегда вызывайте endTransaction() в паре с SPI.beginTransaction(). Незакрытая транзакция может заблокировать доступ к шине для других частей программы.
  • Поднимайте вывод SS в HIGH до вызова endTransaction(), а не после. Устройство должно увидеть конец транзакции по сигналу на своём выводе CS прежде, чем шина перейдёт к другому.
  • endTransaction() не сбрасывает настройки скорости или режима SPI — она лишь снимает «блокировку» шины. Следующий вызов SPI.beginTransaction() всё равно должен передавать нужные параметры.
  • Если вы замечаете, что одно из SPI-устройств периодически получает мусорные данные, проверьте, не пропущен ли где-то вызов endTransaction() — это одна из самых распространённых ошибок при работе с несколькими устройствами на одной шине.