Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту


 
Опции темы
Непрочитано 04.10.2018, 22:56  
mike-y-k
Модератор
 
Регистрация: 04.08.2010
Адрес: Москва СЗАО
Сообщений: 11,257
Сказал спасибо: 11,169
Сказали Спасибо 3,858 раз(а) в 2,928 сообщении(ях)
mike-y-k на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

worldmasters, клавиатура на USB работает и при загрузке Windows, а это классическое использование именно HID устройства. Потом можно будет с минимумом затрат ещё и на синий зуб перенести , там тоже есть HID.
Реклама:
__________________
rtfm forever должно быть основой для каждого. Альтернатива грустна, поскольку метод слепого щенка успешно работает при весьма малом числе вариантов…
mike-y-k вне форума  
Непрочитано 04.10.2018, 23:19  
Исбанни
Прописка
 
Регистрация: 21.04.2018
Сообщений: 174
Сказал спасибо: 1
Сказали Спасибо 66 раз(а) в 53 сообщении(ях)
Исбанни на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Сообщение от worldmasters Посмотреть сообщение
И где тут полноценные дрова?? Эти статьи я читал там CDC и HID
Впишите нужные вам VID и PID - и будут вам полноценные дрова
Сообщение от worldmasters Посмотреть сообщение
Чтобы через драйвер можно было запросить текстовые строки, числа и тп.
Ясно. Классическая терминалка, VCP. Это класс CDC, ничего сложного.

Последний раз редактировалось Исбанни; 04.10.2018 в 23:22.
Исбанни вне форума  
Непрочитано 05.10.2018, 21:41  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

А если мне нужна скорость передачи выше чем 64кбит/с как быть?
worldmasters вне форума  
Непрочитано 05.10.2018, 22:45  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,714
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

А что мешает реализовать скорость UART 460800 или 921600 бод?

Или делай обычный обмен на протоколе конечных точек. Для WinUSB дрова не нужны. И реализовать не сложно.
DanilinSA вне форума  
Непрочитано 05.10.2018, 22:49  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Сообщение от DanilinSA Посмотреть сообщение
А что мешает реализовать скорость UART 460800 или 921600 бод?

Или делай обычный обмен на протоколе конечных точек. Для WinUSB дрова не нужны. И реализовать не сложно.
Не понял?? А поподробнее?
Как можно сделать усарт с такой скоростью если базовая скорость для CDC класса 64 кбс.

Последний раз редактировалось worldmasters; 05.10.2018 в 23:06.
worldmasters вне форума  
Непрочитано 05.10.2018, 23:45  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,714
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Нету там ограничения 64 кбс. Разве что принудительно в драйвере.
Если через CDC отправлять пакеты по 127 байт каждую 1 мс :
127 байт / 0.001 с * 8 бит = 1*016*000 Бит/с
Обычно 200-300-500 кбс без проблем пролетают.

Например: http://cxem.net/mc/mc269.php
Посмотри там на достигнутые скорости на скринах. И подозреваю в скорость работы МК уперлись. И это в режиме передачи CDC.

Последний раз редактировалось DanilinSA; 05.10.2018 в 23:47.
DanilinSA вне форума  
Сказали "Спасибо" DanilinSA
mike-y-k (11.10.2018)
Непрочитано 05.10.2018, 23:56  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Сообщение от DanilinSA Посмотреть сообщение
Нету там ограничения 64 кбс. Разве что принудительно в драйвере.
Если через CDC отправлять пакеты по 127 байт каждую 1 мс :
127 байт / 0.001 с * 8 бит = 1*016*000 Бит/с
Обычно 200-300-500 кбс без проблем пролетают.

Например: http://cxem.net/mc/mc269.php
Посмотри там на достигнутые скорости на скринах. И подозреваю в скорость работы МК уперлись. И это в режиме передачи CDC.
Ну как я могу отправлять каждую мс если после передачи буфера в класс USB для передачи у меня флаг BUSY висит до тех пор пока данные не уйдут. А в USB только мастер он же комп может инициировать передачу данных и по протоколу вроде как для стандартных классов CDC и HID определена максимальная скорость в 64 кбс скорее всего эта скорость получается из скорости опроса устройства мастером. Или я не прав?
worldmasters вне форума  
Непрочитано 06.10.2018, 00:25  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,714
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Стоп. Если отправлять по 64 байта каждый 1 мс - то получите что имеете.
Увеличивайте размеры буфера и обьем пересылаемого пакета.

Во первых увеличьте буфер. На стороне МК и на стороне ПК. ›1 кБ.
Во вторых - обьеденяем наши куски в рамках одного кадра.

Кадр USB FS равен 1 мс, поэтому, если ты поместишь 64 байта в буфер (используя функцию HAL), он отправит эти 64 байта в следующий кадр. И он не будет отправлять больше данных, пока через 1 мс не будет другой кадр.

Но! В кадре может быть много пакетов от ЕР! Хост будет просить у endpoint'а столько раз по 64 байта, пока endpoint не вернёт кусок данных с длиной меньше 64. Тогда хост "отвяжется" и будет считать, что вся информация большого размера собрана.

Тебе нужно в прерывание EP1_IN вставить отправку 64 байт ( USB_SIL_Write(EP1_IN, answer, 64);
SetEPTxValid(ENDP1)
пока не передаст все что нужно, а потом передать нулевой массив (Zero Length Packet) ?

Примерно так "на пальцах"
DanilinSA вне форума  
Сказали "Спасибо" DanilinSA
mike-y-k (11.10.2018)
Непрочитано 06.10.2018, 01:28  
worldmasters
Гражданин KAZUS.RU
 
Регистрация: 21.02.2007
Сообщений: 553
Сказал спасибо: 38
Сказали Спасибо 17 раз(а) в 16 сообщении(ях)
worldmasters на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Сообщение от DanilinSA Посмотреть сообщение
Стоп. Если отправлять по 64 байта каждый 1 мс - то получите что имеете.
Увеличивайте размеры буфера и обьем пересылаемого пакета.

Во первых увеличьте буфер. На стороне МК и на стороне ПК. ›1 кБ.
Во вторых - обьеденяем наши куски в рамках одного кадра.

Кадр USB FS равен 1 мс, поэтому, если ты поместишь 64 байта в буфер (используя функцию HAL), он отправит эти 64 байта в следующий кадр. И он не будет отправлять больше данных, пока через 1 мс не будет другой кадр.

Но! В кадре может быть много пакетов от ЕР! Хост будет просить у endpoint'а столько раз по 64 байта, пока endpoint не вернёт кусок данных с длиной меньше 64. Тогда хост "отвяжется" и будет считать, что вся информация большого размера собрана.

Тебе нужно в прерывание EP1_IN вставить отправку 64 байт ( USB_SIL_Write(EP1_IN, answer, 64);
SetEPTxValid(ENDP1)
пока не передаст все что нужно, а потом передать нулевой массив (Zero Length Packet) ?

Примерно так "на пальцах"
Ох ты ж .... То есть вы предлагаете типа кольца сделать и в таймере каждую мс проверять состояние BUSY и дальше закладывать очередной пакет??

Так блин ... каждую мс отправляется 64 байта пакет. В секунде 1000мс то есть 64000 байт в сек максимум.
Или опять не так мыслю?
worldmasters вне форума  
Непрочитано 06.10.2018, 10:56  
DanilinSA
Почётный гражданин KAZUS.RU
 
Регистрация: 25.11.2010
Адрес: г. Дзержинск Нижегородская обл.
Сообщений: 1,714
Сказал спасибо: 130
Сказали Спасибо 1,108 раз(а) в 527 сообщении(ях)
DanilinSA на пути к лучшему
По умолчанию Re: Полноценный драйвер USB

Блин ... похоже рассказчик из меня ... некудышний. Попробую повторить медленно и подробно.

Сам я с Пик не работаю ( очень давно для них не программировал). Но думаю принципиальной разницы работы с чипами STM.

И уходи от принудительной проверки BUSY. Это очень плохой стиль работы. Все ресурсы тратятся на проверку. Используй обработчики прерываний. Все станет гораздо проще. Не нужно будет постоянно крутиться в цикле проверки. Подпрограммы проверки и передачи сами отработают когда нужно будет.

Смотри: каждую 1 мс хост посылает запрос. Один пакет OUT, device его принимает и обрабатывает. Потом хост присылает пакет IN, чтобы забрать данные от device. Размер пакета 64 байта.
По умолчанию - у тебя все работает по схеме "один запрос-›один пакет". И естественно скорость будет "никакая".

Период 1 мс и размер пакета фиксирован. Это ты не можешь изменить. Это стандарт. Но можно ответить несколькими пакетами на запрос!
Но можно передать и больше за запрос! Hост будет просить у endpoint'а столько раз по 64 байта, пока endpoint не вернёт кусок данных с длиной меньше 64. Тогда хост "отвяжется" и будет считать, что вся информация большого размера собрана.

Скорее всего у вас передача неправильно организована. Если дело в этом, то хост, получив первые 64 байта и не дождавшись намерения endpoint'а посылать ещё, прекращает запросы до следующего фрейма (через 1 миллисекунду).

Сделай:

Первым делом увеличиваем размер приемного буфера на приемной стороне (Host). По умолчанию там обычно 64 байта. Ставь 2 килобайта.

Потом на device прописываешь USB CDC. Обычный, типовой. 2 endpoint`a EP1_IN и EP2_OUT.

И в рамках одного фрейма пихаешь данные в канал по 64 байта. Пока все не передашь. Потом кидаешь "zlp" (Zero Length Packet) как сигнал хосту о окончании данных. Таким образом можно пропихнуть за один фрейм гораздо больше чем 64 байта. Только выше теоретического порога не прыгай и по времени больше чем 1 мс не затягивай.

В принципе могу и пример набросать. Но он будет для STM и на Паскале. Но вполне рабочий

Последний раз редактировалось DanilinSA; 06.10.2018 в 11:41.
DanilinSA вне форума  
Эти 2 пользователя(ей) сказали Спасибо DanilinSA за это сообщение:
laser532 (09.12.2018), mike-y-k (11.10.2018)
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Драйвер (не VCP) для встроенного USB STM32 vvv998 ARM 106 08.11.2014 21:36
"Поднять" USB на stm32f4-discovery с помощью Keil kaf-0 ARM 35 14.07.2014 12:38
Полноценный преобразователь USB в LPT Lisenko2008 Микроконтроллеры, АЦП, память и т.д 68 12.02.2014 17:46
Выбор интерфейса RS232 или USB tytey Микроконтроллеры, АЦП, память и т.д 49 09.02.2008 14:12
Микросхема – драйвер, напрямую управляемая от программируемо Alexeii Информация по радиокомпонентам 2 01.02.2007 16:11


Часовой пояс GMT +4, время: 22:32.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot