Является ли SPI значительно быстрее, чем битовые удары?

8

У меня есть проект, основанный на рис 18f4550. Для записи в регистр сдвига '595, есть ли явное преимущество использования spi над обычными выводами io? Я слышал, что Spi быстрее, но я не уверен, как. Использует ли он другие, более быстрые часы, чем остальные чипы, или он просто более эффективен? Я могу побить бит через обычные IO-выводы в довольно небольшом количестве инструкций. Spi использует меньше вычислительной мощности? Я буду переключаться довольно часто во время довольно интенсивных вычислений, поэтому я хочу, чтобы как можно больше циклов было посвящено моему процессу, а не переключению.

Моя главная причина того, что я не хочу использовать spi, состоит в том, что из-за моей текущей раскладки доступ к нужным контактам будет немного сложнее, потому что я уже использую некоторые из них для других целей и придется перетасовывать вещи вокруг. Я хотел выяснить, какие преимущества есть, прежде чем я начну рвать вещи и перемещать их.

captncraig
источник
5
Вы можете сделать SPI, ударяя по битам.
звездно-голубой

Ответы:

17

Предполагая, что вы сравниваете spi-периферийный или синхронный последовательный «движок» в микроэлементе с генерацией той же последовательности с помощью «бита», тогда да, это имеет тенденцию быть несколько быстрее, но что более важно, процессор может передать весь байт периферийное устройство для отправки, а затем делать другие вещи, пока оно передается. В случае битовой синхронизации процессор имеет тенденцию быть привязанным во время передачи (хотя микро имеет тенденцию быть ведущим, а большинство периферийных устройств полностью статичными, вы, вероятно, можете допустить приостановку промежуточного байта для обслуживания прерывания или даже для опроса вещи - последовательный АЦП с синхронизацией интерфейса и выборочные интервалы, являющиеся примечательными примерами исключений).

На более способных MCU может быть даже возможно запрограммировать контроллер DMA для выполнения многобайтовой передачи из памяти через механизм SPI без дополнительного внимания со стороны процессора, особенно если важны только данные в одном направлении.

Но многие проекты микроконтроллеров в конечном итоге сильно оптимизированы под их задачи; если вы можете сэкономить циклы и терпеть снижение скорости, то усложнение вашего программного обеспечения для возможности использования любых GPIO, которые делают физическую разметку чище, ни в коем случае не является редким выбором.

Крис Страттон
источник
Да, это ^. Как упоминает Крис, самое большое преимущество использования аппаратных периферийных устройств заключается в том, что вы можете передать байт данных из потока в периферийное устройство и получать уведомления с помощью прерывания, если он закончил, сдвинув его и готовый для другого байта. Это освобождает использование вашего ЦП для других вещей, пока байт смещается - что может быть временем жизни в машинных циклах, учитывая скорость передачи данных этих последовательных протоколов.
Джон Л
3
Не жизнь для SPI. Если вы говорите о скорости, то вы можете использовать SPI на частоте 10 МГц, что составляет всего 10 команд PIC на полной скорости. Это едва ли возраст. Примерно достаточно времени, чтобы подготовить следующий байт. Едва достаточно времени для обслуживания прерывания.
Ракетный магнит
2
Было бы справедливо сказать, что многое зависит от предполагаемой / требуемой скорости передачи данных, которая не была указана. Однако, как я указал, если микро является ведущим, он может быть свободен, чтобы опоздать с отправкой следующего байта, при условии, что приложение может допустить нерегулярность / снижение пропускной способности.
Крис Страттон
1
@ RocketMagnet, я исправлен. SPI намного быстрее, чем я думал - я полагаю, что я смешал его с более медленными последовательными протоколами, такими как UART (где 9600 бод ~ 10 кГц).
Джон Л
1
Также обратите внимание, что мастер SPI относительно легко справляется. SPI Slave может быть несколько сложнее, так как выбор чипа и тактовые импульсы должны быть специально рассчитаны и обработаны (как вывод внешнего прерывания). Я часто использую стиль SPI master bit bang в своих проектах, особенно если мне не нужна высокая производительность, но я хочу чистую плату (также хорошо подходит для домашнего травления). Также обратите внимание, что обычной практикой является обратное: сдвигать данные в регистры сдвига (HC595 и т. Д.), Используя SPI и GPIO (фиксатор).
Ганс
10

Преимущества для битов:

  • Абсолютный контроль над протоколом.
  • Если время выполнения инструкций на микроконтроллере меньше, чем скорость передачи данных SPI, это может быть быстрее, но это маловероятно. Потребовалась бы очень низкая скорость передачи данных SPI с относительно высокоскоростным микроконтроллером.
  • Может иметь меньшую задержку, чем прерывание SPI.
  • Выбор пинов.

Недостатки битья:

  • Требуется намного больше кода для обработки. -Бодовая синхронизация. -Надежная выборка полученных битов -Процессные границы кадра. * Каждый сегмент кода выше занимает время, которое может быть потрачено на выполнение другого кода.

Преимущества SPI:

  • Регистр конфигурирует дескрипторы времени синхронизации, выборки принятых битов и обработки кадров
  • Большинство микроконтроллеров с SPI имеют выделенный вектор прерывания для каждого периферийного устройства SPI (дважды проверьте свой микро!)
  • После настройки нужно только проверить, пуст ли / заполнен буфер SPI TX / RX и записать / прочитать байт.
  • Если доступен DMA, SPI может передавать большие буферы непрерывных данных без какого-либо программного вмешательства.

Недостатки SPI:

  • Дополнительное периферийное устройство для изучения и настройки (действительно ли это недостаток?)
  • Требуются дополнительные контакты или мультиплексирование контактов
  • Дополнительные расходы (как правило, незначительны для современных микроконтроллеров)
  • У меня были проблемы с шумом в SPI, но они были на опытных платах на относительно высоких скоростях (10 МГц)
  • Очень ограниченный выбор контактов

Для меня преимущества бит-бэнгинга незначительны по сравнению с преимуществами SPI. Недостатки бит-блинга намного больше, чем у SPI. Основные три причины, по которым я вижу выбор бит-ударов, заключаются в

  1. Пользовательский низкоскоростной протокол
  2. Если связь низкоскоростная, а остальная часть приложения имеет низкие вычислительные требования
  3. Или, если связь низкая, и выбор пин-кода является серьезной проблемой
Джошуа
источник
8

На PIC обычная реализация в стиле SPI в стиле bit-bang занимает около пяти циклов на бит; немного поработав над деталями 18Fxx, можно сократить это до четырех (при стоимости около трех циклов на байт дополнительной служебной информации). Это время является дополнительным к любому времени, необходимому для выборки данных (обычно три цикла на байт). Таким образом, число около 40-43 циклов на байт. Используя аппаратный SPI, скорость повышается до двух циклов на бит плюс пара дополнительных циклов на байт (некоторые другие могут обрабатывать последовательные передачи, но PIC, которые я видел, не могут), и пока SPI отправляет байт следующий процессор может получить, что позволяет в общей сложности около 18 циклов / байт - увеличение скорости примерно в 2,5 раза.

Supercat
источник
0

Для битов (BB) вы забыли упомянуть:

  1. Связывает процессор на время общения. (SPI загружает регистры, а затем отдает руки, чтобы вы занялись чем-то другим)
  2. Фоновые прерывания могут серьезно мешать коду BB, делая его полезным только в однопоточных конструкциях, помните, что BB-код должен уделять 100% внимания работе с протоколом.
боб
источник