|
|
  |
AT90USB1286, виртуальный COM-порт |
|
|
|
Jan 20 2009, 15:01
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Xenia @ Jan 20 2009, 16:53)  Возможно ли такое в принципе, а если да, то каким образом делается? Ведь наш МК является ведомым, зависящим от посылок со стороны хоста. Как ему сигнализировать о том, что у него будет временный напряг с приемом? Я не знаю есть ли какой специальный механизм для этотго в CDC. Для Bulk ендпоинт это реализуеться посылкой NAK в ответ на OUT пакет. Цитата 8.5.2 Bulk Transactions .... When the host is ready to transmit bulk data, it first issues an OUT token packet followed by a data packet (or PING special token packet, see Section 8.5.1). If the data is received without error by the function, it will return one of three (or four including NYET, for a device operating at high-speed) handshakes: • ACK indicates that the data packet was received without errors and informs the host that it may send the next packet in the sequence. • NAK indicates that the data was received without error but that the host should resend the data because the function was in a temporary condition preventing it from accepting the data (e.g., buffer full). • If the endpoint was halted, STALL is returned to indicate that the host should not retry the transmission because there is an error condition on the function. Анатолий.
|
|
|
|
|
Jan 20 2009, 16:16
|

Гуру
     
Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237

|
Цитата(tAmega @ Jan 20 2009, 18:02)  Механизм есть. Он описан в спецификации CDC, там описаны запросы. Общая идея, есть запросы SET LINE CODING. Хост запрашивает скорость, число бит и т.д. в т.ч. тип управления потоком аппаратный или программный. Когда хост узнает, что управление потоком будет аппаратное, он запрашивает как именно будет управляться поток. Форматы запросов и ответов есть в спецификации на CDC. SET_LINE_CODING передает от хоста в МК dwDTERate, bCharFormat, bParityType, bDataBits; т.е. скорость в бодах, формат, четность и число стоп-бит. Все это передается затем, чтобы МК повторил эти установки на своем RS-232-порту, т.к. для обмена по USB эти данные не нужны. GET_LINE_CODING запрашивает эти же данные (обычно те же самые, что были раньше пререданы хостом командой SET_LINE_CODING). Есть еще SET_CONTROL_LINE_STATE, посредством которого хост может выразить желание изменить уровни DSR и RTS. И это всё! Никакого аппаратного хендшейкинга здесь нет! Практика показывает, что все эти три команды подаются только при открытии USB-порта (виртуальный COM), а в процессе передачи никогда не подаются. Поэтому нет и никакой возможности подать сигнал о том, что линии изменили полярность в процессе передачи. Т.е. раз хост не спрашивает, то и ответить ему не представляется возможным. ==================================================================== Цитата(aesok @ Jan 20 2009, 18:01)  Я не знаю есть ли какой специальный механизм для этотго в CDC. Для Bulk ендпоинт это реализуеться посылкой NAK в ответ на OUT пакет. ACK'ом или NAK'ом можно отвечать на запросы от НУЛЕВОГО эндпоинта, на специфические ЗАПРОСЫ. Однако поток данных идет по эндпоинту RX_EP и не требует никаких ответных реплик. Там только бит FIFOCON устанавливают, чтобы показать, что буффер опустошен. Никаких посылок оттуда я посылать не могу, т.к. они не предусмотрены протоколом. А в процессе передачи данных никаких запросов по нулевому эндпоинту нет вообще, а потому и отвечать не на что.
Сообщение отредактировал Xenia - Jan 20 2009, 16:26
|
|
|
|
|
Jan 20 2009, 17:05
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Xenia @ Jan 20 2009, 19:16)  ACK'ом или NAK'ом можно отвечать на запросы от НУЛЕВОГО эндпоинта, на специфические ЗАПРОСЫ. Однако поток данных идет по эндпоинту RX_EP и не требует никаких ответных реплик. Там только бит FIFOCON устанавливают, чтобы показать, что буффер опустошен. Никаких посылок оттуда я посылать не могу, т.к. они не предусмотрены протоколом. А в процессе передачи данных никаких запросов по нулевому эндпоинту нет вообще, а потому и отвечать не на что. Странно!!!! На странице 221 "Universal Serial Bus Specification" параграфе "8.5.2 Bulk Transactions" написано и нарисованно что можно отвечать NAK для Bulk endpoint (также как и на Control/Interrupt endpoint). Это на Isochronous нет ACK/NAK/STALL. А откуда у вас информация что NAK работает только на controll endpoint? Я так понимаю Вы работаете с Bulk ендпоинт. Тогда требуеться минимум действий. Расмотрим Bulk OUT endpoint, параграф "22.14 OUT endpoint management" даташита AT90USB64/128. Когда приходит OUT пакет выставляться 2 бита: RXOUTI - флаг прерывания по причине прихода пакета, который сразу можно сбросить и FIFOCON - FIFO Control Bit - говорящий о том что буфер занят пришедшим пакетом. Пока Вы не сбросите этот бит вы можете к какой угодно скорость читать данные из этого буфура, при этом USB контроллер будет отвечать NAK-ом на все попытки хоста передать следующий пакет. Как только Вы полностью прочитаете буфер, Вы сбрасываете бит FIFOCON в 0. И теперь при очередной попытке хоста передать пакет, контроллер запишет его в освободившийся буфер, ответит хосту ACK, и выставит биты RXOUTI и FIFOCON. И.т.д.... Другими словами сбрасывайте бит FIFOCON после того как полностью обработали пришедщий пакет, все остальное хост с USB контролером в mege все сделают сами. Анатолий.
Сообщение отредактировал aesok - Jan 20 2009, 17:48
|
|
|
|
|
Apr 29 2009, 15:21
|
Частый гость
 
Группа: Участник
Сообщений: 108
Регистрация: 6-02-09
Из: Новочеркасск
Пользователь №: 44 469

|
Цитата(Xenia @ Nov 21 2008, 15:23)  Народ! Кто-нибудь из вас пробовал писать прошивку для USB САМОСТОЯТЕЛЬНО? А то от демонстрационного проекта буквально уши вянут. Тоже думал уже сильно "переосмыслить" примеры, но, как всегда, велосипед уже изобретен. http://www.fourwalledcubicle.com/LUFA.phpКуда как болие прямой USB стек от фанатов. Под WinAVR. C кучей DEMO. Понравился.
|
|
|
|
|
Nov 7 2009, 12:42
|

Местный
  
Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719

|
Цитата(Visor @ Nov 2 2009, 15:39)  Ну вот, новая "радость" на наши головы - Windows 7. Не работает под ней. Да уж... только с XP разобрался, опять новые веяния... Благо "семерка" еще не доминирует... пока... С "вистой" не работаю принципиально, т.к. о покойниках либо хорошо, либо никак... а вот в "семерке" должны быть предусмотрены настройки для эмуляции более ранних ОС... Давайте пробовать вместе. Я использую AT90USB162 и основательно мной "раскуроченные" на кирпичики Атмеловские демки... Использую в основном HID, думаю "семерка" должна поддерживать без проблем со стороны МК, а вот со стороны PC возможно уже другие драйвера для HID... Не знаю... Надо пробовать.
--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
|
|
|
|
|
Nov 8 2009, 03:13
|

Местный
  
Группа: Свой
Сообщений: 240
Регистрация: 23-03-07
Пользователь №: 26 428

|
Цитата(manul78 @ Nov 7 2009, 19:42)  Использую в основном HID ... С HID не знаю, не пробывал, здесь мы мучаем CDC. Речь конкретно о at90usbxxx_cdc.inf .
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|