|
ATXMEGA и USB |
|
|
|
 |
Ответов
(60 - 73)
|
Jul 8 2014, 09:57
|

Частый гость
 
Группа: Участник
Сообщений: 169
Регистрация: 26-03-12
Из: Харьков
Пользователь №: 71 010

|
Спасибо, архитектура AVR ближе, поэтому и смотрю в их сторону. Но знаний по USB не достаточно, поэтому паралельно просматриваю STM32, где куча примеров в сети... С другой стороны, те кто пробовал USB в STM32, в один голос твердят, что слишком уж запутано там всё, и новичку проще начать осваивать USB на других контроллерах. Вот и дилема... А вообще, задача простейшая, необходимо подключить USB флешку, и работать с файловой системой!
|
|
|
|
|
Jul 8 2014, 11:21
|

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

|
Цитата(Копейкин @ Jul 8 2014, 13:30)  ... буферы конечно выделены и тактируются от PLL, но ещё ведь вопрос обработки данных. Как функция AT90 ещё нормально, но хост должен быть готов к трансферу каждую мс - может и не успеть. Хост ничего такого делать не должен, поскольку именно он - активное начало в трансфере. Только хост может обратиться к девайсу и чего-то от него потребовать, а девайс обязан дать ответ не позднее, чем наступит таймаут. Более того, даже при всем своем желании девайс не имеет возможности вызвать хост или хотя бы подать ему какой-то сигнал без вопроса с его стороны, даже когда девайсу это очень нужно. В этом смысле USB чуточку похож на I2C, где мастер может быть только один, и именно он управляет всей шиной. Поэтому быть хостом просто лепота  , поскольку никто тебя не подгоняет: не можешь шевелиться быстро - шевелись медленно. Ну, а обработка данных - совершенно иной вопрос, а потому и не должен обсуждаться в отношении разницы хост-девайс. Цитата(Falkon_99 @ Jul 8 2014, 13:57)  Спасибо, архитектура AVR ближе, поэтому и смотрю в их сторону. Но знаний по USB не достаточно, поэтому паралельно просматриваю STM32, где куча примеров в сети... С другой стороны, те кто пробовал USB в STM32, в один голос твердят, что слишком уж запутано там всё, и новичку проще начать осваивать USB на других контроллерах. USB, на мой взгляд, можно только использовать, а освоить его невозможно  . Т.е. если честно разбираться в спецификации, то можно просто рехнуться. Поэтому народ обычно берет чужой готовый пример, а затем модифицирует его под свои цели. А то и вовсе использует целиком, не вникая в смысл алгоритма. Цитата(Falkon_99 @ Jul 8 2014, 13:57)  А вообще, задача простейшая, необходимо подключить USB флешку, и работать с файловой системой! Ничего себе простейшая. Да это очень трудная задача!  Сама файловая система невразумительна - приходится чужой код вживлять, поскольку самой такого не написать. А разговор с флешкой - отдельная премудрость. Я сама до сих пор файловую систему освоить не могу, хотя уже больше 10 лет с AVR-ками вожусь. Ну, работает она у меня, хоть кровь из носу.
|
|
|
|
|
Jul 8 2014, 14:22
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Цитата(Xenia @ Jul 8 2014, 15:21)  Хост ничего такого делать не должен, поскольку именно он - активное начало в трансфере. Только хост может обратиться к девайсу и чего-то от него потребовать, а девайс обязан дать ответ не позднее, чем наступит таймаут. Более того, даже при всем своем желании девайс не имеет возможности вызвать хост или хотя бы подать ему какой-то сигнал без вопроса с его стороны, даже когда девайсу это очень нужно. В этом смысле USB чуточку похож на I2C, где мастер может быть только один, и именно он управляет всей шиной. Поэтому быть хостом просто лепота sm.gif, поскольку никто тебя не подгоняет: не можешь шевелиться быстро - шевелись медленно. Если мне не изменяет память, то, согласно спецификации, хост должен опрашивать девайс не реже, чем девайс заявил в дескрипторе, обычно единицы миллисекунд. Обмен типа interrupt вообще с интервалом 1 или 2 мс, не помню точно. SW библиотеки хоста требуют таймер, периодом в 1 мс. Хотя, для самодельной системы, если нет потока данных, может и нет смысла всё строго соблюдатью
|
|
|
|
|
Jul 9 2014, 09:27
|

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

|
Цитата(Копейкин @ Jul 8 2014, 18:22)  Если мне не изменяет память, то, согласно спецификации, хост должен опрашивать девайс не реже, чем девайс заявил в дескрипторе, обычно единицы миллисекунд. Обмен типа interrupt вообще с интервалом 1 или 2 мс, не помню точно. SW библиотеки хоста требуют таймер, периодом в 1 мс. Хотя, для самодельной системы, если нет потока данных, может и нет смысла всё строго соблюдать. Верно, 1 мс, если это "full-speed". Однако это требование установили от балды, поскольку ниоткуда эта цифра не вытекает. В спецификации USB 2.0 сказано: "The Host Controller produces SOF tokens at a period of 1 ms when operating with full-speed devices, and at a period of 125 μs when operating with high-speed devices." Т.е. это чистая условность, которую даже девайс не может попросить изменить в передаваемых хосту дескрипторах (я там такого поля даже не нашла). Тем не менее, 1 мс это не так уж мало, чтобы у любой из AVR возник по этому повод напряг. Обычно даже часовой таймер запускают с периодом на 1 мс и прерывания по нему успевают обрабатывать. Короче говоря, если девайс успевает реагировать на запросы хоста за 1 мс, то почему бы хосту должно быть трудно выдавать эти запросы с той же скоростью? Т.е. здесь я протестую против положения, что AVR, якобы, может справиться с работой только в качестве девайса, а работа в качестве хоста им не под силу. Тем более, что прием и передача потребляют практически одинаковое количество ресурсов.
|
|
|
|
|
Jul 9 2014, 13:01
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Цитата(Xenia) Т.е. это чистая условность, которую даже девайс не может попросить изменить в передаваемых хосту дескрипторах (я там такого поля даже не нашла). Поле bInterval дескриптора Endpoint 1 байт. Цитата Interval for polling endpoint for data transfers. Expressed in frames or microframes depending on the device operating speed (i.e., either 1 millisecond or 125 μs units). Да я не собирался ругать AVR. Сам на них много чего делаю. Но USB-хост делать не стал-бы. Думаю дальше спорить не будем  правда?
|
|
|
|
|
Jul 9 2014, 18:08
|

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

|
Цитата(Копейкин @ Jul 9 2014, 17:01)  Да я не собирался ругать AVR. Сам на них много чего делаю. Но USB-хост делать не стал-бы. Думаю дальше спорить не будем  правда? Я бы тоже USB-хост делать не стала бы, не важно на чем  . Скажите, а как все-таки делают хосты на 3-вольтовых контроллерах? Ведь вроде бы по стандарту положено, чтобы USB был 5-ти вольтовым. Где он возьмет 5 вольт для Ubus, чтобы кормить девайсов? Да и у большинства современных контроллеров даже толерантности к 5-ти вольтам нет. У AT90 таких проблем нет, поскольку они сами пятивольтовые, а как решается вопрос совместимости 3-вольтового хоста и 5-вольтовых девайсов?
|
|
|
|
|
Jul 10 2014, 07:32
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Цитата(Xenia) Скажите, а как все-таки делают хосты на 3-вольтовых контроллерах? Ведь вроде бы по стандарту положено, чтобы USB был 5-ти вольтовым. Где он возьмет 5 вольт для Ubas, чтобы кормить девайсов? Да и у большинства современных контроллеров даже толерантности к 5-ти вольтам нет. У AT90 таких проблем нет, поскольку они сами пятивольтовые, а как решается вопрос совместимости 3-вольтового хоста и 5-вольтовых девайсов? 1) Линии D+ и D- не 5-вольтовые, а существенно меньше, и могут принимать несколько значений. Поэтому 3,3 или 5 вольт питание - неважно. 2) Для USB3 есть спец. микросхемы физического уровня ULPI<-> USB 3) Хост должен обладать собственным мощным 5-вольтовым источником - никуда не деться... Это питание, через ключи с токовой защитой, а в последнее время, часто просто через термопредохранители (самовосстанавливающиеся) подаётся на питание - линию VBUS. Для USB3 можно посмотреть ISP1705AET Цитата The ISP1705 can transmit and receive USB data at high speed (480 Mbit/s), full speed (12 Mbit/s) and low speed (1.5 Mbit/s), and provides a pin-optimized, physical layer front-end attachment to the USB host, peripheral or OTG controller with Single Data Rate (SDR) or Dual Data Rate (DDR) ULPI link
|
|
|
|
|
Jul 10 2014, 13:31
|
Частый гость
 
Группа: Участник
Сообщений: 190
Регистрация: 7-11-07
Из: С-Петербург
Пользователь №: 32 134

|
Цитата(Xenia) Но не погорит ли 3-вольтовый МК, если ему подадут 5-вольт на линии D+ и D-? Максимальное напряжение на выводах D+ и D- м.б. 3,6 вольта, при штатном использовании. Большее напряжение можно только принудительно подать, в обход USB. Тем не менее, защита от статики обычно имеет верхнюю опору VBUS, так что при кратковременной подаче +5 вольт сгореть не должны.
|
|
|
|
|
Jul 10 2014, 15:55
|

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

|
Цитата(Копейкин @ Jul 10 2014, 17:31)  Максимальное напряжение на выводах D+ и D- м.б. 3,6 вольта, при штатном использовании. Большее напряжение можно только принудительно подать, в обход USB. Кажется, я поняла причину своих опасений. Это я по аналогии с Xmega, где линии D- и D+ являются альтернативными функциями порта D (буква D там и там - просто случайность), подумала, что и у AT90 это так. Ведь ничто не мешает контроллеру использовать порт по прямому назначению. Вот и испугалась, что AT90 тоже может выставить на этом порту высокий уровень, чем и повредить присоединенным к его линиям USB другим устройствам, толерантности к 5-вольтам не имеющим. Полезла в даташиты и обнаружила, что у AT90 линии D- и D+ не являются портами. Т.е. подать на них 5 вольт, в результате програмистской ошибки, на них невозможно. Правда у AT90USB82/162 эти линии совмещены с линиями I2C (SDA и SCL), но это не страшно, т.к. там "открытый коллектор".
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|