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()— это одна из самых распространённых ошибок при работе с несколькими устройствами на одной шине.