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