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

 
 
> USB LPC2000, как работае
Golikov A.
сообщение Aug 7 2008, 13:03
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 4 256
Регистрация: 17-02-06
Пользователь №: 14 454



Привет!

Народ помогите, в конец замучался.

На ЛПЦ 2148 пытаюсь реализовать ХИД девайс.

Проблема что не могу отправить усб сообщение через нулевую контрольную точку.
Принимать сообщения принимаю и правильные, но дальше Дескриптора устройтсва и задания адреса не сдвинулся.

Все ведет себя как то не предсказуемо, и уже не знаю на что и думать.

Регулярно получаю ошибку
Unexpected Packet

причем и в еррор статусе и еррор коде регистре.


Есть те кто реализовывал УСБ на ЛПЦ 2148

вот на всякий случай текст функции посылки сообщения, вроде из названия функций можно догадаться что они делают

Рад буду любой помощи

Код
int USBSendData(int EPNum, char *Buffer, int DataLen, int MaxPocketSize)
{
   int ErrorCode=0;
   int TimeOut=0;
   int EPPhysNum=((EPNum<<1)+1); //convert logical to physcal EP num

   char EPInfo;
   //logical to physycal
   ErrorCode=(USBCmd((CMD_USB_SEL_EP+EPPhysNum),NULL,&EPInfo)<<3);

   if((EPInfo&0x01)!=0) //not end sending of previous send
    {
      #ifdef DEBUG
      UARTSendText("Prev send not end, EP info :",0);
      UARTSendHexStr(&EPInfo,1,0);
      #endif
      return 4;
    }

   if(DataLen==0) //need send zero length data
    {
      USBCTRL=(((EPNum&0x0F)<<2)|0x02);// set write mode, and sellect EP
      TPKTLEN=0;
      TDATA=0; //just in case, for internal mechanics

      ErrorCode+=(USBValidateBuffer(EPPhysNum)<<6); //need use physical ep number;
      if(ErrorCode!=0) //error code
        return ErrorCode;

      TimeOut=0;
      EPInfo=0x01;
      while(((EPInfo&0x01)!=0)&&(TimeOut++<USB_DEV_TIMEOUT)) //waite end of sending
       {
          USBCmd((CMD_USB_SEL_EP+EPPhysNum),NULL,&EPInfo);
          if((EPInfo&0x02)!=0) //ep was STALLed
           {
             UARTSendText("EP was STALLed, EPInfo :",0);
             UARTSendHexStr(&EPInfo,1,0);
             break;
           }
       }

      if(((EPInfo&0x02)!=0)||((EPInfo&0x01)!=0)) //not end of sending interrupt, or EP STALLed
        return 3;

      USBCmd((CMD_USB_SEL_CLR_INT_EP+EPPhysNum),NULL,&EPInfo); //clear usb clock domain interrupt

      #ifdef SPEED_DEBUG
      UARTSendText("Zerro EP Info :",0);
      UARTSendHexStr(&EPInfo,1,0);
      #endif
    }

   while(DataLen>0) //send data by max pocket size if nedded
    {
      int CurrentSendDataLen;
      if(DataLen>MaxPocketSize)
        CurrentSendDataLen=MaxPocketSize;
      else
        CurrentSendDataLen=DataLen;

      USBCTRL=(((EPNum&0x0F)<<2)|0x02);// set write mode, and sellect EP
      TPKTLEN=(CurrentSendDataLen&0x3FF);

      for(int j=0;j<CurrentSendDataLen;j+=4) //send by word
       {
         if((CurrentSendDataLen-j)<4)//last part of sending
          {
            int TempData=0;
            char *Pointer=((char *)&TempData);
            for(int k=j;k<CurrentSendDataLen;k++)
              *Pointer=*Buffer++;
            TDATA=TempData;
            break;
          }

         TDATA=*((int *)Buffer);
         Buffer+=4; //write by words
       }


      ErrorCode+=(USBValidateBuffer(EPPhysNum)<<6); //need use physical ep number;
      if(ErrorCode!=0) //error code
        return ErrorCode;

      DataLen-=CurrentSendDataLen;


      /*if(DataLen>0) //need send one more data, waite end of last sending
       {*/
         TimeOut=0;
         EPInfo=0x01;
         while(((EPInfo&0x01)!=0)&&(TimeOut++<USB_DEV_TIMEOUT)) //waite end of sending
          {
             USBCmd((CMD_USB_SEL_EP+EPPhysNum),NULL,&EPInfo);
             if((EPInfo&0x02)!=0) //ep was STALLed
              {
                UARTSendText("EP was STALLed, EPInfo :",0);
                UARTSendHexStr(&EPInfo,1,0);
                break;
              }
          }

         if(((EPInfo&0x02)!=0)||((EPInfo&0x01)!=0)) //not end of sending interrupt, or EP STALLed
           return 3;

         USBCmd((CMD_USB_SEL_CLR_INT_EP+EPPhysNum),NULL,&EPInfo); //clear usb clock domain interrupt

         #ifdef SPEED_DEBUG
         UARTSendText("Zerro EP Info :",0);
         UARTSendHexStr(&EPInfo,1,0);
         #endif
       //}
    }

   return ErrorCode;
}
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Golikov A.   USB LPC2000   Aug 7 2008, 13:03
- - Golikov A.   Здравствуйте! Дальнейшие копания привели меня...   Aug 8 2008, 20:34
- - Diz   Посмотрите lpcusb - http://wiki.sikken.nl/index.ph...   Aug 9 2008, 00:56
|- - Golikov A.   Цитата(Diz @ Aug 9 2008, 04:56) Посмотрит...   Aug 9 2008, 08:44
|- - amw   Из вопроса видно, что Вы не понимаетет сам USB. LP...   Aug 9 2008, 09:48
|- - Golikov A.   Цитата(amw @ Aug 9 2008, 13:48) Из вопрос...   Aug 9 2008, 11:14
|- - amw   Цитата(Golikov A. @ Aug 9 2008, 14:14) Из...   Aug 10 2008, 17:38
|- - Golikov A.   Привет! Спасибо за ответ. Опустим взаимные уп...   Aug 10 2008, 18:10
|- - Golikov A.   Ура с бардаком разобрался, я убирал флаг после отв...   Aug 11 2008, 09:24
|- - amw   Цитата(Golikov A. @ Aug 10 2008, 21:10) П...   Aug 11 2008, 11:25
|- - Golikov A.   Привет! Вот сейчас почитал и думаю как трактов...   Aug 11 2008, 12:06
|- - galjoen   Цитата(Golikov A. @ Aug 11 2008, 16:06) П...   Aug 11 2008, 12:45
||- - Golikov A.   Цитата(galjoen @ Aug 11 2008, 16:45) 1. С...   Aug 11 2008, 13:22
||- - galjoen   Цитата(Golikov A. @ Aug 11 2008, 17:22) Д...   Aug 11 2008, 14:08
||- - Golikov A.   Цитата(galjoen @ Aug 11 2008, 18:08) Не с...   Aug 11 2008, 14:30
||- - galjoen   Цитата(Golikov A. @ Aug 11 2008, 18:30) Т...   Aug 11 2008, 15:57
||- - Golikov A.   Цитата(galjoen @ Aug 11 2008, 19:57) NAK-...   Aug 11 2008, 17:21
|||- - amw   Цитата(Golikov A. @ Aug 11 2008, 20:21) С...   Aug 11 2008, 20:48
|||- - Axel   Цитата(Golikov A. @ Aug 11 2008, 21:21) ....   Aug 12 2008, 05:41
||- - Golikov A.   Уважаемый galjoen Не подскажете ли мне еще по ста...   Aug 12 2008, 08:49
||- - galjoen   Цитата(Golikov A. @ Aug 12 2008, 12:49) У...   Aug 12 2008, 10:17
||- - Golikov A.   Цитата(galjoen @ Aug 12 2008, 14:17) Личн...   Aug 12 2008, 10:36
||- - galjoen   Цитата(Golikov A. @ Aug 12 2008, 14:36) 3...   Aug 12 2008, 10:49
||- - Golikov A.   Цитата(galjoen @ Aug 12 2008, 14:49) Реше...   Aug 12 2008, 12:24
||- - aaarrr   Цитата(Golikov A. @ Aug 12 2008, 16:24) Э...   Aug 12 2008, 12:29
||- - Golikov A.   Цитата(aaarrr @ Aug 12 2008, 16:29) Хаб у...   Aug 12 2008, 12:49
||- - aaarrr   Цитата(Golikov A. @ Aug 12 2008, 16:49) П...   Aug 12 2008, 12:52
||- - Golikov A.   Цитата(aaarrr @ Aug 12 2008, 16:52) Хаб н...   Aug 12 2008, 13:00
||- - galjoen   Цитата(Golikov A. @ Aug 12 2008, 17:00) П...   Aug 12 2008, 16:40
||- - Golikov A.   Цитата(galjoen @ Aug 12 2008, 20:40) По у...   Aug 12 2008, 17:17
||- - Golikov A.   УРА за АКАло.. Может кому то будет полезно... Рег...   Aug 12 2008, 21:14
|- - amw   Цитата(Golikov A. @ Aug 11 2008, 15:06) П...   Aug 11 2008, 15:53
- - drovik   В текст пока не вникал, но хотелось-бы увидеть дес...   Aug 14 2008, 08:29
|- - Golikov A.   Цитата(drovik @ Aug 14 2008, 12:29) В тек...   Aug 14 2008, 08:57
- - Golikov A.   Всем привет! Извеняюсь с выбором подфорума, н...   Aug 15 2008, 22:29
- - Golikov A.   Цитата(Golikov A. @ Aug 16 2008, 02:29) В...   Aug 17 2008, 22:12


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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 03:03
Рейтинг@Mail.ru


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