Перейти к содержанию

Режимы SPI: CPOL и CPHA

Режим SPI определяет, как данные привязаны к тактовому сигналу: каким уровнем SCLK находится в покое и по какому фронту ведомое считывает бит. Ведущий и ведомое должны работать в одном режиме, иначе байты будут приниматься со сдвигом или вовсе неверно.

Обновлено Редакция GAW

Режим SPI (SPI mode) — комбинация двух битов настройки интерфейса SPI. CPOL (clock polarity) задаёт уровень тактового сигнала SCLK в покое: 0 — низкий, 1 — высокий. CPHA (clock phase) задаёт, на каком фронте берётся бит: при CPHA = 0 — на первом фронте после спада CS и далее на нечётных, при CPHA = 1 — на втором и далее на чётных. Данные меняются на противоположном фронте, поэтому у сигнала есть полпериода, чтобы установиться. Номер режима — двоичное число из CPOL (старший бит) и CPHA.

Четыре режима

РежимCPOLCPHASCLK в покоеВыборка битаСмена данных
000низкийпо нарастающему фронтупо спадающему
101низкийпо спадающему фронтупо нарастающему
210высокийпо спадающему фронтупо нарастающему
311высокийпо нарастающему фронтупо спадающему

Биты CPOL и CPHA появились в микроконтроллерах Motorola, где SPI и был придуман; единого стандарта у SPI нет, и названия режимов — договорённость, которой придерживаются производители. Подробно об интерфейсе, сигналах, нескольких ведомых и ограничениях частоты — в статье «Интерфейс SPI».

Как проверить

Нарисовать кадр SPI для выбранного режима, порядка бит и данных, увидеть моменты выборки и получить настройки регистров поможет конструктор кадра SPI. Выходы SCLK и MOSI ведущего обычно двухтактные, поэтому фронты на SPI быстрые, а предел частоты определяет в основном ведомое.

Частые вопросы

Какой режим SPI выбрать?

Тот, который поддерживает ведомое: его указывают в даташите словами «SPI mode 0» или временной диаграммой — по ней видно уровень SCLK в покое и фронт, по которому ведомое захватывает данные. Чаще всего ведомые работают в режиме 0 или 3; многие поддерживают оба, потому что в них данные захватываются по одному и тому же нарастающему фронту.

Что будет, если режимы ведущего и ведомого не совпадают?

Бит будет считываться не в середине, а на смене данных, или с опозданием на полпериода. Типичные симптомы — сдвиг всех байтов на один бит, неправильный первый бит, иногда случайные ошибки, которые зависят от частоты и длины проводов. Если микросхема отвечает почти правильными, но сдвинутыми данными, первым делом проверяют режим.

Почему режимы 0 и 3 часто взаимозаменяемы?

В обоих данные захватываются по нарастающему фронту SCLK и меняются по спадающему. Различаются они уровнем такта в покое: в режиме 0 SCLK низкий, в режиме 3 высокий. Ведомые, которые реагируют только на фронты и не смотрят на уровень такта при спаде CS, работают в обоих.

Источники

  1. Motorola. SPI Block Guide V03.06 (S12SPIV3/D), 2003 — п. 3.1 — биты CPOL и CPHA; п. 4.4 — форматы передачи при CPHA = 0 и CPHA = 1
  2. Analog Devices. P. Dhaker. Introduction to SPI Interface. Analog Dialogue, vol. 52, September 2018 — четыре режима SPI, полярность и фаза такта, временные диаграммы
  3. Analog Devices. AN-1248: SPI Interface (M. Usach), Rev. A, 2015 — SPI — стандарт де-факто, режимы и временные параметры

Нашли ошибку?