SPI.begin()
SPI.begin() инициализирует шину SPI: настраивает аппаратные контакты и переводит плату в режим контроллера SPI — вызывайте один раз в setup() перед любой работой с периферией.
Полная статья
Описание
begin() — первое, что нужно вызвать перед любой работой с устройствами на шине SPI. Функция автоматически настраивает аппаратные контакты: SCK и MOSI переводятся в режим выхода и устанавливаются в низкий уровень, SS — в режим выхода с высоким уровнем (устройство на шине не выбрано), MISO — в режим входа. После этого плата берёт на себя роль контроллера SPI и готова обмениваться данными с периферийными устройствами.
Важно понимать, что begin() не выбирает конкретное устройство и не задаёт параметры передачи — скорость, порядок бит, режим тактирования. Эти настройки указываются отдельно, через SPISettings, при каждом обращении к периферии.
Эта функция является частью библиотеки SPI. Подробности см. в разделе SPI.
Синтаксис
SPI.begin()
Параметры
Нет.
Возвращает
Ничего.
Где применяется
- Инициализация любого SPI-устройства: дисплеев, флеш-памяти, АЦП, датчиков с SPI-интерфейсом.
- Начало работы с несколькими периферийными устройствами на одной шине — у каждого свой вывод SS, но
SPI.begin()вызывается один раз. - Запуск связи с SD-картой через SPI-библиотеку.
- Любой скетч, использующий аппаратный SPI-интерфейс платы.
Практические замечания
- Вызывайте
begin()вsetup()до любых обращений к SPI-устройствам — иначе контакты не будут настроены и данные не пройдут. - После
begin()вывод SS находится в высоком уровне: периферийное устройство не выбрано. Перед передачей данных нужно самостоятельно опустить SS нужного устройства в низкий уровень, а после завершения — вернуть обратно. - Если вы управляете выводом SS вручную через
digitalWrite(), убедитесь, что он объявлен какOUTPUT—begin()настраивает только аппаратный SS-контакт платы, но не произвольные цифровые выводы, которые вы используете для выбора устройств. - Параметры передачи (скорость, режим, порядок бит) задаются через
SPI.beginTransaction(SPISettings(...))непосредственно перед отправкой данных. - Повторный вызов
begin()в уже работающем скетче не вызывает ошибок, но и смысла не имеет — достаточно одного вызова при старте.