Как я USB удлинял

Привет всем, многоуважаемые братья электронщики! Вот решил поделиться с вами чем есть :)
Это моя первая статья, так что прошу слишком сильно не пинать :)

Работал я лет 5 назад в одной конторе разработчиком. И вот приходит ко мне генеральный, и говорит:

«Надо бы сделать оптоволоконный удлинитель для USB! Китайцы уже такие делают, но он не разделяемые, т.е. две коробочки (одна в комп, вторая к устройству) жестко соединенные оптоволокном. Нужно чтобы был разделяемый и прозрачный для компа и устройства».

Понятное дело, что первая мысль, разрезать китайское волокно и разъемы поставить… На что получаю ответ:

«Пробовали… Не работает оно так...»

Тогда решил я посмотреть, как же оно у китайцев устроено. Взял PCAD и начал реверс инжиниринг. Смотрю на китайскую плату и в пикад ее перерисовываю. Когда перерисовал, заставил его схему сгенерировать… Получилось, мягко говоря, не очень, но связи все были на месте. Еще пара часов и читабельная схема готова. Оказалось, что китайцы эти свои коробочки жестко настраивают друг на друга и если меняются условия передачи оптического сигнала, то вся настройка расползается. А у нас задача чтобы все ко всему подходило.

Стало понятно, что китайский путь не для нас, надо что-то свое придумывать… Тут стоит немного углубиться в протокол USB версии 1.1 (2.0 для данной задачи не предполагался). USB работает в режиме полудуплекса, т.е. информация передается то в одну сторону, то в другую. Сигнал USB передается по двум линиям D+ и D-. В зависимости от скорости (FullSpeed 12MBit, LowSpeed 1.5MBit), какая-то из этих линий подтягивается к +3.3 В. Информация передается как бы по дифференциальному интерфейсу (когда одна линия = 1, другая = 0 и наоборот), но с одним неприятным моментом, конец каждого пакета обозначается битом SE0, когда на обеих линиях устанавливается 0. Если бы не этот дурацкий SE0, все было бы довольно просто, но вот как по одному волокну передать 3 состояния?

В результате я решил с помощью ПЛИС’ы сделать нечто похожее на сериализатор, который считывал состояния обеих линий D+ и D- и передавал их на более высокой скорости по оптоволокну. Но вот незадача, по оптоволокну не получается передавать постоянные уровни длительностью больше пары сотен микросекунд, начинает срабатывать АРУ у передатчиков и приемников, и сигнал уплывает. Пришлось помимо состояния линий USB замешать еще и бит начала «USB бита», чтобы по линии всегда шел переменный сигнал, но тут тоже всплыла проблема, если переменный сигнал не был сбалансирован по постоянной составляющей, т.е. кол-во нулей было больше кол-ва единиц, то на длительных интервалах АРУ опять начинало утаскивать сигнал в… Тогда пришлось подмешать еще и 4-й бит, которым балансировалось содержимое «USB Бита». Получилось что на 1 «USB Бит» приходится уже 4 оптоволоконных бита.

С передачей вроде разобрались, переходим к приему. USB протокол асинхронный и без тактирования… Вспоминаем UART, где частота тактирования для приемника должна быть в 8 раз выше чем частота скорость передачи по интерфейсу. Для нашего интерфейса (USB 12 MBit) мы получили скорость передачи по оптоволокну уже 48 MBit. А чтобы его нармально принять, нужно тактировать его частотой 48*8 = 384 МГц. Такую частоту ПЛИС уже не осиливала… Ну да ничего, попробуем 48*4=192 МГц, может получится. Тут пришлось прибегнуть еще к одной хитрости. Пришлось делать умножитель частоты в два раза (кварц был доступен только на 48 МГц) прямо внутри CPLD матрицы. Страшная получилась вещь, но, на удивление, довольно стабильная J. А чтобы получить требуемые 192 МГц пришлось тактировать обоими фронтами умноженного сигнала.

В общем, все закончилось хорошо. После 4-х месяцев мытарств и переделок, миру было явлено устройство, точнее 2-е коробочки и двухпроводной оптоволоконный кабель, через которые можно было к компу подключать USB принтер на расстоянии в километр. И ни комп, ни принтер этого не замечали. Хотя справедливости ради надо сказать, что больше чем на 200 метров его и не испытывали.

Так выглядит последний вариант платы
  • +14
  • 30 октября 2012, 22:25
  • Gerret
  • 1
Файлы в топике: OptoUSB.zip

Комментарии (77)

RSS свернуть / развернуть
хм. статья «ой какой я молодец!»
+1
Butthurt?
-1
совсем нет. просто констатирую факт.
вот еще скажи, что не так? ;)
0
Мне так не показалось, мне понравилось как человек устройство описал, позитивненько так. А вот такие замечания как у тебя наводят на мысль о простой зависти. Ну раз это не так, то и ладно.
+2
да совсем не так. я искренне рад за человека, что он смог решить такую непростую задачу. просто вот такое сложилось впечатление. ни подробностей, ни частностей, ни путей решения. тут ведь не там?
но сильно-сильно смахивает на мою первую реплику.

и да. баттхёрт в моем исполнении выглядит сильно иначе обычно… ;)
0
1. Статья в личном блоге и соответствует тематике сайта. Явной рекламы я в ней не вижу.
2. Статьи «смотрите как я могу» — достаточно распестрены в сообществе, ничего плохого в этом, ИМХО, нет, наоборот, есть позитивные моменты.
3. Требовать от автора исходников и схем – не этично. Кто может/хочет – тот выкладывает. В данном случае – я так понял, это была коммерческая разработка «на дядю» и публиковать подробности автор не имеет права.
+3
распестрены
ЭМммм?..
а имхо — и ничего хорошего в этом тоже нет.

исходники и схему с разводкой никто и не требует. просто без них — это именно «посмотрите, какой я молодец!» или нет?

и да. где это вы негатив усмотрели?
ирония, не более.
0
Распестрены = распространены

Извиняюсь, ночь, поздно, авто-замена в Word.

а имхо — и ничего хорошего в этом тоже нет

Почему, автор описал несколько «наступлений на грабли» — это тоже полезно. Развернулась дискуя в комментариях, что тоже позитивно (я тоже склоняюсь к использованию кода Манчестер в данном случае).

Вы действительно думаете, что данная статья как-то «вредит» сообществу?
0
Вы действительно думаете, что данная статья как-то «вредит» сообществу?
откуда такой вывод?
0
Из Вашей иронии и «а имхо — и ничего хорошего в этом тоже нет».
0
но ведь «ничего хорошего» <> «плохо».
но по итогам обсуждения и отзывчивости автора — неплохо.
но первое впечатление менять не буду и буду, тем не менее, не менее настойчиво отстаивать.
+2
(ой. во нагородил… %) )
0
Там очень много было всяческих частностей и я не стал пытаться описать все сразу в одной статье, как-то объем получался сильно большой. Если Вас интересует что-то конкретное, готов описать это более детально. Правда с исходниками к ПЛИСе тяжеловато будет, никак не могу найти.
0
на самом деле, именно плисовая часть и интересна… там, по идее, довольно много любопытных моментов должно быть…
0
Самые нестандартные решения, которые я применял в плисе, это умножитель частоты и генератор импульсов по фронтам сигнала. Эти примочки опишу в следующей статье :) Остальное… просто конечные автоматы.
0
кстати. а что за плисина применена?
0
Xilinx XC2C64A. Одна из самых маленьких в CPLD линейке.
0
а почему ксилинкс был выбран?
0
Так исторически сложилось, что в той конторе Xilinx'ы применялись, я не стал отступать от этого
0
Покажи схему. Не обязательно полную принципиальную, достаточно по квадратику на микросхему и связи между ними. Мне структура интересна. На фото там довольно много корпусов видно…
0
Схемы в архиве.
0
Можно было прямо к статье прикрепить.
0
Человек пишет первую статью, если пишете такой комментарий, то пишите как прикрепить, что ли… А то похоже на КЭПа, нет?
0
Во первых, это очевидно. А во вторых… Загляни в футер статьи, где аттачи лежат.
0
В том то и дело, что очевидно… Ну, возможно, вы правы…
0
Да ему вечно все не так и то не эдак, еще не привыкли что-ли? Комплексы, однако…
0
Это все, конечно, хорошо… Но без схем, исходников и всего такого как-то неинтересно.
0
  • avatar
  • Vga
  • 30 октября 2012, 22:55
> Тогда пришлось подмешать еще и 4-й бит, которым балансировалось содержимое «USB Бита».
всё уже давно украдено до вас. возьмите тот же эзернет:
en.wikipedia.org/wiki/Manchester_code
0
  • avatar
  • atd
  • 30 октября 2012, 23:20
Согласен, изобрел велосипед :) Но это тыл мой первый опыт с оптоволокном, и о том, что нужно балансировать по постоянной составляющей, я узнал именно тогда.
0
Прикол в том, что манчестерский код всего лишь вдвое шире по полосе чем исходный сигнал, а не в как в описаной конструкции.
0
Можно еще про коды 8-10 вспомнить. Ценой потребления 20% пропускной способности канала гарантируют отсутствие постоянной составляющей и блоков нулей/единиц длиннее четырех подряд. К тому же, можно выделить коды под специальные значения, вроде SOF. Ну и имеет смысл перед запаковыванием в 8-10 распаковать USB-шный bit stuffing.
0
Да понятно, что можно навернуть, если умные книжки почитать. Удивился просто, что постоянка такие проблемы создала, хотя проблема решена десятки лет назад (для задач магнитной записи, где эта же проблема стоит в полный рост).
0
Ну да. Но 8-10 тащемта достаточно известный класс кодов, нынче весьма популярен. Это SATA, PCIE, USB 3.0 SS и другие высокоскоростные последовательные интерфейсы. Можно сказать, свеженькая замена манчестеру. И может решить дополнительные задачи, вроде передачи SOF/SE0.
0
Спасибо за информацию, буду знать.
0
какая цена девайса? будет ли на usb2? — как по цене будет если вместо ip камеры веб камеру ставить? на метров так 50-100
0
IP-камера практически наверняка дешевле. И значительно. Такие штуки только для тех случаев, когда иначе никак, и стоят дорого. На USB 2.0 HS такую штуку сделать значительно сложнее — она работает на частоте в 40 раз больше. Да и там более жесткие ограничения таймингов, весьма вероятно, что оно перестанет в них укладываться из-за задержек в схеме и оптоволокне.
0
Наш удлинитель стоил около 4000р за комплект (из них большую часть стоили оптоволоконные приемники и передатчики).
На USB 2.0 есть серийно выпускаемые устройства. Там USB упаковывают в Ethernet кадр и пускают по волокну через 10ГБитные трансиверы (такие были в том, что я разбирал). Но они сильно много стоят (порядка 1000 USD).

Свое создать думали, но дешевле китайцев все равно не получается…
0
Там USB упаковывают в Ethernet кадр и пускают по волокну через 10ГБитные трансиверы (такие были в том, что я разбирал).
И как оно работает? На каких растояниях? Как, интересно, там решается проблема жестких требований к таймингам. Хотя, если я правильно понимаю, главное вовремя Ack-ать в ответ на пакеты, а ответный пакет можно и несколько задержать. Но 10Гбод — сильно, в 20 раз быстрее самого USB 2.0 HS)

А ты просто тупо семплишь USB сигнал на одном конце и восстанавливаешь на другом? Без всяких там Ack'ов, декодирования USB кодировки (NRZI+bit stuffing) и так далее?
0
На сколько мне удалось понять, они там ставят USB Трансивер, дальше большая плисина (Xilinx Spartan), из нее на Ethernet трансивер и дальше на оптику. Что там в плисе — не знаю…
0
Про расстояние, китайцы утверждают, что более 500 м.
0
Пришлось помимо состояния линий USB замешать еще и бит начала «USB бита», чтобы по линии всегда шел переменный сигнал
Манчестер? Не, не слыхал :)
Вообще, ностальжи :)
Живо напомнило мне прошлую работу. С тем только отличием, что приемка «5» и соответственно схема из рассыпной логики 530/533/1533.
Самое эпическое было ethernet phy/mac
0
А он бы помог? Манчестер увеличивает требования к скорости передачи вдвое. Из-за особенностей сигналирования на линиях USB каждый бит шины приходится кодировать двумя нормальными, итого и так, и так получаем учетверенную скорость передачи.
Вот если учесть, что специальные «биты» (точнее, состояния, такие как SE0) возникают только в определенных местах, то можно использовать кодирование 8-to-10 и вместо увеличения полосы на 300% получить увеличение всего на 25%.
0
Эммм… на сколько я помню, ПЛИС Xilinx входит в перечень разрешенных к применению.
0
и, вероятно, 580,537,1526. Для приемки «5» необязательно использовать устаревшее барахло.
0
А вот расскажите, как вы с направлением передачи работаете? Т.е. как вы узнаете, когда нужно с удаленной стороны слушать, а когда передавать?
+1
Переключение направления происходит по тому самому биту SE0. Как только видим, что пакет окончен, отпускаем линию и слушаем. Причем USB слушать приходится с обеих сторон т.к. не известно, кто сейчас будет передавать инфу.
0
а можно подробнее про оптическую часть? какие модули (стандартные гигабитные?), какое волокно,…
0
  • avatar
  • woddy
  • 31 октября 2012, 10:36
Модули Avago HFBR-1414 и HFBR-2416. Модули не быстрые (160 МБит) на основе светодиодов. Многомодовое оптоволокно 62.5/125 μm.
0
Атлична, атлична! Хорошая статья, спасибо!
0
А на сколько сложнее выйдет реализовать свой USB-хаб на один порт. Первая плисина прикидывается хабом, конвертирует в свой протокол, обменивается по оптоволокну своими пакетами. Вторая плисина эти пакеты конвертирует в юсб и общается с устройством. Тут же не должно быть проблем со временем отправки подтверждения. А подключение принтеров/мышек/камер через хаб не вызывает у компов проблемы.
Разве что роутерам дополнительный модуль ядра подгружать прийдется. Да самолельным девайсам с юсб-хостом его писать :)
0
Хаб выйдет значительно сложнее. Там придется в полный рост реализовывать протокол USB. Там и плис нужна будет по солиднее. FPGA скорее всего пришлось бы применять. А эта плисина стоит меньше 100 р и логики в ней очень не много. С таймингами USB тоже все не так критично, самое главное, чтобы ACK пришел в том же кадре, а это целая миллисекунда. Чтобы получить такую задержку, волокно должно быть около 300 км!
0
Благодарю.
При цене комплектухи в 4к, повышение цены плисины со 100р на 500р думаю не столь критично, если будет возможность использовать вместо 2-х оптоволоконных кабелей один. А он то тоже денег стоит. Собственно именно вопрос «уложиться в 1 кабель» больше всего и интересовал, полагал что с кастомным протоколом это будет возможно.
0
кабель на 1 или 4 волокна стоит почти одинаково. проблема появляется когда надо много подобных устройств подключить, либо соседние волокна заняты телефонией.
0
Одним волокном обойтись крайне затруднительно, так как трансиверы, которые могут передавать сигнал по одному оптоволокну стоят значительно дороже чем отдельные приемники и передатчики. Мультиплексирование оптического сигнала в одном волокне — штука прикольная но довольно затратная.
0
Поставить китайский WDM 1,3/1,55 :-) Они спецпроверку проходят. Но это еще +50 баксов минимум и здоровый корпус…
0
После 4-х месяцев мытарств и переделок, миру было явлено устройство, точнее 2-е коробочки и двухпроводной оптоволоконный кабель, через которые можно было к компу подключать USB принтер на расстоянии в километр. И ни комп, ни принтер этого не замечали.
А что мешало воспользоваться просто принт-сервером?
0
  • avatar
  • Vga
  • 31 октября 2012, 16:13
это называется медиаконвертер и стоит не дороже 150 евров
www.spectra.de/Media_Konverter-g774-h50 первое попавшееся
в сетевую дыру достаточно было воткнуть принтсервер или купить сетевой принтер
0
По ряду причин заказчик не мог использовать Ethernet принтеры и сканеры… Нужно было именно USB.
0
А можно чуть подробнее об этих причинах? Тащемта ведь принт-сервером в сетевой можно превратить любой принтер… Ну, не считая возможных проблем с дровами…
0
Этот заказ был от ФСБ и вопрос о разрешенных к применению устройствах там стоял очень жестко.
0
гыг. а пара самопальных железок — приемлема?
ниверю!!111адынадын
-1
забавно
и чем так опасен принтсервер в закрытой сети или даже простом сетевом линке?
или может тупо надо было попилить бабло?
0
Вы мало работали с режимниками.
Помима сети есть ещё и закрытая сеть, и изолированное от сети оборудование. Закрытая сеть в принципе не может иметь физического контакта с обычной сетью (ни VPN, ни даже 2 сетевых карты на одном компе). изолированное оборудование в принципе не может иметь любую сеть (даже USB-Ethernet переходник недопустим).
Так уж заведено (а на самом деле это упрощенная модель).
0
и не дай б-г с ними работать
я работаю с госконторой и то не рад

но такие фимозные требования должны же быть как-то обоснованы
хотелось бы почитать
почему нельзя было удаленный принтер соединить дешевым медиаконвертером и принтсервером?
никто и не предлогал этот принтер подключать к какой-то сети или оборудованию с сетями
0
Большинство таких требований основано на защите от дурака. Если в компе нет лишних дырок — значит нет желания туда что-то подключить. Ну и контролировать это прощще. Особенно это касается именно различных сетевых интерфейсов. Так как на подобных компах в добавок ко всему еще и отсутствуют всякие CD/DVD и запрещены флэшки, то даже если изловчиться и подключить какую-нибудь железку к USB — слить информацию с компа будет крайне затруднительно. А при наличии сети — подключайся и делай что хочешь.
+1
К сожалению точного назначения данного приспособления я просто не знаю :) Объяснением «так надо» пришлось удовлетвориться…
0
А почему вы не выложите проект полностью за вами что КГБ следит… или вы дали подписку о неразглашении на 50 лет…
0
А вы готовы все свои коммерческие проекты выложить в открытый доступ? Я готов отвечать на вопросы, но целиком отдавать исходники проекта не могу.
0
Ладно, я пошутил. (У меня нет коммерческих проектов).
0
Вполне возможно, что так был реализован мгновенный обмен сообщениями. Написал, отправил на печать, вылезло в другом крыле:«привет!», ответ посылается также.
+1
Corning обещает запустить новинку в продажу уже в первом квартале этого года.
0
позволяет увеличить длину USB кабеля вплоть до 100 метров
Во, а тут километр! :)
+1
Интересная штука. Любопытно только, где она будет продаваться и сколько на самом деле стоить будет.
0
Непонятная реакция на статью. Ни схем, ни прошивки, ни, хотя бы, что за компоненты использованы, а плюсов аж 14.
0
Статья в личном блоге, за что требовать схему/прошивки?
Плюсы, за идею, её описание и описание граблей, на которые наступил автор. Лично я и не думал что можно так, «достаточно просто», реализовать удлинитель.
0
Комментарии почитайте. Разработка коммерческая, автор не может раскрыть всё.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.