Есть ли разница между ними, или это просто вопрос абстракции? Моя интуиция говорит, что нет никакой разницы, но я бы хотел быть неправым.
microcontroller
spi
Skaevola
источник
источник
Ответы:
Фактическое периферийное устройство контроллера SPI в MCU часто может работать намного быстрее, чем битовый интерфейс. Конечно, это зависит от MCU, но я не удивлюсь, увидев SPI-контроллер, работающий на частоте 30+ МГц, в то время как битовая синхронизация может быть ограничена до 1 МГц (если вам повезет).
Но это еще не все. Во время битового микроконтроллера MCU занят этим. Это сдвигает данные и вертит линии GPIO. Это значит, что больше ничего нельзя делать. При использовании контроллера SPI контроллер занят выполнением всего этого, а MCU может выполнять другие действия.
Таким образом, с реальным контроллером SPI фактическая передача SPI происходит намного быстрее, и MCU возвращает несколько циклов, которые он может использовать для других задач.
источник
Нет никакой разницы в том, что вы можете достичь одного и того же результата, используя оба метода, но есть несколько причин, по которым вы бы выбрали один из них.
Использование периферийного устройства SPI освободит процессор от необходимости заботиться о генерации тактирования для битовых ударов выводов ввода / вывода, что позволит ему выполнять другие вычислительные задачи и упростит программирование процессора. Поскольку периферийное устройство реализовано в аппаратном обеспечении, оно будет работать быстрее и потреблять меньше энергии, чем ввод-вывод с разбивкой битов. Могут быть случаи, когда вы захотите использовать битовый ввод-вывод для взаимодействия с SPI, если ваше приложение требует, чтобы вы выбрали процессор без периферийного устройства SPI. По соображениям здравомыслия я бы рекомендовал избегать этого, если в этом нет крайней необходимости.
источник
SPI - это синхронный интерфейс с ведущим, управляющим часами. Это означает, что если вы мастер, вы можете выбрать тактовую частоту и время. У ведомых устройств будет некоторый верхний предел тактовой частоты, с которым они могут работать, но, как правило, не волнует, насколько медленные часы ниже этого. Более конкретно, обычно каждому минимальному устройству требуется минимальное время, чтобы увидеть часы в верхнем и нижнем состояниях, прежде чем он сможет переключиться снова, и будут установлены некоторые минимальные настройки данных и ограничения на линию данных, окружающую границу часов, на которой ведомый читает строку данных.
Из-за этого внедрить SPI-мастер в прошивку действительно довольно просто. Я делал это часто для удобства использования определенных выводов, когда не было встроенного оборудования SPI или оно не было доступно для этой цели по какой-либо причине. Создание SPI-мастера в прошивке так же просто, как и получается.
Многие ведомые SPI-устройства работают довольно быстро, поэтому часто минимальные часы и время настройки выполняются, если убедиться, что каждое из них имеет ширину хотя бы одного цикла инструкций. В этом случае код очень короткий и быстрый. В некоторых случаях подчиненному устройству может потребоваться два или три цикла команд на тактовую фазу, но это на самом деле тоже не сложно гарантировать. Битовая петля SPI низкого уровня требует некоторого смещения следующего выходного бита в позицию, захвата входного бита и проверки счетчика цикла. Обычно вы можете удовлетворить минимальные требования по времени в два или три цикла, просто организовав, когда вы едете и пробуете линии с некоторыми другими накладными расходами, вставленными в нужных местах. Если важна скорость, вы можете использовать препроцессор ассемблера, чтобы написать развернутый цикл. С такими методами,
Есть несколько преимуществ для использования SPI master в прошивке. Аппаратные средства SPI иногда не очень удобны в настройке. Всегда существует проблема того, что именно должно произойти немедленно, когда утверждается выбор ведомого. Тогда первый бит записывается в строки данных? Что если часы начнут снижаться и линии данных должны быть зафиксированы на заднем фронте? Иногда это важно, иногда нет. С мастером SPI встроенного ПО вы можете быть более щадящим и, возможно, использовать одну и ту же процедуру для связи с разными подчиненными. Например, вы можете убедиться, что линия данных MOSI (Master Out Slave In) стабильна по обоим краям тактовой частоты. Оборудование SPI, как правило, этого не делает, поэтому такое оборудование необходимо будет переконфигурировать в зависимости от того, с каким ведомым устройством оно взаимодействует в данный момент.
Другое преимущество мастера SPI встроенного программного обеспечения состоит в том, что вы можете выбрать произвольное количество битов для каждой последовательности SPI. Аппаратные средства обычно ограничены кратными 8 битам. Большинство устройств предназначены для передачи целых байтов, но часто не требуют их. Например, 10-битный A / D, скорее всего, сначала отправит 10 бит данных, а затем отправит 0 или мусор после этого, если вы продолжите синхронизировать его. Если вы используете аппаратный SPI, вы будете вынуждены передавать 16 бит и маскировать мусор. Все будет работать нормально, но в этом случае мастер SPI-микропрограммы может быть быстрее, чем аппаратное обеспечение, поскольку он передает только минимально необходимые 10 бит.
Основными преимуществами аппаратных SPI-мастеров является то, что прошивка может инициировать передачу байтов, затем отключиться и сделать что-то еще. Синхронизация также обычно может быть быстрее, чем может достичь даже развернутый цикл прошивки. Обратите внимание, что, хотя оба эти преимущества могут быть важны в определенных обстоятельствах, они часто не имеют значения. Большая часть кода SPI, который использует аппаратное обеспечение для передачи байта, затем сразу переходит в цикл ожидания для аппаратного обеспечения, чтобы завершить передачу. Также внимательно проверьте требования к времени подчиненного устройства. Устройства SPI обычно бывают быстрыми в целом, но есть случаи, когда вам все равно нужно замедлять аппаратное обеспечение, чтобы соответствовать максимальной скорости, с которой может работать подчиненное устройство.
Это было все с главной точки зрения. Короче говоря, использование SPI-оборудования в качестве главного устройства зачастую не дает больших преимуществ, а иногда и не используется. Однако для рабов все по-другому. Поскольку мастер управляет часами, подчиненные должны быть готовы к тому, что мастер делает, когда мастер делает это. Требования к синхронизации часто бывают довольно короткими по сравнению с временем командования, поэтому вам обычно нужно иметь аппаратное обеспечение для реализации ведомого SPI.
Вы можете использовать SPI-слэйвы в микропрограммном обеспечении, но это сложно, вам нужно тщательно рассчитывать циклы и задержки, и вы обычно заканчиваете реализацией некоторого подмножества протокола, который, как вы знаете, использует ваш конкретный мастер. Например, однажды мне пришлось спроектировать цифровой эквивалент старой аналоговой платы контроллера (им нужны были дополнительные функции, которые не могут быть разумно реализованы в аналоговом режиме, и они хотели что-то меньше, дешевле в производстве и более стабильно). Эта плата взаимодействовала с остальной частью системы через шину SPI. Старая аналоговая плата имела двухканальный ЦАП для установки контрольных значений и двухканальный АЦП для считывания измеренных значений. Реализовать обе эти функции в одном процессоре было непросто, и это включало выяснение того, какое подмножество аппаратного протокола D / A и A / D SPI фактически использовал существующий мастер. Это также включало процессор, который мог работать значительно быстрее, чем тактовая частота SPI. В конце я использовал три прерывания, одно для каждого выбора ведомого и одно для нарастающего фронта линии часов. Последнее должно быть прерыванием с наивысшим приоритетом в системе, иначе требование задержки не может быть выполнено.
Как бы то ни было, суть в том, что SPI master прошивки является простым, небольшим, быстрым и гибким, и нет никаких причин, чтобы избегать его. С другой стороны, для ведомого вам действительно нужно аппаратное обеспечение, или вы должны проснуться и очень тщательно подумать о времени, задержке и тому подобном.
источник
Это зависит от того, для чего вы делаете SPI. Если вы заинтересованы в получении максимальной скорости передачи данных, аппаратное обеспечение всегда быстрее, чем битбэнг (например, чип-корт-манипулятор в Teensy 3, я могу выдавать данные со скоростью 22 Мбит / с, используя аппаратную поддержку SPI, против ~ 4,5 Мбит / с с бит-бенгингом ( также может обрабатывать произвольное количество битов на передачу от 3 до 16 - полезно при отправке данных в 12-битных порциях для определенных светодиодных контроллеров!)). На 16 МГц avrs разница немного меньше, самая высокая скорость передачи данных с аппаратным обеспечением, кажется, высокая 4/5 Мбит / с, в то время как битрейгинг составляет около 2,3 Мбит / с.
Кроме того, если вы используете аппаратную поддержку, опять же, в зависимости от рассматриваемого микроконтроллера, у вас есть доступные варианты использования контроллеров DMA для перемещения ваших данных, позволяя вашему коду вернуться к другим, потенциально более интересным вещам, чем присмотр за данными. написать.
Все вышеперечисленное зависит от того, является ли аппаратный SPI вообще опцией.
источник
Если вы используете SPI, вы не можете использовать прерывание SSP для обработки связи. Это не так важно для SPI для многих целей
источник