Шапка

14.7 (II) Последовательные шины и линии связи

14.7.7 PCI Express

PCI Express ( она же «PCI-E» или «PCIe» ) появилась в 2004 году в качестве преемницы параллельной шины PCI ( а также родственных PCI-X и AGP ) для подключения карт расширения к материнским платам компьютеров. PCIe заместила параллельный 32- и 64-разрядный разделяемый набор параллельных линий последовательными каналами «точка-точка». Каждый канал - “lane” состоит из двух дифференциальных однонаправленных пар ( прямой и обратной ) передатчик и приёмник стандарта LVDS ( см. §12.10.3.B ). Увеличивая число дифференциальных линий можно получить гибридное параллельное соединение, но при этом каждая отдельная пара будет работать строго индивидуально в последовательном режиме, с кодировкой 8b/10b и восстановлением синхронизации из потока канальных данных.

PCIe имеет неплохую скорость: на данный момент 4 Gbps ( для PCIe v2.0 ) на каждый канал ( lane ). Стандарт предусматривает от 1 до 16 таких последовательных каналов в шине, т.е. позволяет получить до 64 Gbps для соединителя «×16» ( если, конечно, аппаратура соответствует ).

Отвлечёмся ненадолго и рассмотрим, как архитектура менялась со временем, прейдя в конечном итоге к элегантности традиционной параллельной шины, подобной PC104/ISA, но при сильно уменьшившемся числе соединений. В общих чертах путь выглядит следующим образом. В начале ( 1970-е ) интегральные схемы имели низкую степень той самой интеграции, а корпуса в основном насчитывали 14 и 16 выводов и изредка 40 . Скорости были скромные - порядка 10 MHz . Такие обстоятельства способствовали расцвету разделяемых параллельных шин, которые сокращали число соединений и драйверов, но имели достаточное быстродействие.

Микросхемы работали всё быстрее, требования к скорости росли, и одновременно эволюционировали параллельные шины: их разрядность увеличивалась вместе с тактовой частотой. 8-разрядная ISA превратилась в 16-разрядную, а затем в 32-разрядную EISA. До какого-то момента развитие шло вполне успешно. Переломной точкой стал переход от 32-разрядной 33-мегагерцовой ( 133 Mbps ) шины PCI - сменщицы ISA - на 64-разрядную 133-мегагерцовую ( 1064 Mbps ) PCI-X. Следующая ревизия ( «PCI-X 2.0» ) должна была увеличить скорость в 4 раза, но так и не взлетела. Проблемой стал разбег фронтов в параллельных линиях и отражения от неоднородностей линии в точках подключения параллельных узлов. Оба фактора мешали дальнейшему развитию проекта. В 2003 году разработчики согласовали новый путь развития - архитектуру PCIe с последовательными соединениями «точка-точка».

В PCIe имеются свои источники головной боли. Представьте материнскую плату с несколькими разъёмами «×16» ( это обычная картина даже для недорогих машин ). К каждому соединителю тянутся 32 дифференциальные пары ( 64 провода ), т.е. требуется подключить 128 концов, по которым идёт поток 4 Gbps ( на самом деле 5 Gbps : ещё один гигабит набегает за счёт накладных расходов на кодирование ). Описанной задачей вместе с обслуживанием шины памяти занят «Северный мост», причём так плотно, что имеет собственный теплоотвод. В нём достаточно выводов, а начинка вполне подходит под задачу. Сложность представляет и технология изготовления печатной платы, способной связать компоненты воедино: даже недорогие варианты теперь имеют шесть слоёв под трассировку, а ширина дорожек составляет 0.12 mm ( 5 mil ).

Суммируя, необходимость увеличения пропускной способности неизбежно приводит к организации соединений «точка-точка». Эволюция элегантных разделяемых шин превратила их в не менее элегантные индивидуальные последовательные связи.

Это та самая область, в которой обычные схемотехники успеха не добьются, и лучше нанять специалиста с опытом.

14.7.8 Асинхронная передача ( RS-232, RS-485 )

Пройдёмся теперь по внешним последовательным шинам. Для начала разберём исходный асинхронный последовательный протокол, который берёт начало в стандарте RS-232. Он уже обсуждался ( вместе с RS-422/485 ) в Части 12 ( §12.10.3.A ). Там основной упор делался на физический уровень ( форма сигналов, устойчивость к наводкам и т.п. ). Здесь асинхронная последовательная передача рассматривается в контексте организации логической связи. Последовательный коммуникационный порт активно использовался для подключения модемов и алфавитно-цифровых терминалов, например, легендарного VT-100 ( почему-то относящегося к сегменту «тупых» терминалов ). Сами порты из современных компьютеров по большей части исчезли, но можно приобрести переходники USB-RS-232 или вставную карту с портами RS-232. Обозначение RS-232 - “Recommended Standard #232” относится к электрической сигнальной схеме, которая использует неудобные разнополярные напряжения для обозначения «0» и «1» ( рис. 14.44 и §12.10.4 ). Но физический уровень не обязан соответствовать стандарту RS-232. Он может быть дифференциальным ( и однополярным ) - RS-422/485, может использовать оптическую среду ( для гальванической изоляции и защиты от электромагнитных наводок, а может работать через токовую петлю . Но последний вариант чаще используют для передачи аналоговых сигналов 57 .

Рис. 14.44   Асинхронный последовательный протокол, использующий сигналы обеих полярностей. Рабочие уровни называются «MARK» ( отрицательный, логическая «1» ) и «SPACE» ( положительный, логический «0» ). Вы наверняка знакомы с выражениями «младшим битом вперёд» и «инвертированные уровни»

Формат передачи не зависит от физического уровня и организован очень просто. В пассивном состоянии на выходе передатчика присутствует уровень MARK ( «1» ). Начало посылки отмечается битом START ( SPACE или «0» ), далее идут до 8 бит данных и опциональный бит чётности ), завершающиеся одним или двумя битами STOP ( MARK или «1» ) [* есть вариант со «стопом» длиной полтора бита ] . Передатчик и приёмник должны иметь одинаковые настройки скорости и формата посылки. Типовой протокол «9600 8N1» означает передачу 8 информационных бит, без чётности с одним стоповым битом на скорости 9600 bit/s 58 . Стартовый, стоповый биты и флаг чётности являются служебной информацией , поэтому для формата 8N1 требуется передать 10 бит на каждые 8 бит данных, т.е. максимальная скорость передачи информации составит 960 byte/s .

Описанный формат позволяет приёмнику зафиксировать начало посылки на перепаде STOP-START. Далее приёмник выжидает половину битового промежутка, чтобы убедиться, что стартовый бит всё ещё на месте, после чего считывает каждый следующий бит в середине битового промежутка, отмеряя время по своему генератору согласно данным о скорости передачи. Стоповый бит завершает посылку и одновременно совпадает с пассивным состоянием линии. Асинхронная передача не требует высокой точности тактового сигнала, т.к. ресинхронизация происходит на каждом переходе STOP-STAPT. Передатчик и приёмник должны попадать в один битовый промежуток пока передаётся один канальный символ. Иначе говоря, пары процентов будет достаточно [* для 8-битной посылки, для более коротких слов точность может быть ещё ниже ] .

В этой изящной схеме есть одна логическая слабость: приёмник не сможет синхронизироваться ( обнаружить переход STOP-START ) на непрерывных последовательностях определённых символов. Например, длинная последовательность букв «U» с неудобным кодом 55h ( 01010101b ). Если подставить эти значения на диаграмму 14.44 ( 8N1 ), на выходе будет меандр . Ещё более серьёзное упущение - отсутствие стандартизации на физическом ( электрическом ) уровне RS-232: нет указаний на «гендерную принадлежность» используемых разъёмов, сигналов квитирования и типов устройств «DCE» и «DTE», см. табл. 14.4 с официальными названиями сигналов и номерами выводов ). Это вечный источник ошибок, из-за которого два устройства RS-232 отказываются работать в паре. Авторы и сами попадали в эту ловушку, но что немедленно отреагировали читатели ( Алё, друзья, дайте передохнуть! Авторы не разрабатывали RS-232, и даже написали руководство «по подключению последовательных устройств, которое работает», см. предыдущее издание рис. 10.17 ). С появлением переходников USB-RS-232, заменивших штатные COM-порты, среди которых можно подобрать самый разные варианты, проблема только усугубилась.

На рис. 14.45 показана картинка с экрана осциллографа, на которой 4 байта из потока случайных символов 59 собираются в асинхронную посылку с явно видимыми символами START и STOP.

Рис. 14.45   «Создание» асинхронных посылок правильного вида из случайных битовых сочетаний. 8N1 , скорость 14.4 kbaud на нагрузке 2.2 nF . Нижний луч - картинка, получаемая наложением четырёх вариантов выше ( цифровые значения указаны слева ). По горизонтали 100 μs/div , по вертикали 10 V/div

В большинстве асинхронных последовательных линий связи данные передаются в алфавитно-цифровой форме в ASCII кодировке - самом распространённом представлении печатных символов ( см. табл. 14.5 ) 60 . Но ничто не мешает отправлять и двоичные символы. Единственным неудобством является невозможность их непосредственного отображения на экране или принтере. Последовательные порты RS-232 по-прежнему в строю: многие приборы и измерительные инструменты получают команды и передают данные в последовательном формате. Последовательный формат позволяет использовать для связи микроконтроллер ( Часть 15 ), имеющий в своём составе UART . Вопрос согласования уровней обсуждается в §12.10 .

14.7.9 Кодировка Манчестер

Table 14.4 RS-232 Signals Pin i number Direction Name 25-pin 9-pin (DTE o DCE) Function (as seen by DTE) TD 2 3 —— transmitted data } data pair RD 3 2 —— received data RTS CTS 4 5 7 8 — — request to send (= DTE ready) clear to send (= DCE ready) } handshake pair DTR 20 4 — data terminal ready } handshake pair DSR 6 6 — data set ready DCD 8 1 — data carrier detect } enable DTE input RI 22 9 — ring indicator FG 1 - frame ground (= chassis) SG 7 5 signal ground

Если каким-либо образом добавить в посылку дополнительные синхронизирующие переходы, к которым сможет привязаться приёмник, то дополнительные биты START и STOP будут не нужны. Простой, хотя и не самый эффективный способ добиться этого - использовать кодировку Манчестер ( рис. 14.46 ).

Рис. 14.46   Двухфазное кодирование. Для двухфазной уровневой кодировки Манчестер переход должен присутствовать в середине каждого битового промежутка. Направление изменения уровня определяется значением информационного бита. Кодировку Манчестер можно рассматривать как результат операции «ИСКЛЮЧАЮЩЕЕ_ИЛИ» тактового сигнала и данных. В двухфазной маркерной кодировке значение бита указывается наличием или отсутствием перехода в центре битового промежутка при обязательном переходе ( любого направления ) на его границе

Битовые промежутки следуют с постоянной частотой с обязательным требованием изменения уровня в середине каждого битового промежутка. «1» кодируется переходом НИЗКИЙ-в-ВЫСОКИЙ, а «0», соответственно, ВЫСОКИЙ-в-НИЗКИЙ. В начале битового промежутка может производиться вспомогательный переход, если сочетание информационных битов того требует. Гарантированный переход в каждом битовом промежутке принципиально упрощает процесс восстановления тактового сигнала ( с помощью фазовой автоподстройки или ##delay-locked loop). Кроме того, в канале получается «DC-balanced» поток [* с равным числом нулей и единиц, т.е. с нулевым средним уровнем ] , что позволяет передавать его через трансформаторы [* или по радиоканалу ] .

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

Table 14.5 ASCII Codes non-printing printing printing printing / Name Control char Char Hex \ Dec / Char Hex \ Dec / Char Hex \ Dec / Char Hex \ Dec null ctrl-@ NUL 00 00 SP 20 32 @ 40 64 ‘ 60 96 start of heading ctrl-A SOH 01 01 ! 21 33 A 41 65 a 61 97 start of text ctrl-B STX 02 02 " 22 34 B 42 66 b 62 98 end of text ctrl-C ETX 03 03 # 23 35 C 43 67 c 63 99 end of xmit ctrl-D EOT 04 04 $ 24 36 D 44 68 d 64 100 enquiry ctrl-E ENQ 05 05 % 25 37 E 45 69 e 65 101 acknowledge ctrl-F ACK 06 06 & 26 38 F 46 70 f 66 102 bell ctrl-G BEL 07 07 j 27 39 G 47 71 g 67 103 backspace ctrl-H BS 08 08 ( 28 40 H 48 72 h 68 104 horizontal tab ctrl-I HT 09 09 ) 29 41 I 49 73 I 69 105 line feed ctrl-J LF 0A 10 * 2A 42 j 4A 74 j 6A 106 vertical tab ctrl-K VT 0B 11 + 2B 43 K 4B 75 k 6B 107 form feed ctrl-L FF 0C 12 , 2C 44 L 4C 76 l 6C 108 carriage return ctrl-M CR 0D 13 - 2D 45 M 4D 77 m 6D 109 shift out ctrl-N SO 0E 14 2E 46 N 4E 78 n 6E 110 shift in ctrl-O SI 0F 15 / 2F 47 O 4F 79 o 6F 111 data line escape ctrl-P DLE 10 16 0 30 48 P 50 80 p 70 112 device control 1 ctrl-Q DC1 11 17 1 31 49 Q 51 81 q 71 113 device control 2 ctrl-R DC2 12 18 2 32 50 R 52 82 r 72 114 device control 3 ctrl-S DC3 13 19 3 33 51 S 53 83 s 73 115 device control 4 ctrl-T DC4 14 20 4 34 52 T 54 84 t 74 116 neg acknowledge ctrl-U NAK 15 21 5 35 53 U 55 85 u 75 117 synchronous idle ctrl-V SYN 16 22 6 36 54 V 56 86 v 76 118 end of xmit block ctrl-W ETB 17 23 7 37 55 W 57 87 w 77 119 cancel ctrl-X CAN 18 24 8 38 56 X 58 88 x 78 120 end of medium ctrl-Y EM 19 25 9 39 57 Y 59 89 y 79 121 substitute ctrl-Z SUB 1A 26 3A 58 Z 5A 90 z 7A 122 escape ctrl-[ ESC 1B 27 ; 3B 59 [ 5B 91 { 7B 123 file separator ctrl-\ FS 1C 28 < 3C 60 \ 5C 92 | 7C 124 group separator ctrl-] GS 1D 29 = 3D 61 ] 5D 93 } 7D 125 record separator ctrl-A RS 1E 30 > 3E 62 A 5E 94 7E 126 unit separator ctrl-_ US 1F 31 ? 3F 63 _ 5F 95 DEL 7F 127

Кодировка Манчестер используется в старом стандарте Ethernet ( 10base-T ) 10 Mbps по витой паре Cat-5. Для дуплексной передачи используются 2 пары из 4 имеющихся 61 . Для сокращения накладных расходов ( которые уменьшают для «Манчестера» полезную нагрузку канала в два раза ) в SATA, HDMI , PCIe и в Gigabit Ethernet используется более экономная кодировка 8b/10b.

14.7.10 Двухфазное кодирование

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

Взгляните на популярный двухфазный маркерный код ( рис. 14.46 ). По условиям требуется переход в начале каждого битового интервала плюс переход в его середине для информационной единицы, но отсутствие такового для нуля. Собственно, это всё. Единица отличается фактом перехода, а не его полярностью, как в кодировке Манчестер, т.е. предложенная кодировка безразлична к полярности сигнала и её изменению [* предполагается изменение полярности, как в цепочке инверторов неопределённой, но неизменной во времени длины; смена полярности в момент передачи не допускается ] .

Двухфазная маркерная кодировка используется в цифровом аудио ( AES3, S/PDIF и Toslink ), а также в некоторых форматах записи на магнитную ленту. Альтернативные названия Aiken Biphase и F2F .

14.7.11 Бинарные потоки - подмена битов и RLL

Простая схема последовательной передачи с ограниченной полосой просто отправляет биты в естественном виде, добавляя биты синхронизации, позволяющие приёмнику подстроить свой генератор. Непосредственная пересылка битов имеет официальную аббревиатуру NRZ и парную ей NRZI . Передаваемый поток меняет состояние, когда в данных встречается «0», и сохраняет своё состояние при «1» 62 .

Проблема обеих схем в том, что, если в данных встретится длинный участок единиц для NRZ или нулей для NRZI, то очень вероятен срыв синхронизации, и, кроме того, такие участки постоянных уровней опускают нижнюю границу полосы сигнала, затрудняя трансформаторную изоляцию линии. Возможным способом противодействия будет ограничение длины участков с одинаковыми значениями. Воздействовать на данные можно как до кодирования, так и после него. Такое мероприятие носит название «ограничение длины неизменных участков» ( RLL )

RLL может иметь самые разные формы. Например, кодировка 8b/10b преобразует каждую 8-битную порцию данных в специально подобранный 10-битный канальный символ. Код ##ETF 8-to-14, используемый в оптических компакт дисках, ограничивает длину участков с обеих сторон ( 2≤RL≤10 ). Самый простой вариант – «замена битов» используется, например, в USB. Там замена битов применяется к данным в NRZI и ограничивает длину участков с постоянным уровнем 6 битовыми интервалами. После шести последовательных «1» в очередь на передачу вставляется «0», что вызывает появление в потоке NRZI синхронизирующих переходов. Приёмник, конечно, осведомлён об указанном приёме и выбрасывает нуль, принятый после шести единиц. Для наихудшего случая - все единицы - служебная информация займёт 16% общего объёма данных, а для случайного потока не превысит 1% .

14.7.12 RLL кодирование

Существуют и более запутанные пути создания последовательностей ограниченной длительности. Они предполагают поблочное кодирование последовательного бинарного потока. Используемые при этом алгоритмы не только ограничивают длину постоянных участков, но и подстраивают спектр канальных данных, чтобы дополнительно улучшить устойчивость к ошибкам. Скажем, в DVD используется схема ##EFMPlus, в которой 8-битные порции данных превращаются в 16-битный канальный символ, для которого справедливо соотношение 2≤RL≤10 при одновременном контроле спектра сигнала.

Ещё одной популярной схемой является 8b/10b, используемая в FireWire, SATA/SAS, gigabit Ethernet, DVI, HDMI и PCIe. В ней каждые 8 бит данных превращаются в 10-битный символ со сбалансированным числом нулей и единиц. Алгоритм замены учитывает число несбалансированных битов и подстраивает канальный символ соответствующим образом. Итоговый поток гарантированно имеет не более 5 последовательных бит с одним состоянием, а на любом последовательном участке из 20 битов разница в числе «0» и «1» не будет превышать 2 . Аналогичными свойствами обладает код 4b/5b, используемый в 100-мегабитном Ethernet.

Кодек 8b/10b встраивается и в некоторые ИМС сериализации-десериализации, например CY7C924. Но есть SERDES кристаллы ( DS92LV18 фирмы TI ), использующие простую схему NRZ с обрамлением из стартового и стопового импульсов. Производитель заявляет, что такой подход лучше, потому что приёмник может работать и на случайных данных, не требуя специальной синхронизирующей комбинации битов , разбивающей информационный поток, и не теряет при этом обратной связи с передатчиком. Таким вот образом обычная асинхронная передача 8N1 отобразилась в область гигабитов . [* Следует заметить, что асинхронная посылка 8N1 имеет RLL=9 , т.е. может по праву носить гордое имя «RLL кода». Чего в ней нет исходно - это баланса единичных и нулевых бит, т.е. она не является «DC-balanced» ] .

14.7.13 USB

Универсальная последовательная шина USB была предложена в 1995 году в качестве более простого в использовании унифицированного интерфейса для подключения периферийных устройств к компьютеру. Исходно ( v1 ) подразделялась на «низкоскоростную» ( 1.5 Mbps ) и «полноскоростную» ( 12 Mbps ), чего было вполне достаточно для подключения клавиатуры с мышью и поддержания умеренных скоростей обмена с внешними накопителями типа «USB-флэшек». Во второй версии интерфейса добавили «высокоскоростной» режим ( 480 Mbps ), которого уже было вполне достаточно для нормального обмена с внешними дисками. Третья версия добавила «сверхскоростной» режим, ещё одну витую пару ( и пару контактов в соединитель ), превращающую интерфейс в полнодуплексный. Общая скорость поднялась в десять раз до 4.8 Gbps . Очередная ревизия USB v3.1 дополнительно удвоила скорость ( до 10 Gbps ), выдаваемую ведущим мощность ( до 5V@2A или опциональный вариант до 5A при 12...20 V ) и ввела новый разъём «Type C».

В USB v1 и v2 передача идёт по одной дифференциальной паре в полудуплексном режиме. Связь вида ведущий-ведомый, а в кабеле имеется дополнительная пара жил для передачи земли и питания. Кабель несимметричный: на стороне ведущего разъём типа USB-A, а на стороне ведомого - USB-B, причём соединители бывают как полноразмерные, таки и уменьшенные. Сеть строится по схеме «звезда». Периферийные устройства подключаются к ведущему через активные концентраторы, которые размножают соединители типа USB-A и позволяют подключить до 127 ведомых к одному USB порту ( рис. 14.47 ). Допустимая потребляемая мощность ограничивается на уровне 100 mA ( малая мощность ) или 500mA ( большая мощность ) 63 . Длина соединительного кабеля не должна превышать 5m , но наличие промежуточных активных концентраторов позволяет довести общую длину линии до 20m . Стандарт USB 3.0 вместе с дуплексной связью увеличил мощность нагрузки до 900 mA , а USB 3.1 довёл её до 10 W при 5V и до 100 W при 20 V . USB устройства можно включать без предварительного обесточивания системы , т.к. контакты питания замыкаются раньше, чем сигнальные линии.

Рис. 14.47   USB - последовательный интерфейс с организацией ведущий-ведомый и топологией «звезда» ( в противоположность набору последовательных повторителей в шине FireWire ), допускающей до 5 последовательно включённых концентраторов ( хабов ). Пассивные кабели связи ограничены длиной 5m , но активный концентратор позволяет начать отсчёт длины заново. Отдельные связи выполняются несимметричным кабелем: разъём типа USB-A «смотрит» в сторону ведущего, а USB-B - в сторону ведомого. Полноразмерная пара показана на рис. 1.123 . На схеме «a» и «b» обозначают вилки, «A» и «B» - розетки. Интересным вариантом является OTG порт ( USB «on-the-go» ) ( здесь не показан ), который может превращаться и в «A», и в «B» порт.

14.7.14 FireWire

FireWire, чьё официальное название – «IEEE 1394», была представлена почти одновременно с USB в 1995 году и предназначалась для скоростного обмена данными с мультимедийными устройствами и внешними накопителями. Исходная скорость обмена составляла 400 Mbps при полнодуплексной передаче ( сравните с полудуплексом 12 Mbps в USB 1.1 ). Кроме того, периферия могла забирать до 45 W при 30 V ( USB 1.1 - жалкие 2.5 W ). Последующие версии сначала удвоили скорость ( 800 Mbps FireWire 800 ), а затем дополнительно учетверили её ( до 3.2 Gpbs ).

FireWire предусматривает мультимастерную конфигурацию и соединения точка-точка. Кабель симметричный, а устройства подключаются как повторители. Отдельные соединение не может быть длиннее 4.5 m ( FireWire 400 ), но в случае использования промежуточных повторителей ограничивается длиной 72 m . FireWire 800 допускает связь и на большие расстояния через Cat-5e или оптический кабель. Подобно USB, FireWire допускает подключение работающих устройств. На данный момент практически полностью вытеснена интерфейсом USB.

Большая отдаваемая мощность и хорошая приспособленность для потоковых данных делает соединения FireWire надёжнее и часто производительнее, чем USB. Соединитель имеет очень надёжную конструкцию, а его асимметричная форма позволяет вставлять кабель «вслепую» 64 . Но несмотря ни на какие преимущества FireWire победу празднует USB, возможно из-за сложности, дороговизны и лицензионных игр фирмы Apple, предложившей FireWire 65 .

14.7.15 CAN

Все знают об USB и FireWire, но кто слышал о CAN ? Эта шина, предложенная фирмой Bosch в 1980 году для использования на автотранспорте, была стандартизована как ISO 11898. На данный момент практически монопольно занимает данную нишу. CAN используется в качестве транспортного уровня в нескольких протоколах, самый известный из которых - DeviceNet, занятый в устройствах промышленной автоматики 66 .

В отличие от прочих примеров данной части CAN может оперировать расстояниями до километра, что является большим плюсом для заводского оборудования. Это не связь точка-точка, как PCIe, Ethernet или USB, а равноправная мультимастерная шина, позволяющая подключать до 30 узлов, т.е. является многоточечной ( рис. 14.48 ). Максимальная скорость до 1 Mbps при длине до 40 m и до 10 kbps для максимальной специфицированной дальности 1000 m .

Рис. 14.48   CAN имеет мультимастерную многоточечную архитектуру и активно используется на транспорте и в промышленной автоматике. Оптимизирована под короткие сообщения и имеет хорошую помехоустойчивость

CAN оптимизирована под короткие «широковещательные» сообщения и имеет ограничение на полезную нагрузку безадресного пакета - 8 байт. Как при таких условиях передать фразу «Hello everyone, here’s some data labeled X, hope you like it!», можно посмотреть на сайте фирмы Kvaser ( www.kvaser.com/can/ ) 67 . Это именно то, что нужно для сети сбора данных и управления. Скажем, датчик может генерировать поток значений температуры и готов осчастливить ими весь мир, но ему совершенно не интересно знать, слушает ли его кто-нибудь 68 . А когда ему нечего сказать, он будет совершенно тих и незаметен с электрической точки зрения, что совсем не похоже на поведение болтливых USB, FireWire и Ethernet, которые постоянно что-то бубнят сами себе ( но так, что слышно всем вокруг ).

Одним из подходов к осмыслению организации CAN и её многопроцессорных возможностей является переход в «пространство параметров», состояние которого постоянно обновляется в автоматическом режиме подключёнными к шине узлами. Таким образом, если кому-либо нужна температура двигателя ( например, для диагностики ), потребуется просто считать данные о температуре, заброшенные в «почтовый ящик» двигателя.

С электрической точки зрения CAN - дифференциальная линия на передатчиках с открытым коллектором. Сигнальная пара CANH/CANL идёт по витой паре ( обычно экранированной ( STP ), нагруженной на обоих концах на сопротивление, равное волновому сопротивлению линии ( стандартное значение 120 Ω ). В состоянии ожидания на обеих линиях держится потенциал ∼2.5 V . Для передачи используется несколько неожиданная дифференциальная схема ( рис. 14.49 ). Логический ноль обозначается повышением уровня на ∼1V в линии CANH ( до ∼3.5 V ) и понижением на такую же величину в CANL ( до ∼1.5 V ), т.е. дифференциальным сигналом ∼2V . А вот логическая единица формируется иначе. Вместо реверсирования потенциалов на CANH/CANL ток выходных каскадов просто выключается , отчего обе линии возвращаются в исходное состояние ожидания ∼2.5 V . Сигнальный ноль на шине называется доминантным состоянием ( «dominant state», шина активна, логический «0» ), а сигнальная единица - рецессивным ( «recessive state», шина пассивна, логическая «1» или ожидание ).

Рис. 14.49   Шина CAN - дифференциальная с асимметричным форматом электрических сигналов, упрощающих арбитраж

Столь необычная сигнальная схема упрощает арбитраж. На шине нет ведущего, но любой узел может инициировать передачу, если видит на ней пассивное состояние в течение некоторого времени большего минимального. Если данное условие выполнено, узел начинает передавать своё сообщение, контролируя одновременно состояние линий ( согласно стандарту CAN приёмная часть должна наличествовать в каждом подключённом к шине устройстве ). Если в то же самое время передачу начнёт другой узел, то «столкновение» на шине очень легко обнаруживается [* и проходит совершенно безболезненно для участников ] : передатчик сразу обнаружит доминантное состояние ( логический «0» ) на месте переданного рецессивного состояния ( логической «1» ). При обнаружении столкновения на шине передачу следует сразу прекратить и повторить попытку позднее.

В итоге узел, передающий больше нулей в начале посылки, захватывает контроль над шиной. Так естественным образом образуется приоритизация источников, потому что первые 11 ( или 29 бит для версии «B» ) пакета занимает идентификатор, и абонент с меньшим номером получает преимущество. Особое замечание о приятном свойстве доминантно-рецессивной схемы. Сообщение от более приоритетного источника не повреждается при столкновении ( объясните почему ). В терминах сетевых соединений это протокол «CSMA/CD+AMP» 69 .

Стандарт CAN специфицирует правильную работу в диапазоне напряжений –2...+7V , но большая часть передатчиков расширила его до –7...+12 V , а то и до –12...+12 V . ISO 7637 обязывает проводить жёсткий тест серией наносекундных импульсов ±150 V , которые приёмо-передатчик должен выдерживать. Есть, наконец, и недорогая диодно-стабилитронная защита NUP2105 или NUP2202 ( см. техническую заметку ON Semi ##AND8169 и §12.1.5 ). На длинных участках лучше всё же использовать гальваническую изоляцию, позволяющую избежать, в том числе, и контуров цепях земли.

В соответствии со своим автотранспортным предназначением CAN включает надёжный механизм обнаружения ошибок. На уровне битов идёт наблюдение за корректностью посылки ( с установкой флага ошибки при несоответствии ) и вставка/удаление синхроимпульсов ( биты иной полярности после 5 последовательных битовых промежутков одного уровня ). На уровне сообщения используется CRC - циклический избыточный код, поле подтверждения ACK и набор специальных проверочных битов, которые должны иметь рецессивный уровень ( «контроль формы» ). Все эти элементы служат для контроля целостности пакета.

Выпускаются вставные периферийные карты с выходами CAN для стандартов PCI/PCIe, PC104 и PCMCIA, а также переходники USB-CAN. Некоторые микроконтроллеры, например, серия AT90CAN уже имеют аппаратный блок CAN на кристалле. Выпускаются отдельные трансиверы CAN. Большая часть работает от одного источника +5V , но встречаются модели и под +3.3 V . Можно приобрести и кристаллы с гальванической изоляцией, например, ISO1050 ( рис. 14.50 ), которые полезно использовать на длинных линиях и в шумном окружении. Шинную часть интерфейса можно питать от независимого источника +5V или воспользоваться линиями питания, которые всегда именно для этих целей включают в специальный сигнальный кабель для разводки CAN в дополнение к экранированной сигнальной паре с контролируемым импедансом ( см. Belden 3082/84 или Alpha 6451/52 ).

Рис. 14.50   (A) Для длинных линий и шумного окружения выпускаются однокристальные трансиверы с гальванической изоляцией, например, ISO1050 фирмы TI. (B) Стандартный кабель для разводки CAN включает два дополнительных провода для организации питания гальванически изолированного канала. Здесь использована отдельная ИМС гальванической изоляции между микроконтроллером и трансивером CAN. Последний получает свои +5V из питающей пары в кабеле

Существуют упрощённые варианты CAN: однопроводной CAN, связанный только линией CANL с верхней границей скорости 40 kbps и сильно его напоминающий LIN . Последний использует подтяжку на +12 V и замыкает линию на землю. Верхний предел скорости ∼20 kbps . Эти два дешёвых интерфейса иногда используются в качестве аварийных/вспомогательных каналов в обычной шине CAN. Ограничение скорости имеет целью снизить чувствительность к шуму.

Стандарта на соединители для CAN нет, но наиболее распространённые варианты используют 9-контактный D-SUB 70 .

14.7.16 Ethernet

Ethernet 71 есть везде. Это характерные хорошо всем знакомые вилки и розетки, похожие на телефонные. Был предложен исследовательским центром Xerox в Пало-Альто ( “Xerox PARC” ). Исходно физический уровень ( PHY ) использовал коаксиальный кабель ( причём «толстый» - 10Base5, затем «тонкий» - 10Base2 ) с согласующими резисторами на обоих концах, проходящий через каждый сетевой узел. Все абоненты использовали трансформаторную изоляцию и подключались непосредственно к кабелю ( длинные отводы не допускались ). Как и в CAN, имеется процедура обнаружения столкновений и организации задержки перед повторной посылкой. Корректная работа в условиях неизбежных и разрушительных для передаваемых данных столкновений ( коллизий ) обеспечивается заданием минимальной длины пакета ( в настоящий момент согласно стандарту IEEE 802.3 равна 74 байтам ), а максимальная длина кабеля ( для «тонкого» сегмента ) ограничена на уровне 200 m .

В настоящее время разделяемый коаксиальный кабель полностью вытеснен соединениями точка-точка из неэкранированной витой пары ( UTP, Cat-5e или Cat-6 ). Один конец подключается к интерфейсной карте в компьютере ( NIC ), а другой к многопортовому маршрутизатору 72 . Последний буферирует и отправляет пакеты только в направлении приемного узла, не обременяя посторонними данными непричастных абонентов. Собранная по такой схеме сеть работает без столкновений 73 . Сейчас сеть строится на витой паре или оптоволокне. Стандартные скорости 10, 100 Mbps ( “Fast Ethernet” ), 1 Gbps ( “Gigabit Ethernet” ) с постепенной миграцией на 10 и 100 Gbps . Сейчас идут разговоры о терабитных соединениях. Переход на всё более высокие скорости требует дополнительной работы. Медленные варианты ( 10Base-T ) использовали кодировку Манчестер ( §14.7.9 ), 2-уровневые сигналы и однонаправленные витые пары. При переходе на скорость 100 Mbps ( 100Base-TX ) была взята кодировка 4b/5b и 3-уровневые сигналы. Здесь также каждая пара передавала данные только в одном направлении. Gigabit Ethernet ( 1000Base-T ) использует уже 8b/10b, а все четыре витые пары в кабеле работают в обоих направлениях ( используется «гибридное» подключение ). Все слова выше описывают физический уровень сетевого соединения согласно 7-уровневой модели OSI . Уровни, расположенные выше не знают ( и не должны ), что происходит ниже, поэтому менять аппаратуру или программную реализацию можно совершенно незаметно для прикладного уровня.

Соединения Ethernet на витой паре ограничены длиной ∼100 m ( точная цифра зависит от затухания в кабеле ). Оптика позволяет тянуть сигнал на ∼1 km по мультимодовому волокну и на десятки километров по одномодовому 74 . Для передачи сигнала с меди на оптоволокно или на радиоволны требуется конвертор. Некоторые из таких устройств позволяют заодно с физической средой передачи поменять и скорость, см. предложения фирм Allied Telesis, TRENDnet, StarTech или IMC Networks и широкий набор преобразователей разного рода, включая переходники на USB или на последовательный порт фирмы B&B Electronics. Есть и варианты среди периферии для микропроцессоров ( Lantronix XPort, Silicon Labs CP2201, см. Часть 15 ).

Ethernet поддерживается столь широко, что давно стал основной средой, объединяющей компьютеры в сеть. Разработчики приборов и оборудования учли это обстоятельство, и сейчас трудно отыскать современный инструмент без разъёма RJ-45, через который можно менять режим работы и считывать результат. ( Почти все снимки экрана в книге были сделаны осциллографом Tektronix серии TDS3000 и выгружены через сеть ). В области измерительных приборов происходят приятные изменения: стандартизация ( LXI LAN eXtensions for Instrumentation) упрощает решение задач взаимодействия с приборами ( сравните с удручающим разнообразием драйверов для USB ). Ethernet продолжает движение в производственную область, обрастая «промышленными» расширениями, необходимыми для управления в реальном времени 75 .

57 Есть альтернативы, допускающие бОльшие длины линий ( до ∼1 km ), а в случае RS-422/485 ещё и многоточечную конфигурацию. <-

58 Стандарт на асинхронную передачу допускает большую вариабельность длины канального слова: от 5 до 8 бит, с чётностью и без неё. Поэтому спецификация 6E2 вполне легальна, хотя на практике редко встречается что-то отличное от 8N1 . <-

59 На самом деле случайные , полученные с помощью компаратора из аналогового шума, см. §13.14.7 и раздел «Museum» на CD, сопровождающем книгу «Numerical Recipes» ( www.nr.com ). <-

60 Стандарт ASCII описывает 7-разрядные символы ( всего 128 ), в т.ч. 32 «непечатных» из первой колонки в табл. 14.5 . Существуют «расширенные ASCII» 8-разрядные таблицы, доопределяющие ещё 128 символов элементами национальных алфавитов, например, «ё» ( десятичный номер 184 [* в русской кодовой странице ] ), ° ( 176 ), ±( 177 ). Предупреждение . Таких расширений имеется великое множество, какие-то попали в стандарт ISO-8859, другие существуют самостоятельно. Но любые дополнительные кодировки следует использовать с осторожностью. Большая часть программ понимает расширенную кодировку символов. ( Код можно ввести непосредственно с клавиатуры [* с цифровой части полноразмерной клавиатуры ] , в виде 3-символьного цифрового кода при нажатой клавише «Alt» ( с лидирующими нулями, если требуется ). Т.е. для русской "e-umlaut" ( «ё» ) надо набрать Alt-184. Таким методом можно вводить любые ASCII символы, включая непечатные. Таким образом, чтобы ввести CR надо набрать Alt-013. Хорошие программные редакторы, например, Notepad++, UltraEdit и Emacs позволяют вводить управляющие символы таким способом. Можете проверить ). <-

61 В более быстром стандарте Ethernet от кодировки Манчестер, которая удваивает поток данных ( 50% служебной информации ), отказались в пользу более эффективной 4b/5b, требующей для служебных данных всего 25% полосы пропускания. Кроме того, эффективность увеличивает 3-уровневое канальное кодирование, хотя передача по-прежнему идёт по одной витой паре ). На следующем шаге - при 1 Gbps - используется уже 5-уровневое кодирование и все четыре пары ( «гибридное» подключение позволяет передавать сигнал по каждой паре одновременно в обоих направлениях ). <-

62 Эти исторические окаменелости в названиях несколько сбивают с толку, например, NRZI - то же самое, что NRZ, но для инвертированных данных. Авторы предпочитают терминологию, предложенную Скляром ( [089] ): NRZ-L ( «NRZ-Level» ) для обычного NRZ и NRZ-M ( «NRZ-Mark» ) для NRZI. <-

63 USB устройства при первом физическом подключении должны работать в режиме малой мощности. Перейти в нормальный режим можно только после прохождения полной процедуры опознания и регистрации в системе. Если всё прошло успешно, контроллер шины включает режим полной мощности с ограничением тока 500 mA . В табл. 12.4 можно найти несколько защищённых переключателей питания, популярных в такого рода схемах. <-

64 Говорят, что его форма была разработана с учётом опыта эксплуатации Nintendo GameBoy. <-

65 Но им таки удалось получить роялти с миллиардного устройства под FireWire в 2008 году! <-

66 CAN можно обнаружить не только в автомобилях и на заводах. Один из коллег приобрёл лазерный сканирующий микроскоп Zeiss Duoscan и обнаружил в нём CAN. <-

67 Это всё сентименты: сообщения-то короткие! Место в пакете закончится уже на втором слове предложения. <-

68 И, соответственно, неэффективна при передаче больших блоков данных ( например, аудио или видео потоков ). Такую шину неудобно использовать для связи процессоров в одном устройстве. <-

69 По крайней мере, такая форма короче, чем «carrier-sense multiple-access with collision detection and arbitration on message priority» . <-

70 См. www.interfacebus.com/Design_Connector_CAN.html и www.interfacebus.com/Can_Bus_Connector_Pinout.html. Дополнительная информация о шине CAN есть на сайтах www.kvaser.com/can/, www.can-cia.de, в технической заметке ##SLOA101A фирмы TI и ##AN-770A фирмы Analog Devices. <-

71 Необычное составное имя [* «Сетевой эфир»/«Эфирная сеть»: Ether-net – «Эфир»+»сеть» ]   было выбрано, чтобы донести основную цель её создания - повсеместно доступная среда передачи данных. Название аналогично «luminiferous ether» , по которому, как считалось ранее, распространяется свет. Данная теория была опровергнута в эксперименте 1887 года Михельсона и Морли (Michelson, Morley). В соответствии с представлениями о юморе в околокомпьютерной среде первые два компьютера, связанные сетью, получили сетевые имена Michelson и Morley [* Скорее, этим жестом создатели ненавязчиво напомнили о делах предшественников и сообщили миру об уровне собственной эрудиции: высоколобая тусовка отличается изрядным снобизмом, но любим мы её не за это ] . <-

72 Такая конфигурация называется «звезда», в то время как коаксиал включается «шиной». <-

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

74 Зато у сети на медном проводе есть приятная возможность передавать питание ( PoE ) по сигнальному проводу, что очень удобно, когда узлы сети или компоненты инфраструктуры расположены в труднодоступных местах. PoE использует те же витые пары, что и сетевое соединение, и подаёт между ними ∼48 Vdc . В оконечном устройстве такое «фантомное питание» питание снимается со средних точек сигнальных трансформаторов. Звукоинженеры уже много лет используют такой же приём для подключения микрофонов. [* См. схему ##питания микрофона на рис. 14.14(A) из первого издания и §X9.23 ] <-

75 Например, этим целям служит стандарт IEEE 1588 «Протокол точного времени» ( PTP ). Он позволяет синхронизировать местные часы с точностью ∼100 ns через сетевое соединение ( требуется сетевое оборудование с поддержкой протокола, например, ИМС MAC/PHY фирмы NSC DP83640, либо микроконтроллеры с такой опцией, вроде Luminary Stellaris фирмы TI ). PTP реализован в стандарте LXI для связи измерительных инструментов, а также промышленных сетях на основе Ethernet - Profinet и CIP . <-

Previous part:

Next part: