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

Кадр SPI: диаграмма и частота

Введите байты, которые передаёт ведущий и отвечает ведомое, выберите режим и частоту — калькулятор нарисует временную диаграмму CS, SCLK, MOSI и MISO с моментами выборки, посчитает время передачи и наибольшую частоту, на которой чтение ещё укладывается во время установки.

Исходные данные

Порядок бит
Слово

шестнадцатеричные слова через пробел: 9F 00 00 00

можно оставить пустым

МГц

Предельная частота чтения

нс
нс
м

Результат

Время передачи
32 мкс
4 × 8 бит; одно слово — 8 мкс
Выборка и смена данных
выборка по нарастающему фронтуSCLK в покое низкий; первый бит выставлен до первого фронта
Скорость без пауз
125 КБ/спериод SCLK 1 мкс
Предельная частота чтения
29,4 МГцполупериод ≥ 2·0,5 нс + tV + tSU = 17 нс

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

Пунктир — моменты выборки. Закрашенная ячейка — единица.

CSSCLKMOSI100111110000000000000000000000000x9F0x000x000x00MISO111111111110111101000000000101110xFF0xEF0x400x17

Расчёт выполнен по формулам и данным из источников, приведённых на этой странице, и не заменяет проверку: параметры компонентов у разных производителей и даже партий различаются. Перед применением сверяйте результат с документацией на конкретные детали.

SPI передаёт данные синхронно: ведущий формирует такт SCLK, на каждом такте один бит уходит по MOSI и один приходит по MISO. Как именно — задают режим (CPOL и CPHA), порядок бит и длина слова. Калькулятор рисует временную диаграмму для ваших байтов, показывает, по какому фронту ведомое и ведущий защёлкивают биты, и оценивает, на какой частоте чтение ещё надёжно. Подробно об интерфейсе — в статье «SPI».

Режимы и порядок бит

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

Режим ведомого ищут в его даташите по временной диаграмме: по какому фронту он защёлкивает вход и какой уровень SCLK в покое. Обычно первым идёт старший бит (MSB first), но контроллеры SPI умеют передавать и младшим вперёд (бит LSBFE в SPI Motorola), и некоторые ведомые требуют именно этого — тогда байт 0x9F уходит как 1111 1001.

Предельная частота чтения

При записи такт и данные идут от ведущего рядом и задерживаются одинаково, поэтому частоту ограничивает только ведомое. При чтении сигнал проходит путь туда и обратно: фронт сдвига SCLK доходит до ведомого за задержку линии, ведомое выставляет бит за время tV, бит возвращается за ту же задержку и должен установиться на входе ведущего за tSU до фронта выборки — а между фронтами сдвига и выборки всего половина периода:

T2≥2tзд+tV+tSU,fmax=12 (2tзд+tV+tSU)\frac{T}{2} \ge 2t_{зд} + t_V + t_{SU}, \qquad f_{max} = \frac{1}{2\,(2t_{зд} + t_V + t_{SU})}

Задержку линии калькулятор считает как 5 нс на метр — так TI оценивает распространение сигнала в кабеле. tV берут из даташита ведомого (output valid, clock low to output valid), tSU — из даташита микроконтроллера (data input setup time). Для флеш-памяти с tV = 6 нс и ведущего с tSU = 10 нс 10 см проводов дают до 29 МГц, метр кабеля — 19 МГц, а 10 метров — уже 4,3 МГц.

Как пользоваться

  1. Выберите режим, порядок бит и длину слова — как в настройках SPI микроконтроллера (биты CPOL, CPHA, LSBFIRST или их аналоги).
  2. Введите байты MOSI и, если нужно, ответ MISO: например, команда 9F (чтение идентификатора JEDEC у флеш-памяти) и три байта ответа.
  3. Задайте частоту SCLK — калькулятор посчитает время передачи, а по tV, tSU и длине проводов — предельную частоту чтения и предупредит, если заданная её превышает.

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

Чем отличаются режимы SPI 0, 1, 2 и 3?

Режим задают два бита: CPOL — уровень SCLK в покое (0 — низкий, 1 — высокий) и CPHA — фронт выборки (0 — первый фронт после выбора, 1 — второй). Режим 0 (CPOL = 0, CPHA = 0) и режим 3 (1, 1) читают бит по нарастающему фронту, режимы 1 и 2 — по спадающему. При CPHA = 0 первый бит выставляется на линию ещё до первого фронта — сразу после спада CS.

Какую частоту SPI можно поставить?

При записи потолок задаёт ведомое — наибольшую частоту SCLK указывают в его даташите. При чтении бит ведомого должен успеть дойти до ведущего: полупериод SCLK должен быть не короче двух задержек линии, задержки выхода ведомого tV и времени установки ведущего tSU. Например, у ведомого с tV = 36 нс и ведущего с tSU = 10 нс полупериод — не меньше 46 нс, и читать можно примерно на 10 МГц.

Сколько времени занимает передача по SPI?

Каждый бит занимает один период SCLK, поэтому байт на 1 МГц передаётся за 8 мкс, а четыре байта — за 32 мкс. Реальный обмен дольше: между выбором CS и первым фронтом, между словами и после последнего фронта контроллер добавляет паузы, а программа тратит время на подготовку данных.

Источники

  1. Motorola. SPI Block Guide V03.06 (S12SPIV3/D), 2003 — п. 3.1 — биты CPOL, CPHA и LSBFE; п. 4.4 — форматы передачи при CPHA = 0 и CPHA = 1
  2. Analog Devices. AN-1248: SPI Interface (M. Usach), Rev. A, 2015 — таблица режимов; расчёт частоты чтения по задержке выхода ведомого и времени установки ведущего (36 + 10 нс — около 10 МГц) — эталон тестов
  3. Texas Instruments. T. Kugelstadt. Extending the SPI bus for long-distance communication (SLYT441), 2011 — задержка сигнала в кабеле около 5 нс/м и её влияние на чтение
Встроить калькулятор на свой сайт

Скопируйте код и вставьте его в HTML страницы, статьи или вики. Виджет бесплатный, без рекламы, счётчиков и cookie. Условие одно — ссылка на GAW под рамкой остаётся на месте. Подробнее о виджетах

<iframe src="https://gaw.ru/embed/spi-frame/" title="Кадр SPI: диаграмма и частота" width="100%" height="640" style="border:1px solid #e3e5e9;border-radius:8px" loading="lazy" allow="clipboard-write"></iframe>
<p style="margin:6px 0 0;font-size:14px">Калькулятор: <a href="https://gaw.ru/tools/spi-frame/">Кадр SPI: диаграмма и частота</a> — GAW.ru</p>
Автоподстройка высоты рамки

Если сайт разрешает скрипты, добавьте этот код один раз в любом месте страницы: рамка будет менять высоту вместе с результатом расчёта.

<script>window.addEventListener("message",function(e){if(e.origin!=="https://gaw.ru"||!e.data||e.data.type!=="gaw:embed-height")return;var f=document.querySelectorAll('iframe[src^="https://gaw.ru/embed/"]');for(var i=0;i<f.length;i++)if(f[i].contentWindow===e.source)f[i].style.height=e.data.height+"px"})</script>

Обновлено .

Нашли ошибку в расчёте?