реклама на сайте
подробности

 
 
> Контроль потока при обмене по USB для LPC1768
koluna
сообщение Mar 17 2013, 08:39
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Здравствуйте!

Подскажите, пожалуйста, каким образом реализовать контроль потока для CDC-устройства?
Необходимо, чтобы процессор приостановил передачу данных с хоста на время обработки данных, а потом возобновил.
Т. е., нужен аналог сигнала "CTS".

Правильно ли я понимаю, что нужно использовать нотификацию "SERIAL_STATE"?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
aaarrr
сообщение Mar 17 2013, 16:50
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



С CDC все проще: достаточно не забирать данные, пока процессор занят. Хост будет получать NAK'и, и, соответственно ждать.
Go to the top of the page
 
+Quote Post
koluna
сообщение Mar 17 2013, 18:53
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(aaarrr @ Mar 17 2013, 20:50) *
С CDC все проще: достаточно не забирать данные, пока процессор занят. Хост будет получать NAK'и, и, соответственно ждать.


В принципе, это первое, что пришло мне в голову.
Но смутило то, что подобные действия как-то косвенно управляют потоком, а не напрямую, скажем, установкой/сбросом CTS.
Ну а как об этом узнает программа пользователя, передающая данные в виртуальный порт?
Неужели драйвер в этом случае сам съэмулирует CTS, чтобы программа пользователя им пользовалась?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Mar 17 2013, 18:59
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(koluna @ Mar 17 2013, 22:53) *
Ну а как об этом узнает программа пользователя, передающая данные в виртуальный порт?

Увы (или к счастью, не знаю) - никак. Для нее просто затянется операция записи в порт.

Цитата(koluna @ Mar 17 2013, 22:53) *
Неужели драйвер в этом случае сам съэмулирует CTS, чтобы программа пользователя им пользовалась?

Нет.
Go to the top of the page
 
+Quote Post
koluna
сообщение Mar 18 2013, 12:43
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



А как с программным управлением потоком?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
koluna
сообщение Mar 26 2013, 12:55
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Вот по теме:

http://www.keil.com/forum/18435/
http://tech.groups.yahoo.com/group/lpc2000/message/37858

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


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
koluna
сообщение May 20 2013, 14:47
Сообщение #7


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(aaarrr @ Mar 17 2013, 20:50) *
С CDC все проще: достаточно не забирать данные, пока процессор занят. Хост будет получать NAK'и, и, соответственно ждать.


Пытаюсь сделать как-то так...
Согласно разделу "11.14.2 Data transfer for OUT endpoints" даташита, дело не в заборе данных.
Правильно ли я понимаю, что если хотим, чтобы девайс слал хосту NAK, то нужно просто не очищать буфер (команда Clear Buffer)?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 20 2013, 17:19
Сообщение #8


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(koluna @ May 20 2013, 18:47) *
Правильно ли я понимаю, что если хотим, чтобы девайс слал хосту NAK, то нужно просто не очищать буфер (команда Clear Buffer)?

Можно не очищать буфер, можно не читать и не очищать - смотря что удобнее в конкретном случае.
Go to the top of the page
 
+Quote Post
koluna
сообщение May 21 2013, 08:01
Сообщение #9


Профессионал
*****

Группа: Участник
Сообщений: 1 040
Регистрация: 3-01-07
Пользователь №: 24 061



Цитата(aaarrr @ May 20 2013, 21:19) *
Можно не очищать буфер, можно не читать и не очищать - смотря что удобнее в конкретном случае.


Цитата
11.14.2 Data transfer for OUT endpoints

...
Software can now start reading the data from the USBRxData register (Table 215). When
the end of packet is reached, the RD_EN bit is cleared, and the RxENDPKT bit is set in
the USBDevSt register. Software now issues a Clear Buffer (refer to Table 250) command.
The endpoint is now ready to accept the next packet.
...


Исходя из этого не ясно, что можно не читать... может, где-то еще написано? sm.gif
Попробуем.
Пока не получилось. Где-то баг сидит sad.gif

Кстати, а какой объем буфера у стандартного драйвера виндового (на передачу который)? Он не переполнится?


--------------------
Благодарю заранее!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 11:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01405 секунд с 7
ELECTRONIX ©2004-2016