Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ATXMEGA и USB
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Страницы: 1, 2
Дмитрий_Мигачев
Решил начать работать с USB. Очень много начитался, понял, что наверное это будет освоить самому не просто и решил использовать готовую либу - LUFA.
USB нужно CDC.
Библиотека очень достойная, много примеров, не вижу смысла изобретать свой велосипед.
Но есть одна не понятность. Там в примере VirtualPort тактировка USB идет от внутренних 2 МГц с использованием DFLL на 48 МГц (если правильно описал).
У меня внешний кварц на 16 МГц, PLL блок выдает на процессор 32 МГц. Вот тут я не понимаю, этот же PLL может выдать 48 МГц для USB или мне нужно идти таким же путем как LUFA. Нашел информацию, что в XMEGA все источники тактирования (все доступные) могут работать одновременно. Но вроде как внешний кварц должен быть самым точным, но нигде не нашел как его использовать для USB fullspeed.
Xenia
На сколько я представляю (больше по старым AT90USBxxx) частоту сначала делят прескайлером до 2 МГц, а уж только потом подают на блок USB, у которого есть своя PLL. Причем, это приходится делать даже тогда, когда, казалось бы, основная частота вполне подходящая. Казалось бы, бери 16 МГц да умножай на 3, - вот тебе и 48 МГц. Ан нет - сначала эти 16 МГц поделят на 8, чтобы получить 2 МГц, а уж только потом USB превратит их в нужные ей 48 МГц.

Как теперь это сделано на XMega точно не знаю, но судя по тому, что там тоже стоит USBCTRL с делителями 1, 2, 4, 8, 16, 32, то похоже, что тут тоже надо делить до 2 МГц, т.к. иначе зачем стоит делитель, а не умножитель?
Duhas
на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты.
Дмитрий_Мигачев
Цитата(Xenia @ Sep 16 2013, 13:23) *
...а уж только потом подают на блок USB, у которого есть своя PLL

Спасибо за ответ.
Была такая мысль, а именно мысль - а зачем же там делитель...
Не могу только найти в даташите регистр PLL для USB. Может плохо смотрю?

Цитата(Duhas @ Sep 16 2013, 14:25) *
на сколько я помню как раз таки встроенный 32МГц генератор с помощью DFLL догоняют до 48 МГц, хотя вероятно возможны варианты.

Ну не только 32 МГц встроенный, также 2 МГц'вый

Или быть может достаточно 1) Поделить частоту прескайлером 2) В CLK.USBCTRL выбрать USB clock source -> PLL 3) В USB.CTRLA выбрать Speed Select (Bit 6) Ну и включить USB? В любом случае буду сейчас пробовать
Дмитрий_Мигачев
Пока не фига не работает..Но при инициализации USB вижу какие-то импульсы очень короткие на осциллографе. Чтото не так делаю
prottoss
Цитата(Xenia @ Sep 16 2013, 12:23) *
На сколько я представляю...
Вы, как обычно, сначала, пишите, потом думаете... Извините за грубость, но соседний топик тому подтверждение.

Цитата(Дмитрий_Мигачев @ Sep 16 2013, 17:49) *
Пока не фига не работает..
Почитайте внимательно даташит на контроллер.
Раздел System Clock and Clock Options->Overview, рисунок The clock system, clock sources, and clock distribution

Там все наглядно показано.
ArtemKAD
Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал?
Дмитрий_Мигачев
Цитата(prottoss @ Sep 16 2013, 20:47) *
[/b]Там все наглядно показано.

К сожаление, наверное я туповат, я не понимаю как мне получить 48 МГц из PLL, если из того же PLL идет 32 МГц для ЦПУ.
DmitryM
Цитата(ArtemKAD @ Sep 16 2013, 21:38) *
Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал?

Atmel AVR1017: XMEGA - USB Hardware Design Recommendations
Цитата
The 12Mbit/s USB FS signal rate specification requires 0.25% accuracy. In addition,
the data recovery mechanism requires an internal Ч4 oversampling mechanism.
Thus, the device should be able to generate an accurate, 48MHz signal clock to the
USB module.
To ensure proper signal quality, the Atmel AVR XMEGA provides different ways to
generate the 48MHz oversampling frequency:
• External crystal and the on-chip PLL
• Internal RC oscillator
The most convenient method is to use the on-chip, 32MHz RC oscillator calibrated at
48MHz. To ensure 0.25% signal rate accuracy, the internal RC oscillator should be
auto-calibrated using an internal DFLL. This solution allows the external BOM cost to
be reduced (no need for an external crystal).
NOTE The USB module for XMEGA requires a minimum 12MHz CPU clock to send and
receive data. Be sure to configure the XMEGA system clock with a minimum 12MHz
clock when using the USB module. This clock can be stopped when USB is in
suspend mode
.
Duhas
Цитата(ArtemKAD @ Sep 17 2013, 01:38) *
Оттуда следует, что запустить USB можно и на разогнанном и подстроенном 32МГц RC-генераторе. Т.е. теоретически можно вообще без кварца? Кто-то такое пробовал?

DFU bootloader такое пробует и не плюется..
и как уже посоветовали - читайте документацию, товарищи, тем более что у атмела она вполне приятная и читаемая
prottoss
Цитата(Дмитрий_Мигачев @ Sep 17 2013, 10:26) *
К сожаление, наверное я туповат, я не понимаю как мне получить 48 МГц из PLL, если из того же PLL идет 32 МГц для ЦПУ.
Нет не туповат. На самом деле не это не возможно. Дело все в том, что делители в XMEGA могут делить только на степень двойки, в то время как отношение 16 МГц и 48 МГц равно 1 к 3. Есть два пути:

1. Использовать для тактирования USB кварц а для тактирования ЦПУ - встроенный генератор 32 МГц.
2. Использовать для тактирования USB кварц и тактировать ЦПУ от 24 МГц.

Я не рассматриваю пути с разными извратами типа разгона встроенного генератора.

Сам использую в проекте кварц на 7,3728 МГц, так как использую еще и USART. PLL умножает на 13 и имеет выходную частоту 95,8464 МГц. Дальше для USB делим на 2 (47,9232 МГц) а для ЦПУ на 4 (23,9616 МГц).
Duhas
ну степень извращенности данного решения под большим вопросом, т.к. по сути
для этого встроенного RC генератора производитель дает таблицу калибровочных значений, для точного выставления целой группы частот, в том числе и 48МГц. И на сколько я понимаю атымелы считают данный вариант не менее чем 100% работоспособным и достаточно точным для корректной работы USB.
Дмитрий_Мигачев
Цитата(prottoss @ Sep 17 2013, 20:39) *
Сам использую в проекте кварц на 7,3728 МГц, так как использую еще и USART. PLL умножает на 13 и имеет выходную частоту 95,8464 МГц. Дальше для USB делим на 2 (47,9232 МГц) а для ЦПУ на 4 (23,9616 МГц).

Спасибо большое, понял.
Наверное действительно пойду путем как говорит Duhas, ибо сам в даташите вычитал что RC генератора для USB целей за глаза
Да, Duhas Вам тоже спасибо, мне просто иногда нужен "волшебный пинок" в правильном направлении ))
Дмитрий_Мигачев
Пока запустить не удалось. Разбираюсь. Кстати контроллер у меня ATXMEGA128A1U.
В документации LUFA версии 130901 написано:
Цитата
Early silicon revisions of the ATXMEGA128A1U are incompatible with LUFA, due to their various errata relating to the USB controller

Как узнать какая у меня ревизия ( после названия контроллера на микросхеме есть только цифры 1311 ), и с какими ревизиями не совместима LUFA, в документации этого не нашел.
Микроконтроллеры куплены пол года назад, думаю что ревизия не должна быть старой.

Кстати, пришла мысль в голову, что возможно нет поддержки в ядре (gentoo linux)
Выхлоп dmesg:
Код
[24379.985684] hub 1-1.4.1:1.0: state 7 ports 4 chg 0000 evt 0004
[24379.986251] hub 1-1.4.1:1.0: port 2, status 0101, change 0001, 12 Mb/s
[24380.090367] hub 1-1.4.1:1.0: debounce: port 2: total 100ms stable 100ms status 0x101
[24380.101357] hub 1-1.4.1:1.0: port 2 not reset yet, waiting 10ms
[24380.163288] usb 1-1.4.1.2: new full-speed USB device number 119 using ehci-pci
[24380.175245] hub 1-1.4.1:1.0: port 2 not reset yet, waiting 10ms
[24380.237154] usb 1-1.4.1.2: device descriptor read/64, error -32


Т.е вроде как какое-то новое full-speed устройство обнаруживается, но вот последний error чтото не нравится
Duhas
а зачем вам собственно LUFA? разве нет в ASF примера CDC устройства ?
zombi
Цитата(Дмитрий_Мигачев @ Sep 18 2013, 13:19) *
Как узнать какая у меня ревизия ( после названия контроллера на микросхеме есть только цифры 1311 )

Можно на пузе посмотреть. У моих ревизия "L".




А вот это вообще капец, 1313 biggrin.gif
Xenia
Скажите, а вот выходят даташиты, у каждого из которых тоже есть номер ревизии, - эта ревизия имеет отношение к ревизии микросхемы?

Сейчас, например, последний даташит на ATxmega128A1U/64A1U маркирован ревизией "E". А у zombi на чипах уже ревизия "L". Даже завидки берут sm.gif.

А, если не имеет отношения (счет ревизиям разный на чипах и даташитах), то откуда все вы черпаете информацию о том, что в данном чипе было исправлено, а что нет? Тем более что с ростом ревизии у чипа ошибки исправляются, тогда как в даташите Errata может только расти.

P.S. Заглянуть под брюхо своей ATxmega128A1 (без U) я не могу - она припаяна (не мной) sm.gif. Но есть у этого семейства такой регистр - MCU.REVID. Читается, как обычный регистр (не fuse). Вот что про него написано в мануале:
Цитата
REVID – Revision ID
Bit 7:4 – Reserved. These bits are unused and reserved for future use.
Bit 3:0 – REVID[3:0]: Revision ID. These bits contains the device revision. 0 = A, 1 = B, and so on.

Только что прочла у себя этот бит - в нем число 7. Считаю буквы по порядку:
0 = A
1 = B
2 = C
3 = D
4 = E
5 = F
6 = G
7 = H (это моя, ура!)
zombi
Цитата(Xenia @ Sep 18 2013, 23:26) *
7 = H (это моя, ура!)

Срочно меняйте это старьё на A1U!!! Не пожалеете.
Дмитрий_Мигачев
Цитата(Duhas @ Sep 18 2013, 22:57) *
а зачем вам собственно LUFA? разве нет в ASF примера CDC устройства ?

Интернеты сказали, что она лучше по всем параметрам
Дмитрий_Мигачев
Цитата(zombi @ Sep 19 2013, 02:36) *
Можно на пузе посмотреть. У моих ревизия "L".

Да, у меня тоже L
Xenia
Цитата(zombi @ Sep 19 2013, 03:04) *
Срочно меняйте это старьё на !!! Не пожалеете.

Цитата(Дмитрий_Мигачев @ Sep 19 2013, 07:17) *
Интернеты сказали, что она лучше по всем параметрам


Я и сама знаю, что A1U лучше, чем A1, но плата у меня не самодельная, а у Olimex купленная (AVR-PX128A1). А уж сменить МК, да еще в таком корпусе, и на уже готовой плате, - это целая эпопея. Трудности на этом пути сильно превосходят мои возможности sm.gif. А вот готовых плат на A1U я что-то не вижу, даже у самого Atmel'а.

Ни у кого из присутствующих нет желания подарить мне платку с A1U? sm.gif Или хотя бы продать по себестоимости?
Duhas
у меня остались платки от древнего проекта на А1, там по сути все порты выведены на гребенки с шагом 2.54 только с аналоговыми немного муть ..

ежели сильно надо могу выслать одну "по себестоимости"..

ПС вместе с A1U конечно же )
zombi
Цитата(Xenia @ Sep 19 2013, 15:40) *
Ни у кого из присутствующих нет желания подарить мне платку с A1U? sm.gif

Без проблем.
Для экспериментов делал.
Сейчас просто валяются.
Питание разведено и почти все остальные все пины на гребёнки выведены.
В Киеве.
Дмитрий_Мигачев
Обнаружил небольшие косячки в своем коде. Исправил и увидел импульсы прямоугольные с разным чередованием на осциллографе.
Но что-то к сожалению пока все равно не так. Когда моя плата подключена к компьютеру, он даже из-за этого после биоса не загружается, видимо постоянно с USB чтото опрашивает.
В логах такое:
CODE
[ 1338.314407] usb 1-1.3.3: new full-speed USB device number 10 using ehci-pci
[ 1343.307366] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1343.307375] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1348.300453] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d80
[ 1348.300461] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1353.293663] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1353.293672] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1353.356599] usb 1-1.3.3: device descriptor read/64, error -110
[ 1358.450522] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1358.450557] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1363.443483] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1363.443495] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1368.436695] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1368.436711] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1368.447682] hub 1-1.3:1.0: port 3 not reset yet, waiting 10ms
[ 1368.509598] usb 1-1.3.3: device descriptor read/64, error -110
[ 1368.621441] hub 1-1.3:1.0: port 3 not reset yet, waiting 10ms
[ 1368.683355] usb 1-1.3.3: new full-speed USB device number 11 using ehci-pci
[ 1373.676439] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1373.676447] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1378.669525] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1378.669554] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1383.662611] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d82
[ 1383.662619] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1383.673610] hub 1-1.3:1.0: port 3 not reset yet, waiting 10ms
[ 1383.735513] usb 1-1.3.3: device descriptor read/64, error -110
[ 1388.829456] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d80
[ 1388.829491] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1393.822417] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d80
[ 1393.822452] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1398.815629] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80400d80
[ 1398.815665] usb 1-1.3.3: khubd timed out on ep0in len=0/64
[ 1398.826617] hub 1-1.3:1.0: port 3 not reset yet, waiting 10ms
[ 1398.888532] usb 1-1.3.3: device descriptor read/64, error -110
[ 1399.051306] usb 1-1.3.3: new full-speed USB device number 12 using ehci-pci
[ 1404.044389] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80008d80
[ 1404.044542] usb 1-1.3.3: khubd timed out on ep0out len=0/0
[ 1409.238195] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80008d82
[ 1409.238224] usb 1-1.3.3: khubd timed out on ep0out len=0/0
[ 1409.438656] usb 1-1.3.3: device not accepting address 12, error -110
[ 1409.449908] hub 1-1.3:1.0: port 3 not reset yet, waiting 10ms
[ 1409.511824] usb 1-1.3.3: new full-speed USB device number 13 using ehci-pci
[ 1414.504902] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80008d80
[ 1414.504937] usb 1-1.3.3: khubd timed out on ep0out len=0/0
[ 1419.698710] usb 1-1.3: clear tt buffer port 3, a0 ep0 t80008d82
[ 1419.698744] usb 1-1.3.3: khubd timed out on ep0out len=0/0
[ 1419.899174] usb 1-1.3.3: device not accepting address 13, error -110
[ 1419.899457] hub 1-1.3:1.0: unable to enumerate USB device on port 3
[ 1419.899685] hub 1-1.3:1.0: state 7 ports 4 chg 0000 evt 0008

Быстрое гугление пока не дало результата в поиске ошибки. Сейчас на месяц вынужден прерваться на другой важный проект, но эту задачу все равно рано или поздно решу.
ReMaster
Цитата(Duhas @ Sep 18 2013, 19:57) *
а зачем вам собственно LUFA? разве нет в ASF примера CDC устройства ?


Использую данную библиотеку и по ней есть вопрос: иногда проект входит в режим, когда прерывание ISR(USB_BUSEVENT_vect) вызывается постоянно, а не с 1 мс периодичностью, с заходом в
udd_ctrl_interrupt_error()
в часть:
// Underflow only managed for control endpoint
прямо внутрь:
if (udd_control_in_underflow()) {
udd_ctrl_underflow();
}

не могу понять, почему флаг опустошения постоянно формируется... посоветуете что-нибудь по этому поводу?
Duhas
я - нет, я просто знаю что есть в ASF ) сам не ковырялся с USB еще..
piroman
USB сложен. У меня тоже проблема: периодическое нарушение работы экспериментального девайса после отключения холодильника на кухне. wacko.gif Проходит импульс по питанию. Но суть не в импульсе, а в том что работа USB не восстанавливается полностью, а должна вроде? Ну типа прислать Clear Feature для проблемной конечной точки и т.д.
Дмитрий_Мигачев
Цитата(piroman @ Nov 3 2013, 00:43) *
USB сложен. У меня тоже проблема: периодическое нарушение работы экспериментального девайса после отключения холодильника на кухне. wacko.gif Проходит импульс по питанию. Но суть не в импульсе, а в том что работа USB не восстанавливается полностью, а должна вроде? Ну типа прислать Clear Feature для проблемной конечной точки и т.д.

Я все больше начинаю задумываться, что может быть не стоит в серьезных проектах браться за USB. Но с другой стороны смущает, что на новых материнках все реже встречается rs-232

P.S. Вот даже не знаю, что дальше делать. Главный инженер говорит давай USB. Я ему объяснил чем USB плох, он говорит может тогда wifi или bluetooth, тоже кажется в промыленных условиях не совсем надежно, данных надо гнать не много, но нужна хорошая надежность и обязательно гальваническая развязка с компьютером. Если например гальваническую развязку RS-232 сделать не проблема, скорости небольшие через оптопары, то USB я так понимаю там даже при передаче 1 байта, частота передачи все равно большая (?????). Есть в наличии WIFI модуль WF121-A-v1, входные данные по UART на выходе радиоканал. Или все-таки надо отстаивать мнение что RS-232 самое надежное??
dimka76
Цитата(Дмитрий_Мигачев @ Nov 14 2013, 07:20) *
и обязательно гальваническая развязка с компьютером. Если например гальваническую развязку RS-232 сделать не проблема, скорости небольшие через оптопары, то USB я так понимаю там даже при передаче 1 байта, частота передачи все равно большая (?????).


Analog Device выпускает специальные микросхемы для гальванической развязки USB FULL SPEED.

http://www.analog.com/en/interface-isolati...ucts/index.html
kovigor
Цитата(Дмитрий_Мигачев @ Nov 14 2013, 07:20) *
Я все больше начинаю задумываться, что может быть не стоит в серьезных проектах браться за USB. Но с другой стороны смущает, что на новых материнках все реже встречается rs-232

В промышленных условиях нужно использовать не USB, а тот же RS232 или RS485. Оптически развязанная версия RS232 - это "токовая петля" ("Current Loop", она же "CL"). Если скорости позволяют, конечно. Покупаете качественный компьютер и мультипортовку от той же MOXA. Ну или промышленный компьютер покупаете с соотв. портами. USB для серьезных применений не годится. То, что "на современных материнках нет COM-портов" - не аргумент. Это офисные компьютеры, вот COM - портов там и нет. Для офисных - да, сгодится и USB. Но не более того.

P.S. Если позволяют скорости - я бы однозначно отстаивал один из вариантов RS232. Только мультипортовку качественную купите ...
P.P.S. Вам, кстати, на какое расстояние нужно данные передавать ?
Дмитрий_Мигачев
Цитата(kovigor @ Nov 14 2013, 13:46) *
В промышленных условиях нужно использовать не USB, а тот же RS232 или RS485. Оптически развязанная версия RS232 - это "токовая петля" ("Current Loop", она же "CL"). Если скорости позволяют, конечно. Покупаете качественный компьютер и мультипортовку от той же MOXA. Ну или промышленный компьютер покупаете с соотв. портами. USB для серьезных применений не годится. То, что "на современных материнках нет COM-портов" - не аргумент. Это офисные компьютеры, вот COM - портов там и нет. Для офисных - да, сгодится и USB. Но не более того.

P.S. Если позволяют скорости - я бы однозначно отстаивал один из вариантов RS232. Только мультипортовку качественную купите ...
P.P.S. Вам, кстати, на какое расстояние нужно данные передавать ?

2 -3 метра, не более

P.S. А нет ли сейчас тенденции вытеснения RS-232 не только с офисных компьютеров??? Все любят сэкономить, и мы не исключение sm.gif Для наших целей порой за глаза материнки на каком-нибудь intel atom, они тоже иногда встречаются без RS-232. И как дела обстоят с передачей большого количества информации в ПК, через что для надежности?
kovigor
Цитата(Дмитрий_Мигачев @ Nov 14 2013, 12:05) *
Все любят сэкономить, и мы не исключение sm.gif Для наших целей порой за глаза материнки на каком-нибудь intel atom, они тоже иногда встречаются без RS-232.

Вы готовы к проблемам, связанным с потерей связи через USB в самый неподходящий момент ? Готовы нести за это ответственность ? Если да, то пользуйтесь USB. Если нет - не экономьте, и применяйте для ответственных задач соотв. аппаратуру.
Если произойдет авария, никто, поверьте, не похвалит вас за то, что вы сэкономили 200 баксов на оборудовании.
prottoss
Цитата(kovigor @ Nov 14 2013, 15:31) *
Вы готовы к проблемам, связанным с потерей связи через USB в самый неподходящий момент ?
А Вы готовы к потерям связи по RS232/485/CAN/Ethernet и т.п. в самый не подходящий момент? От обрыва проводов никто не застрахован.

Моя работа связана с горной промышленностью/подземным оборудованием. Порты USB на этом оборудовании тоже имеются, правда не в самых ответственных приложениях. Для ответственных приложений используется CAN/Ethernet/RS485 ну и в придачу надежные протоколы.
RS232 вообще в горной промышленности не используется, т.к не надежен из-за привязанности к "земле" и по надежности на порядок ниже чем USB, ибо USB это все таки дифф.пара, при чем с защитой данных на железном уровне. USB на расстояние 2-3 метра на много лучше чем RS232.
Конечно все это ИМХО sm.gif
kovigor
Цитата(prottoss @ Nov 14 2013, 18:22) *
А Вы готовы к потерям связи по RS232/485/CAN/Ethernet и т.п. в самый не подходящий момент?

RS232 надежнее USB на порядок из-за своей простоты (как минимум). На практике у нас системы с RS232 работали по году вообще без всякого вмешательства. Нужна развязка ? Не вопрос. Мультипортовка с Current Loop полностью решает проблему.
А вот личный опыт общения с USB у меня совсем не такой приятный, к сожалению. А практика - критерий истины, как вам, конечно же, известно ...
prottoss
Цитата(kovigor @ Nov 14 2013, 22:06) *
RS232 надежнее USB на порядок из-за своей простоты (как минимум).

1. Если говорить о линиях связи, то RS232 и USB одинаково просты - в обоих интерфейсах необходимо минимум три провода - земля и две линии данных.
2. Если говорить о помехозащищенности, то как раз RS232 проигрывает USB во многом. Плюсы USB - дифф. пара, NRZI, жесткий протокол, при чем на железном уровне. У RS232 - единственная защита - бит четности/паритета.
3. Если говорить о стоимости, то на сегодняшний момент стоимость приемопередатчика для USB дешевле, т.к. он обычно встроен в микроконтроллер. Для RS232 нужно ставить внешний драйвер.
4. Если говорить о программном уровне, то у USB он относительно сложный по сравнению с RS232, что компенсируется надежностью самого протокола в пользу USB. Для тех кто понимает USB нет проблем создать такой интерфейс в своей программе.
Если Ваш личный опыт общения с USB неприятный, не значит что он таков у всех.
Опять же ИМХО - RS232 - в промышленности давно уже раритет как по помехоустойчивости так и по скорости передачи данных.

По поводу вышесказанного про холодильники. Возможно, проблема не в USB а в том, что плата не верно разведена.
kovigor
Цитата(prottoss @ Nov 14 2013, 20:43) *
1, 2, 3, 4

И несмотря на это RS232 годами работает без сбоев, а USB сбоит чуть ли не при первом же удобном случае.
Ладно. Похоже, сейчас начнется очередная "религиозная война". Ни вы меня не убедите, ни я вас. Предлагаю на этом закончить ...
prottoss
Цитата(kovigor @ Nov 14 2013, 22:50) *
Предлагаю на этом закончить ...
Согласен
ArtemKAD
Цитата(prottoss @ Nov 14 2013, 19:43) *
2. Если говорить о помехозащищенности, то как раз RS232 проигрывает USB во многом. Плюсы USB - дифф. пара, NRZI, жесткий протокол, при чем на железном уровне. У RS232 - единственная защита - бит четности/паритета.

Крайне спорное утверждение. Главная защита RS232 это громадные по сравнению с USB зоны гистерезиса плюс большие допуски по времени фронтов. Даже без контроля чётности вероятность ошибки в RS232 многократно ниже чем в USB с диф.парой, контрольной суммой и всеми подстройками. Как результат USB при кабеле больше 10м это почти наверняка труп, при том, что RS232 свободно работает и больше 100м.
prottoss
Цитата(ArtemKAD @ Nov 15 2013, 04:53) *
Крайне спорное утверждение.
Это бесспорное утверждение

Цитата(ArtemKAD @ Nov 15 2013, 04:53) *
Главная защита RS232 это громадные по сравнению с USB зоны гистерезиса плюс большие допуски по времени фронтов.
Главный недостаток RS232 - передача сигналов относительно земляного провода. В промышленности однозначно используется передача данных по дифф. паре, не зависимой от земли.

Любой интерфейс, использующий дифф. пару (в том числе и USB), т.е. симметричный, на порядок помехоустойчив чем RS232. По этому RS232 давно уже в серьезных приложениях не применяют. USB, кстати, и был разработан как замена для RS232.

Цитата(ArtemKAD @ Nov 15 2013, 04:53) *
RS232 свободно работает и больше 100м.
Работает. Только на "золотом" кабеле и на ооочень маленькой скорости. Никто его на таких длинах не использует, потому как для таких длин есть симметричные RS422/485.
zombi
Цитата(prottoss @ Nov 15 2013, 17:27) *
Работает. Только на "золотом" кабеле и на ооочень маленькой скорости. Никто его на таких длинах не использует, потому как для таких длин есть симметричные RS422/485.

Не хочу вступать в дискуссию.
Скажу только что видел в работе на обычном 4-х жильном телефонном кабеле длиной ~75м обычный RS232.
На скорости 56кбод, правда только в одну сторону. Работало без нареканий.
piroman
По поводу холодильника. Сижу за компьютером, плату с USB проверяю, для ускорения процесса помеху по сети создаю вкл/выкл бытового вентилятора. В компьютерных динамиках слышно "ЩЁЛК"! У меня корпус ограничен в габаритах, не могу я там фильтров дополнительных поставить. Я ж энергию беру с сетевого адаптера 12 В. 3 штуки попробовал разных ентих адаптеров. На самом простом - сбоит почти каждый раз, а на других ничего вроде - редко. В худшем случае всё ж продолжает работать, акромя USB - приходится реконнектить. Тяжко разбираться, кабы был у мени аппаратный USB-протоколёр.
Вообще, реально этот импульс по питанию подавить напрочь? Он, как я понимаю, короткий и мощный. Использую цепочку TVS-диод на 14В -> ферритовую бусину -> LM78L33 c керамическими кондёрами -> TVS-диод на 5В -> XMEGA c USB.
У нас тут модернизировали одно старое устройство с RS232 на max232. Убрали max232 c обвязкой, добавили 2 оптрона+FT232RL = модный USB + опторазвязка.
kovigor
Цитата(zombi @ Nov 15 2013, 18:53) *
Скажу только что видел в работе на обычном 4-х жильном телефонном кабеле длиной ~75м обычный RS232.
На скорости 56кбод, правда только в одну сторону. Работало без нареканий.

У нас через простейший преобразователь RS232 в токовую петлю запросто и надежно получалось и 500 метров. Скорость 19200. Больше просто не пробовали ...
ArtemKAD
Цитата(prottoss @ Nov 15 2013, 16:27) *
Любой интерфейс, использующий дифф. пару (в том числе и USB), т.е. симметричный, на порядок помехоустойчив чем RS232.

ШАС, разогнались... USB имеет никакой гистерезис отсюда и его помехоустойчивость ниже плинтуса. Это устройство, не смотря на все ухищрения, реагирует буквально на каждый чих.

Цитата(prottoss @ Nov 15 2013, 16:27) *
Работает. Только на "золотом" кабеле и на ооочень маленькой скорости.

Никакого "золотого" кабеля - на 100м RS232 работает практически на всём. Вот если надо больше - вот там уже возникают вопросы.
prottoss
kovigor, ArtemKAD
Я не буду с Вами спорить. Можете передавать по RS232 хоть на 5 километров. По поводу USB - на большие дистанции он и не предназначен - 5 метров, наверное, максимум. Но на 100 метров и RS232 в серьезных приложениях не используют - для этого есть RS422/485, если нужно очень много и очень быстро, то Ethernet, если еще быстрее, то оптоволокно.
Дмитрий_Мигачев
Спасибо большое всем за ответы. Прошу не судить строго, но решили все-таки пробовать дальше USB. Прогресс на месте не стоит, и я думаю если будут проблемы со связью найдем как их решить.
kovigor
Цитата(Дмитрий_Мигачев @ Nov 18 2013, 08:20) *
Спасибо большое всем за ответы. Прошу не судить строго, но решили все-таки пробовать дальше USB. Прогресс на месте не стоит, и я думаю если будут проблемы со связью найдем как их решить.

Проблемы с USB могут быть и неразрешимыми. Параллельно заложите в проект возможность работы по UART, это будет вашей страховкой. Благо, это почти ничего не стоит. Зато вы всегда сможете соскочить с USB (а это почти наверняка придется сделать) и вернуться к более подходящему интерфейсу.
piroman
Ребята, оказывается есть большая проблема с USB CDC. Кратко суть: после прохождения помехи по USB, драйвер usbser.sys перестаёт слать BULK IN. Вот тут обсуждается.
kovigor
Цитата(piroman @ Nov 20 2013, 21:03) *
Вот тут обсуждается.

Даже обсуждать не хочу. USB не годится для работы в сложной помеховой обстановке ...
Alex11
Да там и вне больших помех проблем миллион. Основная (и она же не дает работать при сильных помехах) - это полное отсутствие обработки ошибок у Микрософта в драйверах USB. Уронить машину в синий экран тривиальной ошибкой в дескрипторе - раз плюнуть. И в других местах то же самое.
prottoss
Цитата(kovigor @ Nov 21 2013, 00:53) *
Даже обсуждать не хочу. USB не годится для работы в сложной помеховой обстановке ...
Еще Вам раз намекаю - если Вы не умеете работать с USB - не делайте поспешных выводов и не вводите народ в заблуждение.

Цитата(Alex11 @ Nov 21 2013, 02:14) *
Да там и вне больших помех проблем миллион. Основная (и она же не дает работать при сильных помехах) - это полное отсутствие обработки ошибок у Микрософта в драйверах USB. Уронить машину в синий экран тривиальной ошибкой в дескрипторе - раз плюнуть. И в других местах то же самое.

1. Обработка основных ошибок в USB идет на аппаратном уровне.
2. Не используйте продукты от Microsoft в ответственных приложениях.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.