Сопряжение USB 2.0

Тема в разделе "WASM.ELECTRONICS", создана пользователем simnet_, 2 июн 2008.

  1. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Возникла следующая проблема:
    Нужно определить скорость передачи данных через USB-2.0 порт. Была идея подключить к USB компьютера микроконтроллер с интерфейсом USB 2.0 и посылать данные (например 1,2,3,4,...) в порт на максимальной скорости (480Мбит/сек), и каким-то образом определять пропавшие пакеты, таким образом определить пропускную способность шины.. Но
    1) Время между потерянными пакетами я планировал вычислять с помощью стандартных аппаратных таймеров. Но... каких? Может ли подойти стандартный таймер Windows? (что-то вроде GetTickCount, только из Ring0)
    2) как повлияет многозадачность Windows на определение этой скорости? Возможно ли создать драйвер, который отключит вытеснение задач хотя бы на определенное время?
    3) существует ли возможность аппаратно определить скорость у USB-контроллера (не прибегая к замерам с помощью внешних таймеров)?
    4) может проще было бы определить скорость на стороне микроконтроллера? (PC отсылает "мусор", а контроллер имеет точный таймер для замеров отрезков времени и включен на максимальной скорости)
    5) Как ведет себя контроллер USB (ну или корневой usb-hub) когда скорость передачи на стороне клиента превышает его собственною? Есть ли у него какой-то буффер? Или он просто отбрасывает потерянные пакеты? Вызывает ли он какие-то исключения/прерывания в подобных случаях?
    6) Хотелось бы реализовать этот драйвер на максимально возможном высоком уровне (подальше от низкоуровневых портов и in/out :)). Возможно ли это?

    Если можно, посоветуйте недорогой микроконтроллер с USB 2.0 для реализации подобных дел

    Всем спасибо, кто ответит. Прошу прощения за возможно глупые вопросы (уже читаю RTFM :)), но вопросы не отпадают, а только появляются..
     
  2. Everhest

    Everhest New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2007
    Сообщения:
    105
    simnet_

    На сколько я помню, стандартный таймер имеет неточность в 55 мсек, т.е. ты сам себе ответил:

    На остальные вопросы у меня были где-то учебники, если найду, то скину.
     
  3. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    simnet_
    мк имхо только чтобы принимать 480Мбит/сек должен иметь частоту > 60MHz. имхо тут лучше юзать еще один комп (или другой порт этого-же)
    Думаю вам стоит взглянуть в сторону какой нибудь более другой оси (qnx, linux,...).

    что-нибудь вроде (не проверял. чистое предположение)

    # cat /dev/usb2 > ~/bigfile2.bin & time cat ~/bigfile1.bin > /dev/usb1

    usb1 и usb2 - соединены. (как реально называются порты посмотрите)
    далее объем переданых данных делим на время работы приложения. А качество проверяем сравнив bigfile1.bin и bigfile2.bin.
     
  4. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Everhest
    Стандартный кварцевый генератор имеет неточность 30-50ppm, у таймера будет больше так как ошибки только накапливаются.
    Для USB на частоте 480МГц допускается 500ppm

    Что касается 55мс забудти таймер давно уже работает на большей частоте это раз. Во вторых значение читается из регистров и несвязанно с частотой прерываний, так что имеем точность 1/1193180 для класического таймера.

    В виндоусе если не вылазить на ринг ноль вылазят проблемы много задачности из за чего таймер выдает скачками значения приделах 10-50мс. Но это непроблема решается увеличиваем время замера хотябы до секунды и имеем приемлимаю погрешность.


    Правда каму какое дело, какая именно точность?

    Вместо устройство можно попробовать обратную петлю. Она уже встроенна как отладочное средство в USB контроллер.
    А можно узнать зачем надо мерить скорость и какую именно?

    Кстати тут вопрос какую реальную частоту, в компьюторе, имеет USB контроллер.
    он должен запитываться частотой 12,000Мгц, но на самоом деле он может запитываться ниже
    Есть регистр SOFMOD—Start of Frame Modify Register предусмотренной спецификацие для коректировки частоты.
    По дефолту он расчитан на входную частоту 11936 и коректируется на 64. Вот интерестно сколько реально подается и на сколько он каректируется. Мое преположение реально 11932 и каректировка на 64.
     
  5. 6arrep

    6arrep New Member

    Публикаций:
    0
    Регистрация:
    10 мар 2006
    Сообщения:
    92
    Адрес:
    London
    причём здесь ось вообще не понял. Это типа не умея под одной осой переходим на другую?
     
  6. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Идея в том, чтоб создать именно устройство для измерения скорости порта
    Существуют МК которые позволяют передавать данные с такой скоростью (под USB 2.0). Та же флешка, например.. Вот только не знаю об их стоимости.. Пытаюсь найти что-нибудь подешевле.. Может быть вы что-нибудь подскажете?

    Но ведь и PC должен иметь какие-то точные таймеры? Из всех что я знаю - только i8253, на котором еще звук можно генерировать :). Там частота 4 МГц, правда не знаю, насколько он подходит под подобных целей. Может лучше использовать другой (слышал, существуют какие-то Performance-таймеры, встроенные в чипсет)? Или МК-шный таймер - наилучший вариант?

    Я бы с удовольствием, но необходимое условие - работа по Windows

    И появился еще вопрос из-за незнания принципов работы USB-хост контроллера.. Как повлияют на результаты измерения остальные подключенные к USB девайсы (мышь, принтер, клавиатура, ..)? Можно ли их как-нибудь отключить временно из Ring0? Этот вопрос кстати и по поводу:
    Всем еще раз спасибо. Не ожидал на такие быстрые ответы

    Added:
    Pavia, можно поподробнее об этой обратной петле? Как ее можно привязать к измерению скорости?
     
  7. Pavia

    Pavia Well-Known Member

    Публикаций:
    0
    Регистрация:
    17 июн 2003
    Сообщения:
    2.409
    Адрес:
    Fryazino
    Частота не важна важна точность. Имея частоту в 1КГц можно мерить интервалы времени именьшей частоты просто дольше ждать надо будет. Что касается 4МГц вы отстали от жизни уже лет 10-15 как стандартом является генератор частоты имеющий частоту f=14,31818 МГц из него получают все остальные частоту путем умножения на M и деления на N.
    PIT(i8253) - имеет частоту f/12 и значение счетчика можно считать
    PM Timer(ACPI -TIMER) -имеет частоту f/4 значение счетчика можно считать
    APIC Timer - имеет частоту f может быть и выше но пока не встречал значение счетчика можно считать


    Performance-таймеры не существуют есть
    Performance - счетчики которые считают события.

    GetTickCount- вам хватит за глаза.
    Какая вам разница будет у вас точность
    480±0,5 МГц или же 480±0,005МГц ?
    В инженерной практике принята точность до 2-3 значущие цифры. Больше просто не нужно.
     
  8. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    6arrep
    читаем внимательно. Чел не хотел писать драйверов или чего еще не простого. Лив qnx позволит (если есть там дрова на usb2. неуверен) сделать все из шела и точнее, чем вынь на дровах (специфика оси). лин - просто удобнее. Вынь - система для игровых автоматов и ВБ. Если знать только ее, то конечно - она идеал.
     
  9. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Позвольте вас поправить - чел собирался писать драйвер или еще чего-то :). Я просто надеялся использовать уже готовые надстройки Windows над USB (насколько я помню, это что-то вроде последовательного соединения PDO/FDO). Не знаю, насколько это возможно в моей ситуации. Если нет, будем работать с портами напрямую

    Added:
    Ну с таймерами вроде уже понятно
    Хотелось бы услышать ваше мнение по поводу #2-5.
    Сильно ли повлияет на измеренную скорость другие подкл. USB-устройства к тому-же хост контроллеру?
     
  10. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Какую именно - реальную скорость передачи данных (in/out)
    Зачем - сам не знаю, спрошу у заказчика :). Наверно для того, чтоб определить степень загруженности основного USB-хост контроллера. Хотя... раньше я думал, что скорость USB 2.0 всегда постоянна - 480 МБит/с.
     
  11. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    Подскажите хотя-бы литературу, с которой можно было бы начать разбираться с USB под Windows
     
  12. simnet_

    simnet_ New Member

    Публикаций:
    0
    Регистрация:
    18 дек 2007
    Сообщения:
    109
    И, может, я не совсем корректно поставил вопрос: если реализовавыть эту схему с помощью обратной петли (без внешнего микроконтрллера), насколько точным будет такое измерение? Скорость будет делиться пополам на каждый из портов, верно? Или каждый получит "свои" 480 МБит?
     
  13. tinok

    tinok New Member

    Публикаций:
    0
    Регистрация:
    2 июн 2007
    Сообщения:
    26
    simnet_
    http://www.proklondike.com/
    здесь точно что-то про usb должно быть.