Библиотека SPI
Библиотека SPI позволяет контроллеру Arduino взаимодействовать с устройствами поддерживающими SPI протокол. Arduino в данном случае выступает в качестве ведущего устройтва.
Коротко о Serial Peripheral Interface (SPI).
Последоваетельный периферийный интерфейс (SPI) — это последовательный синхроный протокол передачи данных используемый микроконтроллерами для обмена данными с одним или несколькими периферийными устройствами на небольших растояниях.
Для организации соединения SPI необходимо одно ведущее устройство, обычно это микроконтроллер, которое управляет соединением с ведомыми устройствами. Обычно подключение осуществляется тремя общими линиями и линией выбора переферийного(ведомого) устройства:
- Master In Slave Out (MISO), переводится как "вход ведущего выход ведомого", используется для передачи данных от ведомого к ведущему.
- Master Out Slave In (MOSI) — выход ведущего вход ведомого, для передачи данных от ведущего к периферийным устройствам.
- Serial Clock (SCK) — синхронизирующая линия, синхросигнал генерируется ведущим устройством.
- Slave Select pin — вход на ведомых устройствах с помощью которого ведущий может инициировать обмен данными с периферийным устройством. Если на этом входе LOW, то ведомый взаимодействует с ведущим, если HIGH, то ведомый игнорирует сигналы от ведущего.
При работе с SPI устройствами надо учитывать следующие моменты:
- Какой порядок вывода данных используется: Most Significant Bit (MSB - старший бит (разряд)) or Least Significant Bit (LSB - младший бит) первый. Порядок может быть изменен функцией SPI.setBitOrder().
- Уровень сигнала синхронизации — по какому синхронизирующему сигналу (HIGH или LOW) передаются данные.
- Фаза синхронизации — влияет на последовательность установки и выборки данных. Фаза синхронизации SPI и уровень сигнала задается функцией SPI.setDataMode().
- Скорость на которой работает SPI устанавливается функцией SPI.setClockDivider().
Производители SPI устройств несколько по разному реализуют протокол, поэтому необходимо внимательно ознакомиться с техническим описанием к устройству. Комбинация фазы синхронизиции (CPHA) и уровня сигнала синхронизации (CPOL) задают режим логики работы интерфейса SPI. Режим устанавливается функцией SPI.setDataMode().
Режим | Уровень сигнала (CPOL) | Фаза (CPHA) |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 0 |
3 | 1 | 1 |
Подключение
На контроллерах Arduino Duemilanove и других на базе ATmega168 /328, шина SPI использует выходы 10 (SS), 11 (MOSI), 12 (MISO), и 13 (SCK). На Arduino Mega — 50 (MISO), 51 (MOSI), 52 (SCK), и 53 (SS). Обратите внимание, что даже если вы не используете выход SS, он должен быть установлен как выход, в противном случае интерфейс может оказаться в режиме ведомого и библиотека не будет работать как надо.
В качестве SS выхода может быть использован выход отличный от 10-го. Например, при работе с Arduino Ethernet shield контроллер использует выход 4 для взаимодействия с SD картой по SPI и выход 10 для работы с Ethernet контроллером.
Функции
- begin()
- end()
- setBitOrder()
- setClockDivider()
- setDataMode()
- transfer()
Выражаем благодарность Modular за помощь в переводе библиотеки.