Перейти к основному содержимому

Интерфейс SPI

Описание структуры SPI

Взаимодействие управляющего микроконтроллера с микросхемой 5400ТР065А-022 осуществляется через последовательный SPI интерфейс с помощью четырех сигналов: SCLK, SSTR, SDO, SDI.

  • SSTR — сигнал разрешения работы контроллера. Активный уровень "0". Переход из 1 в 0 является событием начала транзакции (или цепочки транзакций). При SSTR = 1 производится сброс счетчиков синхроимпульсов SCLK.
  • SCLK — сигнал синхронизации. Микросхема защелкивает входные данные (вход SDI) по переднему фронту SCLK и выставляет выходные данные SDO по заднему фронту SCLK. Ведущее устройство должно принимать данные с входа SDO по переднему фронту и передавать SDI по заднему фронту SCLK.
  • SDI — порт для приема и выдачи данных. Выдача данных на порт производится только при однократном переводе контроллера SPI в режиме полудуплексного чтения.
  • SDO — порт выдачи данных, при неактивном уровне SSTR, SDO всегда переводится в состояние высокого импеданса ("Z")

Контроллер SPI работает только по синхроимпульсам SCLK и не зависит от наличия системной частоты FINT. Взаимодействие с контроллером осуществляется через последовательности кадров. Каждый кадр состоит из 16 полных синхроимпульсов SCLK (имеющих и передний, и задний фронт).

  • Контроллер имеет два 4-битных счетчика:
    • Счетчик синхроимпульсов запроса (инкрементируется передними фронтами SCLK)
    • Счетчик синхроимпульсов ответа (инкрементируется задними фронтами SCLK)
  • При SSTR = 1 счетчики сброшены.
  • При наступлении 17-го синхроимпульса счетчики переполняются, что сигнализирует о начале нового кадра (позволяет использовать DMA).

Существуют три вида кадра

  • прием на SDI командного слова и одновременная выдача на SDO данного по предыдущему адресу
  • прием на SDI данного для записи (на выводе SDO выдается существующее данное по адресу записи)
  • выдачей данных на SDI в полудуплексном режиме (вывод SDO дублирует выдачу SDI)

Формат командного слова: М₂,М₁,М₀, A10,A9,A8, A7, A6, A5, A4, A3, A2, A1, A0, 0, P

  • M₂, M₁, M₀ — код операции (см. таблицу ниже)
  • A₁₀...A₀ — адрес
  • P — бит четности

Коды операций

Код операции (М₂,М₁,М₀)Описание
100Запись по адресу значением из следующего кадра
110Вывод значения ячейки по адресу в следующем кадре (полнодуплексная транзакция)
001Вывод значения ячейки по адресу в следующем кадре (полудуплексная транзакция)
010Команда блокировки значения в выходном регистре
101Команда разброкировки записи выходного регистра

Контроллер SPI может находиться в одном из 3 состояний:

  1. Прием командного слова
  2. Прием слова данных (если предыдущее командное слово интерпретировалось как запись)
  3. Выдача слова данных в полудуплексном режиме

Коды операции "110", "010", "101" оставляют контроллер SPI в 1 состоянии, следующий кадр может содержать командное слово, а на выводе SDO будет передаваться значение адреса зафиксированного в предыдущем кадре.

Полнодуплексная транзакция чтения  режим 110
Полнодуплексная транзакция чтения режим 110

Переход в 2,3 состояние из состояния 1 возможен при корректно принятым командным словом с кодом операции "100" или "001". При нахождении контроллера в 2 и 3 состоянии данные на выводе SDI не интерпретируются как командное слово, по окончании кадра контроллер переходит в состояние 1.

Транзакция записи — режим 100
Транзакция записи — режим 100
Полудуплексная транзакция чтения режим 001
Полудуплексная транзакция чтения режим 001

Доступ к ячейкам памяти — параллельный: один мультиплексор подключает нужную ячейку к контроллеру SPI по заданному адресу.

Фиксация адреса, мультиплексирование по адресу регистра для чтения производится при приеме 14-го переднего фронта командного слова, не дожидаясь завершения окончания транзакции и приема бита четности. Однако контроллер перейдет в другое состояние только если поступило 16 передних фронтов SCLK, 14-й бит регистра запроса равен 0 и корректен бит четности (или отключен контроль).

Для тактируемых FINT ячеек выход мультиплексора подключен к промежуточному регистру. Разрешение копирования данных на него снимается "ena_clocked' при заднем фронте SSTR или 16-м заднем фронте SCLK (при непрерывной циклической передаче). Сигнал "ena_clocked' (см. рис. ниже) пересинхронизируется двумя триггерами на FINT, что требует паузы до первого фронта SCLK длиной в 3 периода FINT (параметр данной задержки конфигурируется в большинстве архитектур микроконтроллеров). Нечетные адреса всех тактируемых ячеек защелкиваются в промежуточный регистр только при чтении четного адреса на единицу меньше. При повторном чтении нечетного адреса значение в промежуточном регистре не обновится. Для чтения актуального значения нечетного адреса возможно при последовательной передаче транзакций команд чтения сначала четного адреса, затем нечетного адреса на единицу больше.

Формат командного слова SPI
Формат командного слова SPI
Чётный/нечётный адрес SPI
Чётный/нечётный адрес SPI
Временная диаграмма
Временная диаграмма

Выходной регистр-защелка не может поменять свое значение начиная с 1 по 15 заднего фронта SCLK.

Контроллер SPI может быть переведен в режим полудуплексной передачи без перевода SSTR в 1 (циклический режим). В этом случае требуется установить бит HALF_dma = 1, что даст указание контроллеру переводить вывод SDI и приемо-передатчик сигналом VC в активное состояние выдачи на спаде 16 SCLK текущего кадра приема командного слова.

Полудуплексная транзакция чтения режим  001 и HALF_dma=1
Полудуплексная транзакция чтения режим 001 и HALF_dma=1

Вывод nSEN маскирует сигнал SSTR. При nSEN = 1 интерфейс SPI отключается (используется при подключении нескольких микросхем). Если обмен только с одной микросхемой, nSEN должен быть подтянут к 0.

Временная диаграмма
Временная диаграмма

Временные параметры последовательного интерфейса

Параметр, единица измеренияне менеетиповоене более
Период SCLK (t_SCLK), нс50
Задержка от заднего фронта SSTR до переднего фронта SCLK (t_22), нс6,0
Задержка от заднего фронта SSTR до занятия линии SDO (t_23), нс39
Задержка от заднего фронта SCLK до переключения SDO (t_24), нс41
Длительность лог. «1» на SCLK (t_25), нс16
Длительность лог. «0» на SCLK (t_26), нс16
Задержка от выставления SDI до переднего фронта SCLK (t_27), нс6,0
Задержка от переднего фронта SCLK до изменения SDI (t_28), нс6,0
Задержка от заднего фронта SSTR до освобождения SDO (t_29), нс29
Задержка от заднего фронта SCLK до переднего фронта SSTR (t_30), нс6,0
Задержка от заднего фронта SCLK при SSTR=0 до переднего фронта Sample (t_31), нс6,0
Длительность лог. «0» на Sample (t_32), нс50
Задержка от переднего фронта Sample до первого переднего фронта SCLK при SSTR=0 (t_33), нс4,0
Задержка от заднего фронта nSEN до заднего фронта SSTR (t_34), нс0
Задержка от переднего фронта SSTR до переднего фронта nSEN (t_35), нс0

Дополнительные режимы SPI

Целевое применение 5400ТР065А-022 - индуктивные датчики угла и положения в аппаратуре специального назначения. Для снижения уровня помех и искажений рекомендуется размещение 5400TP065A-022 в непосредственной близости от источника ЭДС. Для обеспечения цифрового обмена рекомендуется использование дифференциальных пар - передача сигналов по току (RS-485, M-LVDS, LVDS и др.). Для повышения надежности передачи данных и упрощения использования множества преобразователей в микросхеме 5400ТР065А-022 реализовано несколько дополнительных функций.

Фиксация значения выходной ячейки для множественного чтения.

При передаче кода операции "010" сигнал разрешения с регистра (четный и нечетный адрес) тактируемых ячеек маскируется, значение его не обновляется. Это дает возможность прочитать значения несколько раз и сравнить целостность передачи данных. Разблокировка производится кодом операции "101".

Чтение ранее переданной транзакции

Чтение адреса 73 SPI_req возвращает ранее переданный в контроллер SPI кадр. Это позволяет проверить соответствие принятого значения с запрошенным адресом.

Чтение предыдущей транзакции по адресу 73
Чтение предыдущей транзакции по адресу 73

Блокировка записи слов

При записи в регистр WR_Lock значения отличного от нуля, запись в другие регистры блокируется (кроме BUS_addr), только чтение.

Программный адрес

При наличии нескольких микросхем подключенных к одной общей шине для обеспечения индивидуального доступа к каждой микросхеме в их регистры IC_addr могут быть предварительно записаны различные номера в диапазоне [1..255]. Чтобы команда чтения или записи сработала для конкретной микросхемы мастер устройство должно предварительно записать в регистр BUS_addr значение номера необходимой микросхемы, и затем следующие необходимые транзакции записи и чтения. Запись в регистр BUS_addr не блокируется значенями регистров WR_Lock и IC_addr.

Контроллер SPI конкретной микросхемы реагирует на команды только в следующих случаях

  • значение IC_addr равно 0
  • IC_addr != 0, BUS_addr == IC_addr
  • IC_addr != 0, BUS_addr == 0, флаг BUS0_mode == 1

В остальных случаях контроллер не реагирует (за исключением перезаписи BUS_addr).

Подразумевается, что конкретное значение IC_addr записывается в ПЗУ микросхемы до установки в общий интерфейс аппаратуры.

Управление внешним приемо-передатчиком с помощью вывода VC

Установка бита VC_mode в 1 регистра AFE_config переводит вывод VC в режим управления внешним приемо-передатчиком. Бит DE_half определяет когда вывод VC переходит в активное состояние: при DE_half = 1 - только для ответа при полудуплексных запросах, при DE_half = 0 при всех запросах когда микросхема должна отвечать (когда SSTR = 0, nSEN = 0 и есть соответствие адреса микросхемы и шины адреса). Бит DE_inv определяет какой уровень VC является активным для передатчика: при DE_inv = 0 активный 1, при DE_inv = 1 активный уровень 0. Установка бита DE_turnZ в 1 переводит вывод VC в состояние высокого импеданса ( "Z" ) между передачами, а сигнал VC должен быть доопределен подтяжкой резистора (требуется при подключении нескольких микросхем к одному передатчику). На рисунках ниже представлены некоторые варианты включения микросхемы.

Подключение двух преобразователей на одной плате с единым интерфейсом в полудуплексном режиме передачи
Подключение двух преобразователей на одной плате с единым интерфейсом в полудуплексном режиме передачи
Подключение двух независимых преобразователей на один интерфейс в полудуплексном режиме передачи
Подключение двух независимых преобразователей на один интерфейс в полудуплексном режиме передачи

Режим параллельной передачи результата

Режим включается при SPI_ext_en = 1. Выводы ENC1_A, ENC1_B, ENC1_0, ENC2_A, ENC2_B, ENC2_0 переключаются параллельно с SDO и передают данные из регистров C1Coord/C2Coord, C1CoordHB/C2CoordHB, C1Vel/C2Vel, C1VelHB/C2VelHB.

Назначение выводов в режиме параллельной передачи результата

SDIVCENC1_AENC1_BENC1_0SDOENC2_AENC2_BENC2_0
00C1CoordC1VelC1CoordHBC1VelHBC2CoordC2VelC2CoordHB
01C1VelC1CoordC1VelHBC1CoordHBC2VelC2CoordC2VelHB
10C2CoordC2VelC2CoordHBC2VelHBC1CoordC1VelC1CoordHB
11C2VelC2CoordC2VelHBC2CoordHBC1VelC1CoordC1VelHB