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

 
 
5 страниц V  < 1 2 3 4 > »   
Reply to this topicStart new topic
> USB своими руками для sam7x256, или проблемы с которыми я столкнулся.
Chameleon
сообщение Jan 31 2011, 12:11
Сообщение #16


Участник
*

Группа: Участник
Сообщений: 50
Регистрация: 5-07-08
Пользователь №: 38 757



Сброс обязательно будет не один. При подключении устройства Windows первым делом дает сброс, а затем запрашивает дескриптор. После получения первых 8 байт дескриптора опять дается второй сброс, без завершения получения дескриптора. После второго сброса уже идет полная энумерация.

Вот, нашел.

Энумерация USB устройства в Windows включает следующие шаги:

1. Хост (или концентратор) распознает подключение нового устройства с помощью подтягивающего резистора на
линии данных. Хост ожидает по меньшей мере 100 мс, что бы процесс физического подключения был полностью завершен
и в подключаемом устройстве стабилизировалось питание.
2. Хост производит сброс устройства в состояние по умоланию. Устройство должно отвечать на нулевой адрес.
3. MS Windows запрашивает первые 64 байта дескриптора устройства.
4. После получения первых 8 байтов дескриптора устройства, хост сразу же генерирует второй сброс.
5. Хост выдает команду "Установить адрес", переводя устройство в адресуемое состояние.
6. Хост запрашивает 18 байт дескриптора устройства.
7. Затем он запрашивает 9 байт дескриптора конфигурации, чтобы определить общий размер дескрипторов.
8. Хост запрашивает 255 байт дескриптора конфигурации. (Но отвечать надо реальным количеством байт дескриптора).
9. Хост запрашивает все строковые дескрипторы, если они были указаны.

Сообщение отредактировал Chameleon - Jan 31 2011, 12:27
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Feb 14 2011, 11:48
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-01-11
Из: Москва
Пользователь №: 62 467



Здравствуйте,
а не встречались с такой проблеммой?:
при работе с отладочной платой при подключении USB в UDP_ISR выставляется ENDBUS, SUSPEND и RESUME, SOF и прерывание EP0. А при работе со своим устройством но темже самым проектом получаю только , SUSPEND и RESUME.
Go to the top of the page
 
+Quote Post
e0000
сообщение Feb 15 2011, 14:55
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



Сталкнулся с той-же проблемой...
Приходят только Reset, SOF, Suspend и больше ничего.
Хотя еще вчера все работало cranky.gif
Думаю, что после того как начал потреблять от шины перевалил за 100 мА...
Пытаюсь все вернуть назад.


--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
e0000
сообщение Feb 15 2011, 17:21
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



Возврат к "только процессор на порту" результатов не дал.
Вопрос открыт

Сообщение отредактировал e0000 - Feb 15 2011, 17:22


--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Feb 16 2011, 13:18
Сообщение #20


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-01-11
Из: Москва
Пользователь №: 62 467



странно. у меня устройство запитывается от внешнего источника, а не от USB. но на EK плате я подключал тоже от внешнего, всё работало. надо проверить: если VSUB не доходит до GND на схеме(на моей только конденсатор к земле), то, может, хост не понимает, что надо сетупить устройство и не те пакеты шлёт => MK не выставляет прерывание конечной точки. я смотрел через отладчик: UDP_CSR[0] равен 0 в момент прерывания, а должен быть с битом RXSETUP.
Go to the top of the page
 
+Quote Post
e0000
сообщение Feb 16 2011, 18:46
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



Прошу прощения у всезнаеющего All-a, но я уже не знаю что делать и прошу, если кто знает, ответить.
Почему HOST не присылает SETUP запросов?
Наверное даже не так:
В каких случаях host их может не присылать?


--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
kovigor
сообщение Feb 16 2011, 18:52
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(e0000 @ Feb 16 2011, 21:46) *
Прошу прощения у всезнаеющего All-a, но я уже не знаю что делать и прошу, если кто знает, ответить.
Почему HOST не присылает SETUP запросов?
Наверное даже не так:
В каких случаях host их может не присылать?


Что, даже не пытается прочитать дескриптор устройства ? А может, он как раз и присылает запросы, да вы их своим устройством не видите ? Или вы забываете подключиться к шине (т.е., резистор, например, у вас одним выводом подключен на D+, в то время как другой его вывод никуда не подключен) ? BusHound что говорит ? А осциллограф (маркеры SOF идут) ?

Сообщение отредактировал kovigor - Feb 16 2011, 18:54
Go to the top of the page
 
+Quote Post
e0000
сообщение Feb 17 2011, 07:53
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



Цитата(kovigor @ Feb 16 2011, 20:52) *
Что, даже не пытается прочитать дескриптор устройства ? А может, он как раз и присылает запросы, да вы их своим устройством не видите ? Или вы забываете подключиться к шине (т.е., резистор, например, у вас одним выводом подключен на D+, в то время как другой его вывод никуда не подключен) ? BusHound что говорит ? А осциллограф (маркеры SOF идут) ?

"Дословно":
Pull Up On (осцилографом вижу, что таки резистор подключен)
Suspend
Reset
Reset
Suspend
Timeout to Connect. Pull Up Off
Pull Up On
...

И далее все по новой.
Timeout - отсчитывает 20 сек после подключения резистора, если устойство не иннумеровано.

>>> BusHound что говорит ?
"Такой борьбы не знаю" (с) Гостья из будующего sm.gif
Что за софт/железо?

>>> А осциллограф (маркеры SOF идут) ?
нет sad.gif
Перезапуск машины и опробование на еще 3-х
результат тотже...


--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
kovigor
сообщение Feb 17 2011, 09:13
Сообщение #24


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(e0000 @ Feb 17 2011, 10:53) *
Что за софт/железо?


Это такая программа-сниффер. Иногда бывает очень полезной.

Скорее всего, ваше устройство просто не отвечает на SETUP - пакеты, адресованные к его EP0. Вот я и предлагаю воспользоваться сниффером, чтобы выяснить, посылает хост эти пакеты или же нет. Почему устройство не отвечает на запросы ? Например, вы подключаетесь к шине слишком рано, когда устройство еще не готово отвечать на запросы (не засинхронизирована PLL, не разрешены прерывания ...).
Go to the top of the page
 
+Quote Post
e0000
сообщение Feb 17 2011, 10:19
Сообщение #25


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



BusHound
Скачал, поставил...
SETUP пакетов именно для моего девайса не присылает smile3046.gif
Для других устройств все красиво и четко. wacko.gif

PS
К нему кряк какой нибудь есть? rolleyes.gif
Платить почти $800 за Full Version как-то... cranky.gif


--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
kovigor
сообщение Feb 17 2011, 13:12
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(e0000 @ Feb 17 2011, 13:19) *
К нему кряк какой нибудь есть? rolleyes.gif


Есть. Вы просто плохо искали ...
Go to the top of the page
 
+Quote Post
e0000
сообщение Feb 17 2011, 17:42
Сообщение #27


Участник
*

Группа: Участник
Сообщений: 22
Регистрация: 21-04-09
Пользователь №: 48 029



Цитата(kovigor @ Feb 17 2011, 15:12) *
Есть. Вы просто плохо искали ...

Большое спасибо за BusHound

Ситуация такова:
BusHound говорит, что после reset у меня нет ниодноuj EP sad.gif
Я четко прописал и вижу, что в UDP_CSR0 EPEDS взведен и только в нем. Остальное - нули...

Сообщение отредактировал e0000 - Feb 17 2011, 17:43


--------------------
Уважающая себя схема, как уважающая себя женщина, никогда с первого раза не даст того, что от нее хотят. (с) мое
Go to the top of the page
 
+Quote Post
kovigor
сообщение Feb 17 2011, 21:13
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 5 273
Регистрация: 30-03-10
Пользователь №: 56 295



Цитата(e0000 @ Feb 17 2011, 20:42) *
Ситуация такова ...


Хорошо. Залейте заведомо рабочий проект и посмотрите, как проходит подключение к шине на нем и на вашем проекте ...

Сообщение отредактировал kovigor - Feb 17 2011, 21:16
Go to the top of the page
 
+Quote Post
shrek
сообщение Feb 21 2011, 08:33
Сообщение #29


Частый гость
**

Группа: Участник
Сообщений: 125
Регистрация: 1-12-08
Из: г. Орел
Пользователь №: 42 126



У меня сначала знакомства с USB "своими руками" были так же постоянные проблемы. (сейчас вроде норм... тьфу-тьфу-тьфу) fman.gif
У меня AT91SAM7A3. Рассматривал ATMELовские примеры... Но я их как то не вкурил или не докурил...
Писал все сам с поддержкой Агурова, спецификации USB 2.0 и гуру пользователя aaarrr и всех кто принимал участие (Большое Вам Спасибо! wink.gif ).
Обычно я сначала в инициализации периферии инициализировал сначала частоты
Код
//---Конфигурация контроллера питания-------------------------------------------
     AT91C_BASE_CKGR -> CKGR_MOR    = 0x00000F01;                                    //MOSCEN = 1, OSCBYPASS = 0, OSCOUNT = 0xF, конфигурация генератора (от кварца)
     AT91C_BASE_PMC  -> PMC_MCKR    = AT91C_PMC_CSS_MAIN_CLK | AT91C_PMC_PRES_CLK;   //источник тактовых импульсов кварц MCK 18.432 MHz
     while (!((AT91C_BASE_PMC -> PMC_SR) & AT91C_PMC_MCKRDY));                       //ждать пока не будет готова частота MCK
     AT91C_BASE_CKGR -> CKGR_PLLR   = 0x107C3F18;                                    //USBDIV = 0b01, MUL = 0x7C, OUT = 0b00, PLLCOUNT = 0x3F, DIV = 0x18 частота PLL 96 MHz
     while (!((AT91C_BASE_PMC -> PMC_SR) & AT91C_PMC_LOCK));                         //ждать пока не замкнется петля обратной связи
     AT91C_BASE_PMC  -> PMC_SCER    = AT91C_PMC_PCK | AT91C_PMC_UDP;                 //разрешение тактирования ядра и USB

не забывая включить пользовательски сброс.
Потом контроллер прерываний
Код
//---Конфигурация контроллера прерываний----------------------------------------
     AT91C_BASE_AIC  -> AIC_IDCR    = AT91C_ALL_INT;                            //запрещение всех прерываний
     AT91C_BASE_AIC  -> AIC_ICCR    = AT91C_ALL_INT;                            //сброс всех прерываний
     AT91C_BASE_AIC  -> AIC_EOICR   = 0xF1F1F1F1;                               //запись в регистр конца прерывания
     AT91C_BASE_AIC  -> AIC_SMR[AT91C_ID_N_UDP] = AT91C_AIC_SRCTYPE_INT_HIGH_LEVEL | 0;//режим прерывания IRQ от USB запуск высоким уровнем!!!
     AT91C_BASE_AIC  -> AIC_SVR[AT91C_ID_N_UDP] = (int) usb;                    //адрес обработчика прерывания IRQ от USB
     AT91C_BASE_AIC  -> AIC_IDCR    = AT91C_ALL_INT;                            //запрещение всех прерываний

Дальше иницилизировал сам контроллер USB
Код
//---Конфигурация USB-----------------------------------------------------------
     AT91C_BASE_PMC  -> PMC_PCER     = AT91C_ID_UDP;
     AT91C_BASE_UDP  -> UDP_GLBSTATE = 0;
     AT91C_BASE_UDP  -> UDP_ICR      = AT91C_UDP_CLEAR_INT;                      //Сброс прерываний
     AT91C_BASE_UDP  -> UDP_RSTEP    = AT91C_UDP_ALL_EP;                         //Сброс всех конечных точек
     AT91C_BASE_UDP  -> UDP_IDR      = AT91C_UDP_ALL_INT | AT91C_UDP_ALL_EP;     //Запрещаем все прерывания
     AT91C_BASE_UDP  -> UDP_IER      = AT91C_UDP_ALL_INT | AT91C_UDP_EPINT0;     //Разрешить прерывание от 0
     AT91C_BASE_UDP  -> UDP_CSR[AT91C_UDP_EP0] = AT91C_UDP_EPTYPE_CTRL | AT91C_UDP_EPEDS;//0 конечная контрольная точка

Я все (ну или почти все) проинициализировал. Можно прикрутить модуль UART для отладки что я и делал. Смотрел какие пакеты приходят и в каких прерываниях висит устройство. Сразу скажу что устройство после сброса будет постоянно вистеть в прерывании SOF(кадр каждую милисекунду приходит).
Так... далее
Код
AT91C_BASE_AIC  -> AIC_IECR = AT91C_ID_UDP;
AT91C_BASE_PIOB -> PIO_CODR = AT91C_PIO_PB1;

Включаем прерывания USB и подтягивающий резистор (в ките AT91SAM7A3-EK).
И понеслась...
Хост несколько раз сначала сбрасывает устройство...
Код
//---Обработчик прерываний USB--------------------------------------------------
void usb()
     {
//---Обработка прерываний от конечных точек-------------------------------------
     switch ((AT91C_BASE_UDP -> UDP_ISR) & AT91C_UDP_ALL_EP)
          {
          case AT91C_UDP_EPINT0: {POINT = 0; USB_EP_INT(); break;}      //в зависимости от вызвавшей конечной точки прерывания присваиваем соответствующий индекс
          case AT91C_UDP_EPINT1: {POINT = 1; USB_EP_INT(); break;}
          case AT91C_UDP_EPINT2: {POINT = 2; USB_EP_INT(); break;}
          case AT91C_UDP_EPINT3: {POINT = 3; USB_EP_INT(); break;}
          case AT91C_UDP_EPINT4: {POINT = 4; USB_EP_INT(); break;}
          case AT91C_UDP_EPINT5: {POINT = 5; USB_EP_INT(); break;}
          default: break;
          }
//------------------------------------------------------------------------------
     if ((AT91C_BASE_UDP -> UDP_ISR) & AT91C_UDP_RXRSM)
          {
          AT91C_BASE_UDP -> UDP_ICR = AT91C_UDP_RXRSM;
          }
//------------------------------------------------------------------------------
     if ((AT91C_BASE_UDP -> UDP_ISR) & AT91C_UDP_RXSUSP)
          {
          AT91C_BASE_UDP -> UDP_ICR = AT91C_UDP_RXSUSP;
          }
//---Обработка прерывания по началу кадра---------------------------------------
     if ((AT91C_BASE_UDP -> UDP_ISR) & AT91C_UDP_SOFINT)
          {
          AT91C_BASE_UDP -> UDP_ICR = AT91C_UDP_SOFINT;
          }
//---Конфигурация USB при сбросе шины-------------------------------------------
     if ((AT91C_BASE_UDP -> UDP_ISR) & AT91C_UDP_ENDBUSRES)
          {
          AT91C_BASE_UDP  -> UDP_IDR = AT91C_UDP_ALL_INT | AT91C_UDP_ALL_EP;                  //Запрещаем все прерывания
          AT91C_BASE_UDP  -> UDP_IER = AT91C_UDP_ALL_INT | AT91C_UDP_EPINT0;                  //Разрешить прерывание от 0
          AT91C_BASE_UDP  -> UDP_CSR[AT91C_UDP_EP0] = AT91C_UDP_EPTYPE_CTRL | AT91C_UDP_EPEDS;//0 конечная контрольная точка
          AT91C_BASE_UDP  -> UDP_ICR = AT91C_UDP_ENDBUSRES;                                  //Сброс прерывания по сбросу шины
          }
//------------------------------------------------------------------------------
     if ((AT91C_BASE_UDP -> UDP_ISR) & AT91C_UDP_WAKEUP)
          {
          AT91C_BASE_UDP -> UDP_ICR = AT91C_UDP_WAKEUP;
          }
//---Прерывание обработано------------------------------------------------------
     AT91C_BASE_AIC -> AIC_EOICR = 0xF1F1F1F1;                                  //Сообщаем AIC прерывание обработал :-)
     }

После сброса устройство надо заново проинициализировать (по крайней мере по совету aaarrr мне это помогло), а так было как у вас. Кстати бит прерывания сброса надо очистить, чтобы устройство в нем не пребывало постоянно.
Как видно я обрабатываю только 2 прерывания, а остальные все сбрасываю. Обрабатываю прерывания по конечной точке и по сбросу шины (и в нем же сразу заново инициализирую устройство).
Мой первый пост про USB
Ну а дальше все по идее должно заработать. (должен прислать setup пакет вида 80 06 00 01 00 00 40 00)

Сообщение отредактировал shrek - Feb 21 2011, 08:46
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Feb 24 2011, 07:59
Сообщение #30


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 25-01-11
Из: Москва
Пользователь №: 62 467



"После сброса устройство надо заново проинициализировать " - это имеется в виду прерывание ENDBUS?

вообщем не помогло. всё так же нет прерывания конечной точки.
у меня конфигурация частоты вынесена в стартуп, может в основном теле программы повторить? глаза замылились, чувствую, что бьюсь о стенку. уже вторую плату сделали - тоже самоеsad.gif
Go to the top of the page
 
+Quote Post

5 страниц V  < 1 2 3 4 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 22:37
Рейтинг@Mail.ru


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