Если вы создаете разработочную плату для своего проекта или используете общедоступный МК (микроконтроллер), вы найдете множество протоколов для связи с другими активными компонентами. Стандарты, такие как USB и Ethernet, встроены в большинство контроллеров для работы с периферийными устройствами компьютера. Тем не менее, протоколы, такие как I2C, SPI, UART и другие, используются для взаимодействия с подчиненными МК или программируемыми ИС. Различия между шинами SPI, I2C и UART просты, и любой разработчик, работающий с МК, должен знать, как следовать рекомендациям по трассировке и размещению для этих протоколов.
Эти протоколы являются стандартами сигнализации низкой скорости, поэтому вам почти всегда не придется беспокоиться о таких вещах, как контроль импеданса или поведение линии передачи, если вы работаете с этими протоколами. Однако, существуют некоторые важные моменты дизайна, которые должны быть учтены, чтобы гарантировать, что сигналы ваших шин корректно считываются вашими приемниками. Также есть вопрос адресации, но конкретный продукт и ваш код могут обработать этот момент. Давайте пока рассмотрим, как эти три распространенных протокола могут быть использованы в вашей разводке печатной платы, установим некоторые рекомендации по размещению/трассировке и коснемся некоторых важных моментов для поддержания целостности сигнала.
Все, от 8-битных до 32-битных МКУ, будут использовать по крайней мере один из этих протоколов наряду с GPIO для программирования и отправки сигналов простым периферийным устройствам. Эти три последовательных протокола являются протоколами шины; I2C и UART используют схемы адресации, в то время как SPI не имеет адресации. Несмотря на отсутствие адресации у SPI, это протокол шины, и его все еще можно использовать для выбора нижестоящих устройств для приема данных.
I2C (произносится как I-в квадрате C, или иногда IIC для внутрисхемного взаимодействия) использует две линии (стандартный, быстрый и очень быстрый режимы) для управления другими устройствами; одна линия является линией тактового сигнала (SCL), в то время как другая - линией данных (SDA). Он представлен в трех режимах, которые суммированы в таблице ниже. Обратите внимание, что значения времени нарастания/спада предполагают, что типичные последовательные резисторы установлены на входах/выходах.
Режим |
Скорость передачи данных/скорость тактового сигнала |
Макс. время нарастания/спада |
Мин. время нарастания/спада |
Направленность |
Стандартный |
100 кГц |
1000 нс |
- |
Двунаправленный |
Быстрый |
400 кГц |
300 нс |
20 нс* |
Двунаправленный |
Быстрый плюс |
1 МГц |
300 нс |
20 нс* |
Двунаправленный |
Высокоскоростной |
3.4 МГц (шина 100 пФ) 1.7 МГц (шина 400 пФ) |
120 нс** |
15 нс** |
Двунаправленный |
Ультрабыстрый |
5 МГц |
50 нс |
25 нс |
Однонаправленный |
*Предполагается, что VDD/VCC = 5.5 В. Линейно уменьшается, если VDD/VCC ниже
**Эти значения делятся на 2 для линии тактового сигнала
Обратите внимание, что ультра-быстрый режим - это единственный режим, где связь используется только для операций записи вниз по потоку. Этот режим также важен, поскольку он помогает нам понять, когда потребуется согласование импеданса шины, что на практике почти никогда не требуется. Если мы примем очень консервативный предел в 10% для критической длины линии, мы обнаружим, что в этих линиях критическая длина составляет 0,32 м, что значительно больше размера большинства плат, которые будут использовать I2C. Если мы используем частоту изгиба для минимального времени нарастания/спада с 10%-ным пределом критической длины, мы приходим к гораздо большему значению в 0,92 м. Мы должны принять более консервативное число 0,32 м для ультра-быстрого режима; любая линия I2C короче этого значения не будет вести себя как линия передачи, и нам нужно беспокоиться только о схеме завершения.
Важные моменты в завершении - это выбор правильных подтягивающих и последовательных резисторов. Подтягивающие резисторы и емкость линии шины VDD/VCC формируют разрядную и зарядную RC-цепь, которая и обеспечивает сигнал приемнику, когда драйвер переключается. Значения подтягивающих резисторов (Rp) для сигнальной и тактовой линий должны удовлетворять следующему неравенству:
Обратите внимание, что число в знаменателе выше определено для времени перехода от 30% до 70%, что является стандартом в спецификации I2C. Для времени перехода от 10% до 90% замените 0.8473 на 2.2. Это еще больше ограничит значение подтягивающих резисторов.
Емкость шины определяется с использованием стандартных формул для импеданса шины VCC, который может быть рассчитан с использованием тех же уравнений, что и для линии передачи (либо микрополосковая, либо полосковая). Затем вы можете решить задачу нахождения емкости шины, используя импеданс и время распространения для линии. Если вам не хочется делать этот расчет, вы можете найти в интернете калькуляторы емкости шины I2C. Наконец, последовательные резисторы являются необязательными по стандарту I2C, хотя их можно включить для защиты устройств от всплесков напряжения и для замедления времени нарастания/спада. Смотрите рис. 46 на странице 59 стандарта I2C, чтобы определить подходящее значение последовательного резистора в паре с вашим значением подтягивающего резистора.
Протокол SPI похож на I2C. В этой шине используется всего 4 линии, и компоненты могут быть организованы в два возможных режима. Если используется одно управляющее устройство для активации одного ведомого устройства, топология является просто точка-точка. Активация нескольких устройств зависит от количества выходов выбора микросхем, предоставляемых драйвером (стандартный режим). Второй режим использует последовательное соединение, когда один выход выбора устройства последовательно активирует каждое устройство в цепочке.
В приведенном выше примере наш контроллер имеет два выхода выбора микросхем, которые используются для активации периферийных устройств, когда они будут получать и принимать данные от хоста. Когда серийные данные выводятся из контроллера, необходимое периферийное устройство также должно быть активировано контроллером во время кадра данных, чтобы периферийное устройство приняло и прочитало данные. Это программируется в логике контроллера. Например, если в качестве контроллера используется микроконтроллер или FPGA, это будет реализовано в коде приложения устройства.
В отличие от I2C, различные параметры сигнализации в SPI настраиваются гибко. Метод разряда RC с показанной выше ёмкостью трассы может контролировать выходной ток и время нарастания/спада сигнала с вашего интерфейса. SPI является интерфейсом типа "push-pull", и мощность не потребляется через резистор подтяжки. Время нарастания определяется внешней ёмкостью и выходным импедансом драйвера. Спецификация SPI на вашем хост-контроллере может указывать конкретное время нарастания для конкретного потребления тока в шину при определённой общей ёмкости (возможно, 50 или 100 пФ). Например, в шине SPI на MCU PIC32 время перехода на выходе указано как 5 нс при внешней ёмкости 50 пФ. Таким образом, если мы уменьшим до 10 пФ, мы ожидаем, что время нарастания сократится до 1 нс при данном выходном токе и уровне напряжения. В этом случае у вас теперь есть допуск длины 0.6 дюйма (очень приблизительно с очень консервативным лимитом в 10% на несоответствующие длины). Затем вы можете использовать последовательный резистор для завершения низкоимпедансного выхода драйвера в случае, если линия становится очень длинной для короткого времени нарастания.
Протокол универсального асинхронного приемопередатчика (UART) схож с I2C и SPI. Эти интерфейсы поддерживают максимальную скорость передачи данных около 5 Мбит/с. Устройства UART также просты в использовании, так как между устройствами не передается тактовый сигнал; всё происходит асинхронно. Важно отметить, что внутренний (системный) тактовый генератор каждого устройства UART должен работать на кратной частоте по отношению к скорости передачи данных (т.е. каждый бит считывается N раз). Для связи между одним управляющим устройством и одним подчиненным устройством используются только два провода.
Обратите внимание, что формат данных, уровни сигнала и скорость передачи данных устройства UART можно настроить с помощью внешней схемы драйвера. Будет ли наблюдаться поведение высокоскоростного сигнала, зависит от того, передаете ли вы данные с уровнями сигналов RS-232 или RS-485. UART-сигналы на уровнях RS-232 обычно передаются без согласования, так как фронты сигналов медленные. Однако для RS-485 с UART-сигналами обычно требуются согласующие резисторы. Следуйте стандартным рекомендациям по проектированию высокоскоростных линий для определения необходимости согласования, изучая переход к поведению линии передачи (см. статью, на которую я ссылался выше).
Обычным методом согласования для уменьшения превышений в случае их появления является применение последовательного согласования. Имейте в виду, что UART может находиться в состоянии покоя на высоком или низком уровне, и могут потребоваться подтягивающие резисторы для установки необходимого уровня покоя; обязательно проверьте спецификации компонентов перед добавлением подтягивающих резисторов.
Подробнее о различиях в синхронизации между синхронными и асинхронными шинами вы можете прочитать в этой презентации AltiumLive 2018 года Макса Сили.
Если правила для SPI и UART кажутся немного расплывчатыми, это потому, что у вас есть больше свободы в проектировании интерфейса на уровне прошивки. Как только любая из этих систем начинает работать на высоких скоростях, они становятся восприимчивы к перекрестным помехам, так же как и высокоскоростные стандарты передачи данных. Однако, благодаря гибкости в спецификациях, вы можете обычно проектировать трассы с низкой индуктивностью и уменьшать индуктивные перекрестные помехи. У вас есть некоторая гибкость в прокладке этих сигналов, что делает их довольно простыми для работы в вашей следующей цифровой системе.
При проектировании цифровых систем с распространенными стандартами передачи сигналов, вы можете учесть различия в руководствах по компоновке I2C, SPI и UART, используя правила проектирования в Altium Designer®. Менеджер слоя Layer Stack и интегрированный 3D-решатель полей от Simberian используют геометрию платы и трасс для извлечения паразитных параметров ваших сигнальных линий и помогают определить импедансы, если ваши сигналы достигают слишком длинных расстояний или высоких скоростей.
Altium Designer на платформе Altium 365 предоставляет беспрецедентную степень интеграции для электронной промышленности, которая ранее была доступна только в мире разработки программного обеспечения, позволяя проектировщикам работать из дома и достигать невиданных ранее уровней эффективности.
Мы только начали знакомство с возможностями Altium Designer на платформе Altium 365. Вы можете ознакомиться с страницей продукта для более подробного описания функций или посмотреть один из вебинаров по запросу.
/p>