У меня есть проект, основанный на картинке 18f4550. Для записи в сдвиговый регистр 595 есть ли явное преимущество в использовании spi по сравнению с обычными контактами ввода-вывода? Я слышал, что spi быстрее, но я не уверен, как это сделать. Использует ли он другие, более быстрые часы, чем остальная часть чипа, или он просто более эффективен? Я могу передать байт через обычные контакты ввода-вывода за довольно небольшое количество инструкций. Использует ли spi меньше вычислительной мощности? Я буду довольно часто переключаться во время довольно интенсивных вычислений, поэтому я хочу, чтобы как можно больше циклов было посвящено моему процессу, а не выходило из него.
Моя основная причина, по которой я не хочу использовать spi, заключается в том, что мой текущий макет затруднит доступ к необходимым контактам, потому что я уже использую некоторые из них для других целей, и мне придется перетасовывать вещи. Я хотел выяснить, какие преимущества есть, прежде чем я начну рвать вещи и перемещать их.
Если предположить, что вы сравниваете spi-периферию или синхронный последовательный «движок» в микро с генерацией той же последовательности с помощью «битового удара», тогда да, это, как правило, несколько быстрее, но, что более важно, процессор может передать целый байт в периферийное устройство для отправки, а затем выполнять другие действия во время передачи. В случае битовых ударов процессор, как правило, занят во время передачи (хотя, поскольку микро, как правило, является ведущим, а большинство периферийных устройств полностью статичны, вы, вероятно, можете допустить паузу в середине байта для обслуживания прерывания или даже для опроса. вещи - последовательный АЦП с тактовой частотой интерфейса и задачи с интервалом выборки, являющиеся яркими примерами исключений).
На более мощных MCU можно даже запрограммировать контроллер DMA для выполнения многобайтовой передачи из памяти через механизм SPI без дальнейшего внимания со стороны процессора, особенно если важны данные только в одном направлении.
Но многие проекты микроконтроллеров оказываются сильно оптимизированными для своей задачи; если вы можете сэкономить циклы и терпеть снижение скорости, то усложнение вашего программного обеспечения, чтобы иметь возможность использовать любые GPIO, которые делают физическую компоновку чище, ни в коем случае не является необычным выбором.
Преимущества бит-бэнга:
Недостатки бит-бэнга:
Преимущества СПИ:
Недостатки СПИ:
Для меня преимущества бит-бэнга незначительны по сравнению с преимуществами SPI. Недостатков битового взрыва намного больше, чем у SPI. Основные три причины, по которым я могу выбрать бит-бэнг, это
На PIC обычная реализация в стиле SPI с битовым взрывом занимает около пяти циклов на бит; немного поработав над частями 18Fxx, можно сократить это количество примерно до четырех (за счет примерно трех циклов на байт дополнительных служебных данных). Это время добавляется к любому времени, необходимому для выборки данных (обычно три цикла на байт). Итак, цифра около 40-43 циклов на байт. При использовании аппаратного SPI скорость повышается до двух циклов на бит плюс пара дополнительных циклов на байт (некоторые другие могут обрабатывать взаимные передачи, но PIC, которые я видел, не могут), и пока SPI отправляет байт процессор может выбрать следующий, обеспечивая общее время около 18 циклов на байт — выигрыш в скорости примерно в 2,5 раза.
Для бита (BB) вы забыли упомянуть:
звездно-голубой