SPI передаёт данные синхронно: ведущий формирует такт SCLK, на каждом такте один бит уходит по MOSI и один приходит по MISO. Как именно — задают режим (CPOL и CPHA), порядок бит и длина слова. Калькулятор рисует временную диаграмму для ваших байтов, показывает, по какому фронту ведомое и ведущий защёлкивают биты, и оценивает, на какой частоте чтение ещё надёжно. Подробно об интерфейсе — в статье «SPI».
Режимы и порядок бит
| Режим | CPOL | CPHA | SCLK в покое | Выборка бита | Смена данных |
|---|---|---|---|---|---|
| 0 | 0 | 0 | низкий | по нарастающему фронту | по спадающему фронту |
| 1 | 0 | 1 | низкий | по спадающему фронту | по нарастающему фронту |
| 2 | 1 | 0 | высокий | по спадающему фронту | по нарастающему фронту |
| 3 | 1 | 1 | высокий | по нарастающему фронту | по спадающему фронту |
Режим ведомого ищут в его даташите по временной диаграмме: по какому фронту он защёлкивает вход и какой уровень SCLK в покое. Обычно первым идёт старший бит (MSB first), но контроллеры SPI умеют передавать и младшим вперёд (бит LSBFE в SPI Motorola), и некоторые ведомые требуют именно этого — тогда байт 0x9F уходит как 1111 1001.
Предельная частота чтения
При записи такт и данные идут от ведущего рядом и задерживаются одинаково, поэтому частоту ограничивает только ведомое. При чтении сигнал проходит путь туда и обратно: фронт сдвига SCLK доходит до ведомого за задержку линии, ведомое выставляет бит за время tV, бит возвращается за ту же задержку и должен установиться на входе ведущего за tSU до фронта выборки — а между фронтами сдвига и выборки всего половина периода:
Задержку линии калькулятор считает как 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 МГц.
Как пользоваться
- Выберите режим, порядок бит и длину слова — как в настройках SPI микроконтроллера (биты CPOL, CPHA, LSBFIRST или их аналоги).
- Введите байты MOSI и, если нужно, ответ MISO: например, команда 9F (чтение идентификатора JEDEC у флеш-памяти) и три байта ответа.
- Задайте частоту 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 и первым фронтом, между словами и после последнего фронта контроллер добавляет паузы, а программа тратит время на подготовку данных.
Источники
- Motorola. SPI Block Guide V03.06 (S12SPIV3/D), 2003 — п. 3.1 — биты CPOL, CPHA и LSBFE; п. 4.4 — форматы передачи при CPHA = 0 и CPHA = 1
- Analog Devices. AN-1248: SPI Interface (M. Usach), Rev. A, 2015 — таблица режимов; расчёт частоты чтения по задержке выхода ведомого и времени установки ведущего (36 + 10 нс — около 10 МГц) — эталон тестов
- 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>Обновлено .
Нашли ошибку в расчёте?