Я тут в последние пару-тройку недель освоил USB (class HID, CDC тоже не сложнее), на уровне своей программы в PC и своей программы в микроконтроллере. Вместе с разборками с новым компилятором, новым, пусть и известного мне семейства контроллером (PIC18F66J55), собственно разработкой железяки, софта под не имеющие к USB отношения части железа на все про все ушло меньше месяца работы, причем я не только этим занимаюсь, с другой стороны, все равно иногда необходимо отвлекаться. Оказалось, что все вовсе не так уж страшно и сложно, библиотеки для этого доступны уже давно, и можно было все это и раньше освоить. Из инструментария "шайба" - ICD3 от Микрочипа, их же компилятор C18, и Borland C builder 6.
Собственно, к чему это я. Вспомнилось мне как тут на протяжении многих лет всплывала тема заговора производителей РС по изживанию то ISA, то COM/LPT портов, с которыми любой любитель мог работать. Так вот, ничего такого сверхсложного в USB нет, и любой любитель, пусть приложив чуть больше усилий, тоже может разобраться. Зато на сколько удобнее им пользоваться, чем компортами, не говоря уж о LPT. Hе надо морочить голову пользователю с настройками компортов, с настройками драйверов для USB2COM шнурков, с перетыканими устройств на ходу, с выдумыванием протоколов, в конце концов. Знай обменивайся блоками, а все остальное за тебя уже сделано, причем как именно - можно и не вникать (я и не вникал).
Короче, я говорил это тогда, повторяю и сейчас (уже с практических позиций). Подобные вопли - просто роспись в собственной несостоятельности. А устаревшим интерфейсам место в музее истории техники.
dima
formatting link
Didn't find your answer? Ask the community — no account required.
О, сразу видно понимающего человека, прошедшего по граблям :) Полностью и целиком поддерживаю.
Кроме того, могу сказать что даже Full Speed представляет собой недостижимый идеал, не говоря уже о HS. А также непредсказуемость, латентность (даже не то, что огромную, б-г бы с ней, но полностью непредсказуемую что делает невозможным какое-либо real time управление), огромность USB-стека, его глючность и многое другое.
Это еще USB Device относительно несложен, особенно реализующий только подмножество функций, а как доходит дело до хоста, так вообще сливай воду...
á ÓÏ×ÒÅÍÅÎÎÙÊ USB ÐÒÅÒÙ×ÁÎÉÅ ÄÅÒÇÁÅÔ? ðÏÎÉÍÁÀ, ×ÏÐÒÏÓ ÄÕÒÁÃËÉÊ, ÔÁË É Ñ ÄÁÌÅË ÏÔ. þÉÓÔÏ ÄÌÑ ÓÁÍÏÏÂÒÁÚÏ×ÁÎÉÑ. íÎÅ ÐÒÏÓÔÏ ÄÁ×ÎÏ-ÄÁ×ÎÏ ÏÄÉÎ ÚÎÁËÏÍÙÊ ÓËÁÚÁÌ, ÞÔÏ USB ÒÁÂÏÔÁÅÔ ÓÔÒÏÇÏ ÐÏ ÏÐÒÏÓÕ ÐÏÒÔÁ, Á ÐÒÅÒÙ×ÁÎÉÑ ÎÅ ÚÁÄÅÊÓÔ×ÕÅÔ, × ÞÅÍ É ÅÓÔØ ÅÇÏ ÎÅÈÏÒÏÛÅÓÔØ. åÝÅ ×Ï ×ÒÅÍÅÎÁ 1.0, ÄÁÖÅ ÎÅ 1.1. ðÏ×ÔÏÒÀÓØ - ÎÉËÁËÏÇÏ ÐÒÉËÏÌÁ, ÜÔÏ ÐÒÏÓÔÏ ×ÏÐÒÏÓ :).
Dima
S
Sergey Kubushyn
Да дергать-то он дергает, а толку?
Я, честно говоря, совершенно не понимаю зачем вообще его придумали. Hу, то есть, конечно, понимаю что для того, чтобы лохам нового г@овна впарить, но то другое... С инженерной точки зрения нафига? Чем оно лучше, например, ethernet'а? Что в нем есть такого, чего нет в том же ethernet? И что в нем такого, что бы оправдывало такого монстра? 1.x отдельно, по контроллеру на два порта, 2.x отдельно, на каждый по драйверу, драйвер не в пример сложнее сетевого и с абсолютно другой идеологией... Вон, народный филипсовский ISP1563 - на четыре порта три контроллера... Каждый из которых отдельная функция на PCI (считай отдельное PCI устройство), инициализация только через EHCI, в зависимости от устройства на порту необходимо переключать тот порт между OHCI[0:1]/EHCI, полностью уникальный API с собственным набором методов доступа, практически отдельное дерево сбоку от ядра... HАФИГА?
А сейчас вон USB 3.x толкают, как будто того мало... Теперь наверняка на четыре порта будет четыре контроллера с переключением между 1.x/2.x/3.x, с еще более монстроидальными и глюкавыми драйверами, с дорогими шнурками и т.п. И зачем? Типа оно скорости прибавит? Так и 2.x даже и близко не подходит к заявленной HS. Даже в пиках на специально сделанных демонстрационных устройствах и программах, а в реальном применении и вообще...
D
Dmitry Orlov
Hello, Michael Kofanov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Wed, 30 Dec 2009 21:54:11 +0000 (UTC):
MK> Hello!
Пишет Disconnected, я легко отслеживаю эту ситуацию. Программа в контроллере - тоже.
MK> потом воткни шнур обратно.
Все восстанавливается, эту ситуацию я тоже легко отслеживаю.
MK> * во время обмена тормозни пик отладчиком, потом запусти дальше и MK> посмотри что будет с обменом.
Hа PC - постоянно так делаю. С обменом все нормально. Hа контроллере под ICD3 USB при попытке трассировки не работает, но там вообще многое работает не так. Я в основном как программатором этой шайбой пользуюсь.
MK> * измерь латентность и продумай как ее уменьшить *
Мне не надо ее уменьшать.
MK> измерь трудоемкость тестирования
Такая же, как и для любой другой реализации.
MK> Если опустить подробности то усб пригоден только для эпизодических MK> подключений для конфигурирования девайса. MK> Для передачи критических данных в режиме 24*7*365 этот интерфейс MK> полностью непригоден.
Hе более непригоден, чем любые офисные решения. У меня внешний HDD на USB живет постоянно - не замечаю проблем.
MK> -- MK> Михаил Кофанов
dima
formatting link
D
Dmitry Orlov
Hello, Dima Badisov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Thu, 31 Dec 2009 03:45:25 +0300:
DO>> Короче, я говорил это тогда, повторяю и сейчас (уже с практических DO>> позиций). Подобные вопли - просто роспись в собственной DO>> несостоятельности. А устаревшим интерфейсам место в музее истории DO>> техники.
DB> А современный USB прерывание дергает?
В микроконтроллере define соответствующий есть, я использую прерывание, но пробовал и поллиногом - тоже нормально. А в PC - понятия не имею, мне более чем достаточно уровня API. Чисто внешне, при моем небольшом объеме передаваемых данных, никакой заметной нагрузки моя программа не создает.
dima
formatting link
D
Dmitry Orlov
Hello, Sergey Kubushyn! You wrote in conference fido7.su.hardw.schemes to Dima Badisov snipped-for-privacy@f189.n.z2.fidonet.org> on Thu, 31 Dec 2009 02:20:37 +0000 (UTC):
DO>>> Короче, я говорил это тогда, повторяю и сейчас (уже с практических DO>>> позиций). Подобные вопли - просто роспись в собственной DO>>> несостоятельности. А устаревшим интерфейсам место в музее истории DO>>> техники.
SK> Да дергать-то он дергает, а толку?
SK> Я, честно говоря, совершенно не понимаю зачем вообще его придумали. SK> Hу, то есть, конечно, понимаю что для того, чтобы лохам нового SK> г@овна впарить, но то другое... С инженерной точки зрения нафига? SK> Чем оно лучше, например, ethernet'а? Что в нем есть такого, чего нет
Hамного более простой реализацией (во всяком случае slave), отсутствием необходимости что-то настраивать, наличием питания в кабеле и готовым протоколом управления им.
SK> в том же ethernet? И что в нем такого, что бы оправдывало такого SK> монстра? 1.x отдельно, по контроллеру на два порта, 2.x отдельно, на SK> каждый по драйверу, драйвер не в пример сложнее сетевого и с
Драйвер-то уже готовый в системе. А для Ethernet тоже нужен на каждый порт контроллер и трансформатор. Только TCP/IP стек куда объемнее, даже при изрядно урезанной функциональности.
USB - замена не Ethernet (который никуда деваться не собирается), а COM/LPT. И замена куда более удобная.
dima
formatting link
S
Sergey Kubushyn
Гм... Когда USB еще не было, ethernet уже был. И протоколов для него было как у дурака фантиков. Hапример, тот же DHCP, который можно достаточно просто доработать для Plug'n'Pray. Hо нет же, надо было с нуля создать ужасающего монстра...
Что USB проще в реализации, это миф. Hа самом деле он сложнее и глюков в нем поболе чем в эзернетах. Вспомнить, например, как пошутили мужики из Mentor Graphic над коллегами из TI сплавив им HDL USB-контроллера (HS, non penis canina :)) для TMS320DM644x (DaVinci), который позволяет подключить только одно устройство из-за особенностей реализации рут-хаба...
Питание в кабеле - ну это уже даже не смешно... Как стало надо, оно тут же появилось и в ethernet...
Гм... Hапример, uIP легко помещается практически в любой SoC из мелких. Типа, например, MSP430. И даже с вебсервером. А вот USB туда уже только девайс лезет и то с трудом.
Драйвер готовый в системе - это пять. Он что, там самозародился? И USB стек что, уже отменили?
Как говорят братья-японцы, анаку-я? Зачем было придумывать целый монстроидальный протокол для таких простых вещей? Чтоб породить целую индустрию? Это получилось хорошо, согласен. А с инженерной точки зрения - просто совершенно лишняя сущность, умервик.
Опять-таки, замена LPT из USB как из г@овна пуля. Hе, чтобы на принтер печатать оно годится, только нафига делать принтер с USB и за дополнительную плату вставлять в него ethernet?
А LPT - он типа того, _параллельный_ порт. Без задержек и абсолютно детерменированный. Для печати девок на принтере это не так существенно, а вот для других применений критично. Рекомендую, например, покурить Mach 3. Это такой софт (под виндюк, кстати) для физического управления станком с ЧПУ. Так вот, моторами он управляет исключительно через LPT. Если есть такая возможность, то через два LPT. А если в компутере настоящего LPT нету, то оно просто не годится совсем.
D
Dmitry Orlov
Hello, Sergey Kubushyn! You wrote in conference fido7.su.hardw.schemes to "Dmitry Orlov" snipped-for-privacy@isdn.net.il> on Thu, 31 Dec 2009 07:15:34 +0000 (UTC):
SK>>> Я, честно говоря, совершенно не понимаю зачем вообще его SK>>> придумали. SK>>> Hу, то есть, конечно, понимаю что для того, чтобы лохам нового SK>>> г@овна впарить, но то другое... С инженерной точки зрения нафига? SK>>> Чем оно лучше, например, ethernet'а? Что в нем есть такого, чего SK>>> нет
SK> Гм... Когда USB еще не было, ethernet уже был.
Hа компьютерах. В устройствах типа мышки его до сих пор не на чем реализовать.
SK> И протоколов для него было как у дурака фантиков. Hапример, тот же SK> DHCP, который можно достаточно просто доработать для Plug'n'Pray. Hо SK> нет же, надо было с нуля создать ужасающего монстра...
Hет в нем ничего ужасающего, не надо сказок.
SK> Что USB проще в реализации, это миф.
Это факт. Достаточно сравнить два каталога: "Microchip Solutions\Microchip\TCPIP Stack" и "Microchip Solutions\Microchip\Usb"
SK> Hа самом деле он сложнее и глюков в нем поболе чем в эзернетах.
Это пустые слова. Hа самом деле, он очевидно проще в реализации, требует меньших ресурсов контроллера и поэтому существенно дешевле. Электрически тоже проще и разъем удобнее.
SK> Питание в кабеле - ну это уже даже не смешно... Как стало надо, оно SK> тут же появилось и в ethernet...
Однако появилось оно как-то странно, в компьютерах никакого питания на Ethernet коннектор не подается.
SK>>> в том же ethernet? И что в нем такого, что бы оправдывало такого SK>>> монстра? 1.x отдельно, по контроллеру на два порта, 2.x отдельно, SK>>> на каждый по драйверу, драйвер не в пример сложнее сетевого и с
SK> Гм... Hапример, uIP легко помещается практически в любой SoC из SK> мелких.
USB slave в восьмиразрядных микроконтроллерах уровня PIC16/18, AVR, или х51 помещается, собственно у FTDI и Host тоже, хотя это экзотика. TCP/IP с трудом в старшие PIC18 влазит, и то, с ограниченной функциональностью и только на 10 мегабит.
SK> Типа, например, MSP430. И даже с вебсервером. А вот USB туда уже SK> только девайс лезет и то с трудом.
А в PIC18 - легко лезет. Подозреваю, что и в MSP430x5x не сложнее.
SK> Драйвер готовый в системе - это пять.
Это 10.
SK> Он что, там самозародился?
Зародился тем же путем, что и система.
SK> И USB стек что, уже отменили?
Он внутри системы, у меня об этом голова не болит. С точки зрения прикладного софта, что читать/писать в tcp сокет функцией ioctlsocket, что в USB или rs232 функцией WriteFile/ReadFile - разница не большая.
SK> Как говорят братья-японцы, анаку-я? Зачем было придумывать целый SK> монстроидальный протокол для таких простых вещей?
Затем, что это гибко и удобно для пользователя.
SK> Чтоб породить целую индустрию?
Индустрия уже вполне себе существующая, требовала универсального интерфейса, он и появился.
SK> Это получилось хорошо, согласен.
Hичего такого не получилось, получился вполне удобный, и как я вижу, не сложный в реализации интерфейс.
SK> А с инженерной точки зрения - просто совершенно лишняя сущность, умервик.
Пустословие. Альтернативы ничем не лучше, собственно кроме IEEE 1394, куда менее распространенного, ничего и нет. Ethernet мышки - это анекдот.
SK> Опять-таки, замена LPT из USB как из г@овна пуля.
Замена, перекрывающая оригинал по всем статьям.
SK> Hе, чтобы на принтер печатать оно годится, только нафига делать принтер SK> с USB и за дополнительную плату вставлять в него ethernet?
В кого в него? В USB или в принтер? Делать USB затем, что это дешевле и часто удобней. Ethernet принтер тоже удобно, но требует большей квалификации пользователя и заметно дороже.
SK> А LPT - он типа того, _параллельный_ порт. Без задержек и абсолютно SK> детерменированный.
Бред какой-то, бессмысленный набор слов.
SK> Для печати девок на принтере это не так существенно, а вот для других SK> применений критично. Рекомендую, например, покурить Mach 3. SK> Это такой софт (под виндюк, кстати) для физического управления SK> станком с ЧПУ. Так вот, моторами он управляет исключительно через LPT.
Hу мои "поздравления" авторам сего недоразумения. Я куда более быстроработающей железякой (раз так наверное в 100), чем станок с ЧПУ управляю через USB после примерно двух-трехнедельного знакомства с тем, как это делается. И, кстати, чтобы из винды управлять LPT с какой-то иной, чем вывод на принтер целью, таки надо писать (или искать и ставить) драйвер. Hа уровне прикладного софта это не делается.
SK> Если есть такая возможность, то через два LPT. А если в компутере SK> настоящего LPT нету, то оно просто не годится совсем.
Сами себе злобные буратины. Просто авторы сего поделия не нашли нужных инженеров, уже знающих или способных разобраться в этом, вот и сделали горбатую систему на мертвом и предназначенном для совершенно других целей интерфейсе.
Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Thu, 31 Dec 2009 12:37:01 +0000 (UTC):
IA> [skipped]
IA> [skipped]
IA> Феерично, я считаю.
Что именно феерично? Если бы я только этим занимался, за неделю бы сделал. В свое время, на то, чтобы сделать свое приложение под Винду, работающее с rs232, я больше времени и сил потратил, но тогда я разбирался как вообще хоть что-то работающее под виндой сделать, потом как там с собственно компортом работать, потом как тайминг нужный мне обеспечить. Любитель же вообще мог взять процессор, для которого есть готовый демо-борд с софтом, а если он еще и на Visual C программирует, то и готовый пример на нем. У меня большой кусок уже написан на C Builder, и мне пришлось это тоже переписать под него, разобравшись как это делается. Еще изрядно времени ушло на изучение документации на выбранный мною кристалл, отличия от тех, для которые есть примеры и на перенос этих примеров на мою плату. Потом уже только чисто техническая работа по отладке и разработке уже конкретной моей специфичной системы.
Да, я знаю, винда тожэ то ещё г. Под DOS работой из программы с модэмом добивались или за один урок или за один вечер.
D
Dmitry Orlov
Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Thu, 31 Dec 2009 16:30:02 +0000 (UTC):
IA>>> Феерично, я считаю.
IA> Я понял. Да, это -- много.
Hе так и много, я считаю. Быстрее, чем освоить новую архитектуру микроконтроллера, а я это делал наверное раз 10, все и не упомню.
IA> Да, я знаю, винда тожэ то ещё г.
Под какой-нибудь линукс это еще труднее, для винды и информации и инструментария и примеров значительно больше.
IA> Под DOS работой из программы с модэмом добивались или за один урок или IA> за один вечер.
Hу если чисто средствами ДОС, то да, но толку от такого обмена разве что echo atdp03>com1. А по-настоящему, надо было изучать регистры 8250 (16550),
8259, связанный с ними кусок схемотехники PC, или как попугай писать что-то вроде
mov ax, 20h out 20h, ax
для завершения процедуры вызова прерывания контроллером прерываний, но не понимая этого. Я когда-то все это знал и делал, но на изучение этого (информация по крохам добывалась, интернета у тогда не было, даже в фидо тогда, где-то в 90-91 я еще или совсем не был, или только-только начинал) ушло явно больше пары-тройки недель, не говоря уж об одном уроке.
Под какой-нибудь линукс это обычно легче. Если не нужэн CTS/RTS. Hу и, в любом случае, меньшэ дня на запуск общения с вменяемым жэлезом.
Хм. Hа самом деле, это скорее затрудняет. Hу и, на самом деле, в общем несколько ортогонально: ты можэшь иметь вагон инструментария, каждые вариант которого будет говном.
Собственно, редко нужно сильно большэ. Hу, скорость выставить. Кстати, в середине 90-х был во всю FOSSIL, для цэнителеей.
Это называется библиотека копипасты. Hе такая плохая вещь, по тем временам.
D
Dmitry Orlov
Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Fri, 1 Jan
2010 12:02:52 +0000 (UTC):
IA>>>>> Феерично, я считаю.
IA>>> Я понял. Да, это -- много.
IA> Верю.
То есть трудозатраты вполне обозримые и многим по силам, если взять и делать, а не ныть, что бублик отобрали.
IA>>> Да, я знаю, винда тожэ то ещё г.
IA> Под какой-нибудь линукс это обычно легче. Если не нужэн CTS/RTS.
Hужно GUI приложение, для его создания под винду - куча средств, для Линуксов - фиг. А мне было нужно еще и времена с разрешением порядка миллисекунды выдерживать и измерять, иначе тоже работает, но слишком медленно. Под виндой не сразу, но я нашел решение, под линуксы - no way, там раньше стопор наступает.
IA> Hу и, в любом случае, меньшэ дня на запуск общения с вменяемым IA> жэлезом.
Со стандартным, вроде модема, - верю. Со всякими нестандартными протоколами - не верю.
IA> Хм. Hа самом деле, это скорее затрудняет.
А мне - облегчает. Мне легче по примеру разбираться, а не с нуля по документации.
IA> Hу и, на самом деле, в общем несколько ортогонально: ты можэшь иметь IA> вагон инструментария, каждые вариант которого будет говном.
Каждый вариант не идеален, но не говно.
IA>>> Под DOS работой из программы с модэмом добивались или за один урок IA>>> или за один вечер.
IA> Собственно, редко нужно сильно большэ.
Часто, если нужно обмениваться с embedded системами. Я уже 20 лет этим занимаюсь, я знаю о чем говорю.
IA> Hу, скорость выставить. Кстати, в середине 90-х был во всю FOSSIL, IA> для цэнителеей.
Был, что толку? Спокойнее было ручками через регистры контроллеров.
IA> Это называется библиотека копипасты. Hе такая плохая вещь, по тем IA> временам.
Плохая, если не понимаешь что это. В зависимости от IRQ, это могла быть и более сложная последовательность подачи EOI главному и подчиненному контроллерам прерываний. Для привычного к цифровой схемотехнике и embedded программированию меня - нормально (при свободном доступе к документации). А вот чистых программеров эти "заклинания" в тупик ставили. Зато библиотека для того же USB в контроллере и API в винде - хорошее дело. Там не бездумно копипэйстить нужно, а документацию и примеры посмотреть.
Он слабо зависит от того -- гуй/не гуй. Точнее, в гуе выясняешь как там вообще пишэтся совмещение очереди сообщений с блокирующимися файловыми дескрипторами (типа сокетов), и затем всё как обычно.
Сочувствую.
Да, это на расстоянии не лечится.
D
Dmitry Orlov
Hello, Ilya Anfimov! You wrote in conference fido7.su.hardw.schemes to Dmitry Orlov on Sun, 3 Jan
2010 11:03:40 +0000 (UTC):
IA>>> Я это дажэ обсуждать не хочу (ну, не с тобой во всяком случае). Я IA>>> про rs232.
IA> Он слабо зависит от того -- гуй/не гуй.
Он-то может и слабо, а вот все остальное - сильно.
IA> Точнее, в гуе выясняешь как там вообще пишэтся совмещение IA> очереди сообщений с блокирующимися файловыми дескрипторами IA> (типа сокетов), и затем всё как обычно.
Мне с этим разбираться не интересно, я более высокоуровневыми средствами пользуюсь. Под винду-то они есть.
IA>>> Чё?
IA> Сочувствую.
IA> Да, это на расстоянии не лечится.
Главное, это вообще не надо лечить. Да и не нужны на фиг никому эти программы под линукс.
dima
formatting link
Join the Discussion
Have something to add? Share your thoughts — no account required.
Didn't find your answer?
Ask the community — no account required
Report Content
You are reporting this content to the moderators. They will look at it
ASAP.