|
|
  |
USB, EZ-USB FX2 |
|
|
|
Sep 11 2006, 11:28
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135

|
Цитата(hard @ Feb 6 2006, 22:49)  Кто-нибудь сталкивался с нестабильным стартом контроллера CY7C68013A при питании от USB? У меня так было. Поменял USB кабель на качественный USB2.0, всё заработало.
|
|
|
|
|
Sep 11 2006, 11:37
|
Частый гость
 
Группа: Свой
Сообщений: 135
Регистрация: 10-07-04
Из: Зеленоград
Пользователь №: 310

|
Цитата(TailWind @ Sep 11 2006, 15:28)  Цитата(hard @ Feb 6 2006, 22:49)  Кто-нибудь сталкивался с нестабильным стартом контроллера CY7C68013A при питании от USB? У меня так было. Поменял USB кабель на качественный USB2.0, всё заработало. Проблема знакомая, а где их брать гарантированно качественные ? Мне такие попадались, с надписью 2.0 , что вообще не работало.
|
|
|
|
|
Oct 3 2006, 10:39
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 15-11-04
Пользователь №: 1 135

|
Вместо: Код WriteFile(..., 64, ...); WriteFile(..., 64, ...); WriteFile(..., 64, ...); WriteFile(..., 64, ...); Пиши: Код WriteFile(..., 64*4, ...);
|
|
|
|
|
Oct 3 2006, 13:18
|
Группа: Новичок
Сообщений: 11
Регистрация: 8-09-06
Пользователь №: 20 213

|
Цитата(AndreyS @ Oct 3 2006, 12:53)  Добрый день.
Что-то я запутался окончательно в спецификации USB. На сколько я понял (речь идет о фул спид) то шина поделена на временные интервалы. Период следования 1 мС. Я передаю на этом чипе в балке с двойной буферизацией по 64 байта на буфер в EP6. на хосте висит только это устройство. Поучается что выше 128 кбайт/сек просто не вытянуть. Как заставить хост использовать всю полосу 12 мбит?? Или около того. Или надо уходить на изохрон с 512 байтами на канал????? Все просто. Трафик бывает с гарантированным и негарантированным временем доставки. bulk - негарантированный. Т.е., сначала идут control, interrupt и isochronous, а потом, все, что осталось, добивается bulk. Все, что не влезло в текущий фрейм, переносится в следующий. Здесь есть некоторые тонкости - но они целиком ложатся на хост. Если на клиенте работать только с bulk - о фреймах можно вообще не задумываться. Так что, можно передавать блоки любого размера - драйвер должен поделить их на пакеты и корректно передать. Насколько это все правильно работает - зависит от реализации драйверов устройства и хоста. bulkusb из ddk с увеличенным буфером нормально справлялся с 800-900 КБ/с. Вообще, на эту тему рекомендуется почитать описание работы хоста (UHCI - проще всего), ту главу, где рассказывается про сборку расписания - там есть наглядные схемы.
|
|
|
|
|
Oct 3 2006, 14:55
|
Группа: Новичок
Сообщений: 11
Регистрация: 8-09-06
Пользователь №: 20 213

|
Цитата(AndreyS @ Oct 3 2006, 18:22)  Получается что я на процесс повлиять не могу??? Да. Весь процесс обмена управляется с хоста. Я сам с особо большини скоростями в IN не экспериментировал, но проблем быть не должно.
|
|
|
|
|
Oct 3 2006, 15:53
|
Знающий
   
Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119

|
Цитата(listener @ Oct 3 2006, 17:18)  Все просто. Трафик бывает с гарантированным и негарантированным временем доставки. bulk - негарантированный. Т.е., сначала идут control, interrupt и isochronous, а потом, все, что осталось, добивается bulk. Все, что не влезло в текущий фрейм, Если можно, один трудный (для меня) вопрос. После нескольких беглых просмотров книжки Агурова по USB я так и не смог понять следующее: сколько раз в течение одного 1мс-фрейма может меняться направление передачи информации? (Посылки типа подтверждения приема не считаем). Другими словаи, интересует реакция системы на базе USB на выдачу информации на периферийное устройство. Если хост что-то скомандовал периферийному устройству, то успеет ли это устройство пердать ответ на вопрос хоста в том же фрейме или уже только в следующем? Надеюсь, я понятно спросил  Спасибо.
|
|
|
|
|
Oct 3 2006, 17:12
|
Группа: Новичок
Сообщений: 11
Регистрация: 8-09-06
Пользователь №: 20 213

|
Цитата(SKov @ Oct 3 2006, 19:53)  Если можно, один трудный (для меня) вопрос. После нескольких беглых просмотров книжки Агурова по USB я так и не смог понять следующее: сколько раз в течение одного 1мс-фрейма может меняться направление передачи информации? (Посылки типа подтверждения приема не считаем). Другими словаи, интересует реакция системы на базе USB на выдачу информации на периферийное устройство. Если хост что-то скомандовал периферийному устройству, то успеет ли это устройство пердать ответ на вопрос хоста в том же фрейме или уже только в следующем? Надеюсь, я понятно спросил  Спасибо. Теоретически, это возможно. Понятия направления для фрейма нет: каждая отдельная команда задает, передаются или принимаются данные. Т.е. читать и писать в одном фрейме - можно. Можно ли получить ответ в том же фрейме - я сейчас затруднюсь ответить. Теоретически, такое возможно. Точно можно в одном фрейме передать команду и получить ответ на команды переданные в предыдущем фрейме. Разумеется, это только для bulk и время доставки не гарантируется.
|
|
|
|
|
Oct 3 2006, 17:40
|

Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276

|
Цитата(-Al- @ Oct 3 2006, 19:16)  А передача идет с использованием встроенного микроконтроллера??? Если так, то высокой скорости Вы не достигните, поскольку микроконтроллер будет явно не успевать писать(читать) данные в(из) буфер(а). Для большой скорости необходимо напрямую с FIFO эндпоинтов общаться по внешнему интерфейсу. Да, передача формируется процом. Скорее всего вы правы. Большое спасибо за отрезвляющий ответ ;). Скорее всего я не там копаю. И до вопросов передачи в булк по УСБи обращаться еще рано. Тогда вопрос. Кто какую скорость выжимал на фулспиде при формировании передачи из ядра??
--------------------
Удачи.
|
|
|
|
|
Oct 3 2006, 17:56
|

Местный
  
Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894

|
Цитата(AndreyS @ Oct 3 2006, 21:40)  Да, передача формируется процом. Скорее всего вы правы. Большое спасибо за отрезвляющий ответ  . Скорее всего я не там копаю. И до вопросов передачи в булк по УСБи обращаться еще рано. Тогда вопрос. Кто какую скорость выжимал на фулспиде при формировании передачи из ядра?? Ядром не пробовал, а вот при прямой работе с FIFO на FS у меня получалось 1Мбайт/сек, в принципе предельная скорость на FS.
|
|
|
|
|
Oct 4 2006, 09:35
|
Знающий
   
Группа: Свой
Сообщений: 812
Регистрация: 22-01-05
Из: SPb
Пользователь №: 2 119

|
Цитата(listener @ Oct 3 2006, 21:12)  Теоретически, это возможно. Понятия направления для фрейма нет: каждая отдельная команда задает, передаются или принимаются данные. Т.е. читать и писать в одном фрейме - можно. Осталось только понять, от чего это зависит  От драйвера? У меня чисто практическая задача. Связь МК с РС через CP2102 через VCP-драйвер. Пишу на MSVC запись в файл (COM-port) 20тыс байт (по одному байту за одно обращение к WriteFile). Замеряю время - 20 сек. Т.е. передается по одному байту за фрейм. Затем после каждой записи байта добавляю чтение одного байта (у CP2102 выход заведен на вход). Получаю те же 20 сек! Получается, что в одном фрейме у меня идет и прием и передача. Далее, ззаменяю 20тыс обращений к сом-порту по одному байту на 20 тыс обращений по 10 байт (запись - чтение). Получаю те же 20 сек! Это значит, что пакет может быть и не один байт без потери скорости обмена. Однако, уже при увеличении пакета около 50 байт происходит резкое увеличение (удвоение) времени обмена. Видимо, в один фрейм уже все не влезает и требуется два фрейма на один Write/Read. И окончателно все запутывает то, что отключение чтения из файла-СОМ-порта (только запись) не уменьшает время передачи. А вот если взять 2тыс записей по 500 байт (без чтения), то время опять получаем 20сек!! Ничего не понимаю! Да, забыл сказать, что скорость СОМ-порта 2Mbit, так что ограничения связаны только с USB-вопросами. Остается вопрос : это все - свойства драйвера VCP ? особенностей реализации CP2102 ? Или еще что-то? (Про причину - недостаток знаний у разработчика - я уже и сам догадался  )
|
|
|
|
|
Oct 4 2006, 11:05
|

Местный
  
Группа: Участник
Сообщений: 235
Регистрация: 28-01-05
Из: Санкт-Петербург
Пользователь №: 2 276

|
Добрый день ВСЕМ!!! Извиняюсь что не в тему, но вопрос связан в первую очередь с FX2. Сколько времен на выполнение одной команды (51 ядра) на частоте ядра 48 МГц?????? По доке получается 4 цикла на команду (этоне касается настраиваемой команды MOVX). Получается, скажем скорость ядра, 12 МГц. Ставлю вывод на ножку 1 перед 6 командами PUSH и вывод 0 после них. Делаю нескольких выполнений этого куска и замеряю на осце величину импульса. Делю время импульса на длительность одной команды (несущая 48 МГц длительность однй команды обратная величина 12 МГц) и получаю что должно было выполниться 13 команд при такой частоте (а я то выполнял 6 команд).  Ну думаю ядро не на 48 работает. Вывожу на 1 ножку проца (CLKout) частоту ядра (делители отключены) и наблюдаю 48 МГц. Появляется логичный вопрос так сколько тактов на команду у проца?????
--------------------
Удачи.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|