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

 
 
2 страниц V  < 1 2  
Reply to this topicStart new topic
> Как установить драйвер на USB Device AT91RM9200?
amw
сообщение Apr 25 2007, 15:04
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата
Может быть перед передачей каждого куска надо еще ждать установки флага TX_COMP, чтобы удостовериться, что данные получены хостом?

Да.
Следующую часть пакета нужно посылать при установке флага TX_COMP после передачи первой части.


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
junkl
сообщение Apr 25 2007, 15:24
Сообщение #17


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Цитата(cebotor @ Apr 25 2007, 13:27) *
Вы не можете показать , где указанная функция применяется к дескриптору для передачи ? (хотелось бы в вашем исходном примере)
у меня вообще есть подозрение , что она вызывается где то циклически поэтому и отрабатывает только в пределах восьми байт .
Если не секрет , откуда пример ?

Я тоже думала, может функция вызывается несколько раз, пока не передан полностью весь дескриптор?
Но не смогла найти этому подтверждение. Смотрела по DBGU, что он передает. Только 8 первых байт дескриптора.

Порядок вызова этой функции:
Прерывание по Ep0 =>
usbEp0.Handler =>
AT91F_SVC_USBCTL_Handler =>
распознавание пакета SETUP,
pSvcUdp->DisptachSetup(pSvcUdp) =>
AT91F_USB_DispatchRequest =>
распознавание STD_GET_DESCRIPTOR,
AT91F_USB_GetDescriptorDevice(pUSBCTL) =>
pUSBCTL->Write(pUSBCTL, deviceDescriptor, MIN(sizeof(deviceDescriptor), wLength),
(AT91PF_SVC_USBCTL_RWComplete) 0) =>
AT91F_SVC_USBCTL_DataIn(pSvcUdp, pSvcUdp->pUdp)


Исходный код - с atmel.com для среды ADS AT91RM9200-BasicUSB. (Переделан под IAR).
Пример могу прислать. Нужно? smile.gif

Спасибо.
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 25 2007, 15:50
Сообщение #18


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(junkl @ Apr 25 2007, 15:24) *
Я тоже думала, может функция вызывается несколько раз, пока не передан полностью весь дескриптор?
Но не смогла найти этому подтверждение. Смотрела по DBGU, что он передает. Только 8 первых байт дескриптора.

Порядок вызова этой функции:
Прерывание по Ep0 =>
usbEp0.Handler =>
AT91F_SVC_USBCTL_Handler =>
распознавание пакета SETUP,
pSvcUdp->DisptachSetup(pSvcUdp) =>
AT91F_USB_DispatchRequest =>
распознавание STD_GET_DESCRIPTOR,
AT91F_USB_GetDescriptorDevice(pUSBCTL) =>
pUSBCTL->Write(pUSBCTL, deviceDescriptor, MIN(sizeof(deviceDescriptor), wLength),
(AT91PF_SVC_USBCTL_RWComplete) 0) =>
AT91F_SVC_USBCTL_DataIn(pSvcUdp, pSvcUdp->pUdp)


Исходный код - с atmel.com для среды ADS AT91RM9200-BasicUSB. (Переделан под IAR).
Пример могу прислать. Нужно? smile.gif

Спасибо.

Вот это:
Код
pUSBCTL->Write(pUSBCTL, deviceDescriptor, MIN(sizeof(deviceDescriptor), wLength),
    (AT91PF_SVC_USBCTL_RWComplete) 0)

отсылает начало пакета (дескриптора). А остальные части отсылаются по TX_COMP?


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post
junkl
сообщение Apr 26 2007, 08:19
Сообщение #19


Участник
*

Группа: Новичок
Сообщений: 69
Регистрация: 12-10-05
Из: Калуга
Пользователь №: 9 539



Цитата(amw @ Apr 25 2007, 16:50) *
Вот это:
Код
pUSBCTL->Write(pUSBCTL, deviceDescriptor, MIN(sizeof(deviceDescriptor), wLength),
    (AT91PF_SVC_USBCTL_RWComplete) 0)

отсылает начало пакета (дескриптора). А остальные части отсылаются по TX_COMP?

В исходном примере анализа TXCOMP я не видела. Просто в функции AT91F_SVC_USBCTL_DataIn я сделала цикл do ... while - пока не передан весь дескриптор
Код
   do
   {
      if (pSvcUdp->bufferSize >= 8) { // bank 0 = 8 byte ?
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        pSvcUdp->bufferSize -= 8;
      }
      else {
        for (i=0;i<pSvcUdp->bufferSize;i++)
          AT91F_UDP_EpWrite(pUdp, 0, *pBuffer++);
        pSvcUdp->bufferSize = 0;
      }
      pSvcUdp->pBuffer = pBuffer;
      AT91F_UDP_EpEndOfWr(pUdp, 0);  
   }  while (pSvcUdp->bufferSize);


А как надо?

Сообщение отредактировал junkl - Apr 26 2007, 08:21
Go to the top of the page
 
+Quote Post
amw
сообщение Apr 27 2007, 13:04
Сообщение #20


Знающий
****

Группа: Свой
Сообщений: 601
Регистрация: 22-09-05
Из: Kharkov
Пользователь №: 8 847



Цитата(junkl @ Apr 26 2007, 08:19) *
В исходном примере анализа TXCOMP я не видела. Просто в функции AT91F_SVC_USBCTL_DataIn я сделала цикл do ... while - пока не передан весь дескриптор

А как надо?


В общем случае надо:
1. Собрать полный пакет для отправки (любой длины).
2. Записать в буфер часть пакета, размером равным размеру конечной точки (или меньше).
Если меньше, то значит пакет закончился.
3. Установить TXREADY.
4. Ждать TXCOMP.
5. Повторить пп 2-5.

Убедитесь, что функции примера выпоняют это.

PS По риведенному примеру ничего сказать не могу, так как у меня нет ни RM9200 ни примера ни Windows. Я работаю с SAM7, контроллеры USB у них похожие, но не идентичные.

Сообщение отредактировал amw - Apr 27 2007, 13:05


--------------------
- А мораль отсюда такова: всякому овощу свое время. Или, хочешь, я это сформулирую попроще: никогда не думай, что ты иная, чем могла бы быть иначе, чем будучи иной в тех случаях, когда иначе нельзя не быть.
© Lewis Carroll. Alice's adventures in wonderland.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 28th June 2025 - 16:23
Рейтинг@Mail.ru


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