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

 
 
Timofey
сообщение Jul 19 2009, 07:40
Сообщение #1


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Код на прием такой
Код
uint AT91F_UDP_Read(AT91PS_CDC pCdc, char *pData, uint length)
{
AT91PS_UDP pUdp = pCdc->pUdp;
uint packetSize, nbBytesRcv = 0, currentReceiveBank = pCdc->currentRcvBank;
if ((pUdp->UDP_CSR[AT91C_EP_OUT] & AT91C_UDP_RX_DATA_BK0)||(pUdp->UDP_CSR[AT91C_EP_OUT] & AT91C_UDP_RX_DATA_BK1))
{
  return 0;//то есть, если не было ни одного пакета принято, то просто выходим
}
while (length) {
  if ( !AT91F_UDP_IsConfigured(pCdc) )
   break;
  if ( pUdp->UDP_CSR[AT91C_EP_OUT] & currentReceiveBank ) {
   packetSize = MIN(pUdp->UDP_CSR[AT91C_EP_OUT] >> 16, length);
   length -= packetSize;
   if (packetSize < AT91C_EP_OUT_SIZE)
    length = 0;
   while(packetSize--)
    pData[nbBytesRcv++] = pUdp->UDP_FDR[AT91C_EP_OUT];
   pUdp->UDP_CSR[AT91C_EP_OUT] &= ~(currentReceiveBank);
   if (currentReceiveBank == AT91C_UDP_RX_DATA_BK0)
    currentReceiveBank = AT91C_UDP_RX_DATA_BK1;
   else
    currentReceiveBank = AT91C_UDP_RX_DATA_BK0;</P> <P>  }
}
        pUdp->UDP_CSR[AT91C_EP_OUT] &= ~(AT91C_UDP_TXCOMP);
pCdc->currentRcvBank = currentReceiveBank;
return nbBytesRcv;</P> <P>}

код на передачу
Код
uint AT91F_UDP_Write(AT91PS_CDC pCdc, const char *pData, uint length)
{
AT91PS_UDP pUdp = pCdc->pUdp;
uint cpt = 0;</P> <P>        if ((pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXPKTRDY))
{
  return 0;//если усб готово к передаче, то начинаем её
}
pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
cpt = MIN(length, AT91C_EP_IN_SIZE);
length -= cpt;
while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;</P> <P> while (length) {
  cpt = MIN(length, AT91C_EP_IN_SIZE);
  length -= cpt;
  while (cpt--) pUdp->UDP_FDR[AT91C_EP_IN] = *pData++;
  while ( !(pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP) )
   if ( !AT91F_UDP_IsConfigured(pCdc) ) return length;
  pUdp->UDP_CSR[AT91C_EP_IN] &= ~(AT91C_UDP_TXCOMP);
  while (pUdp->UDP_CSR[AT91C_EP_IN] & AT91C_UDP_TXCOMP);
  pUdp->UDP_CSR[AT91C_EP_IN] |= AT91C_UDP_TXPKTRDY;
}
return length;
}

в основном цикле я поочередно вызываю сначала чтение, потом запись. И получается, что посылка отправляется только тогда, когда произойдет прием посылки. Если убрать чтение в основном цикле, то передача идет всегда. Почему так? Мне нужно принимать контроллером всего 2 байта, а передавать 256, друг за другом. Причем 2 байта могут быть посланы контроллеру не всегда.
получается следующее
Код
pCDC.Read(&pCDC, ((char *) &data_comp), 2);
if ((length>256))
      {
pCDC.Write(&pCDC, data, length);
}

обнаружилось, что данные все таки доходят до микроконтроллера, а вот он на комп ничего не отправляет. убирая строчку чтения, получаем, что данные на комп все таки идут
Go to the top of the page
 
+Quote Post
4 страниц V  « < 2 3 4  
Start new topic
Ответов (45 - 58)
ZiB
сообщение Dec 15 2009, 09:50
Сообщение #46


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

Группа: Свой
Сообщений: 122
Регистрация: 26-07-05
Из: Россия, Томск
Пользователь №: 7 109



Ух, разобрался.
Согласно спецификации на USB 2.0 Full Speed максимальная пропускная способность канала в режиме Bulk 1 216 000 байт в секунду, у меня получилось чуть меньше, так как от начала фрейма до начала передачи есть не большая пауза.
Но для меня не так критично.
Сейчас летает гарантированно 512 000 байт в секунду, часик потестил smile.gif
Go to the top of the page
 
+Quote Post
Maximm
сообщение Jan 25 2011, 13:52
Сообщение #47


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

Группа: Свой
Сообщений: 157
Регистрация: 7-10-07
Из: Санкт-Петербург
Пользователь №: 31 137



Цитата(ZiB @ Dec 15 2009, 12:50) *
Ух, разобрался.
Согласно спецификации на USB 2.0 Full Speed максимальная пропускная способность канала в режиме Bulk 1 216 000 байт в секунду, у меня получилось чуть меньше, так как от начала фрейма до начала передачи есть не большая пауза.
Но для меня не так критично.
Сейчас летает гарантированно 512 000 байт в секунду, часик потестил sm.gif



Это Вы получили такие скорости для CDC-устройства на драйвере usbser.sys?

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


--------------------
Если работает через раз - значит не работает!
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Feb 2 2011, 11:24
Сообщение #48


Участник
*

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



Прошу прощения за вклинивание в эту тему, может, поможете.
Взял пример, идущий всместе с Keil'ом, передача данных черех HID-устройство для AT91SAM7S64. Переделал чуток дескриптор и отладил на SAM7256-EK плате.
При прошивке своего уже МК Windows не опознаёт USB-устройство. В проекте поменял только стартап в плане частоты и PLL, клок на UDP идёт правильный 48MHz.
В чём может быть подвох?
Go to the top of the page
 
+Quote Post
Maximm
сообщение Feb 3 2011, 15:10
Сообщение #49


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

Группа: Свой
Сообщений: 157
Регистрация: 7-10-07
Из: Санкт-Петербург
Пользователь №: 31 137



Цитата(kichnamid @ Feb 2 2011, 14:24) *
Прошу прощения за вклинивание в эту тему, может, поможете.

В чём может быть подвох?


Схемы подключение шины USB к МК на вашей плате и на отладке аналогичные?


--------------------
Если работает через раз - значит не работает!
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Feb 4 2011, 10:28
Сообщение #50


Участник
*

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



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

единственный момент: у меня на USB разъёме перепутаны были 2 и 3 ножка, т.е. DP и DM цепи, но это исправил. всё равно устройство не распознаётся.

ещё заметил: если в стартапе к отладочному проекту отключить код для Flash-конроллера №0, устройство не опознаётся и на отладочной плате.
Go to the top of the page
 
+Quote Post
kichnamid
сообщение Feb 14 2011, 11:33
Сообщение #51


Участник
*

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



выявил, что выставляется прерывание ENDBUS, resume и suspend в UDP_ISR. А вот прерывание нулевой конечной точки (младший бит в UDP_ISR) нет, хотя МК должен выставлять прерывание сам. На отладочной плате, прерывание есть. Что может быть не так?!
Go to the top of the page
 
+Quote Post
MiDV
сообщение Apr 1 2011, 07:23
Сообщение #52


Участник
*

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



Может кто знает, как реализовать хост на SAM7X256. Поделитесь инфой, плиз.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Apr 1 2011, 09:27
Сообщение #53


Гуру
******

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



Никак. Можно только подключить внешнюю микросхему хоста.
Go to the top of the page
 
+Quote Post
boyko-alexey
сообщение May 16 2011, 21:02
Сообщение #54





Группа: Участник
Сообщений: 10
Регистрация: 28-02-09
Пользователь №: 45 475



Люди, может кто поделится немудрёным кодом USB-MSD-MMC для at91sam7?
Заранее благодарен blush.gif
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 17 2011, 08:22
Сообщение #55


Гуру
******

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



Цитата(boyko-alexey @ May 17 2011, 00:02) *
Люди, может кто поделится немудрёным кодом USB-MSD-MMC для at91sam7?
Заранее благодарен blush.gif


Есть такое, но только для SAM9 и SD (MMC я не поддерживал)
Go to the top of the page
 
+Quote Post
boyko-alexey
сообщение May 17 2011, 08:36
Сообщение #56





Группа: Участник
Сообщений: 10
Регистрация: 28-02-09
Пользователь №: 45 475



Цитата(kovigor @ May 17 2011, 12:22) *
Есть такое, но только для SAM9 и SD (MMC я не поддерживал)

Да ММС и не надо, а с SAM9 по SPI или MCI? Хотя плевать - главное принцип записи\чтения флешки
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 17 2011, 08:40
Сообщение #57


Гуру
******

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



Цитата(boyko-alexey @ May 17 2011, 11:36) *
Да ММС и не надо, а с SAM9 по SPI или MCI? Хотя плевать - главное принцип записи\чтения флешки


По обычной 4-разрядной SD BUS
Go to the top of the page
 
+Quote Post
boyko-alexey
сообщение May 17 2011, 08:53
Сообщение #58





Группа: Участник
Сообщений: 10
Регистрация: 28-02-09
Пользователь №: 45 475



Цитата(kovigor @ May 17 2011, 12:40) *
По обычной 4-разрядной SD BUS

Значит MCI(memory card interface)
Дайте, пожалуйста. Думаю, разберусь.
Ковыряюсь для себя, сделал просмотр на ls020 BMP иJPEG(исходник jpeg от пользователя DpInRock подправил, умещается в SAM7S64 свободно) теперь хочу их заливать через USB.
Аппетит растёт biggrin.gif

Сообщение отредактировал boyko-alexey - May 17 2011, 08:55
Go to the top of the page
 
+Quote Post
kovigor
сообщение May 17 2011, 09:23
Сообщение #59


Гуру
******

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



Цитата(boyko-alexey @ May 17 2011, 11:53) *
Значит MCI(memory card interface)
Дайте, пожалуйста. Думаю, разберусь.
Ковыряюсь для себя, сделал просмотр на ls020 BMP иJPEG(исходник jpeg от пользователя DpInRock подправил, умещается в SAM7S64 свободно) теперь хочу их заливать через USB.
Аппетит растёт biggrin.gif


Адресок бы ...

Вот:

http://zalil.ru/31056631

За паролем обращайтесь ко мне: kovigor@yahoo.com

Сообщение отредактировал kovigor - May 17 2011, 09:59
Go to the top of the page
 
+Quote Post

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

 


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


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