Autor Tema: Mayor Velocidad USB  (Leído 2056 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado demonae

  • PIC10
  • *
  • Mensajes: 4
Mayor Velocidad USB
« en: 13 de Febrero de 2007, 09:12:40 »
Hola , resulta que estoy usando la transmision USB del PIC18F4455 tipo bulk transfer , basandome en el proyecto de J1M y resulta que no logro aumentar la velocidad de transmision sobre los 64KBytes/seg.
Al aumentar el tamaño del buffer a 128 ciertos paquetes se pierden en la transmision. Necesito lograr mayor velocidad , cerca de unos 512KBytes/seg.
Me he encontrado con el siguiente detalle:

//// - On a full speed device, max polling rate is 1 transaction ////
//// per 1ms. This is 64000 bytes per second (64 byte packets ////
//// every 1ms). ////

he llegado a caso al tope de velocidad via bulk transfer???

Espero que me ayuden ya que estoy hasta el cuello con esto.

PD: Mi proyecto se trata de encriptar archivos desde el PC.  AL tratar de encriptar un archivo de 1Mbyte este se demora cerca de 16 segundo , lo que encuentroi que es demasiado  ya que deberia poder encriptar datos de 100Mbytes y como ven seria demasiado lento.

Desconectado J1M

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1960
Re: Mayor Velocidad USB
« Respuesta #1 en: 13 de Febrero de 2007, 18:55:38 »
Tienes que plantearte usar mas de un 'pipe', de los 16 disponibles el PIC solo hace uso de 2, tendrías que configurarlo para activar los otros y tener un mayor flujo de datos. Lo que no tengo claro es como se hace. Pasate por los foros de microchip, en la sección dedicada al USB que quizá puedas encontrar algo q te ayude.

saludos!

Desconectado demonae

  • PIC10
  • *
  • Mensajes: 4
Re: Mayor Velocidad USB
« Respuesta #2 en: 14 de Febrero de 2007, 11:04:23 »
hola , he revisado el foro de microchip y no he encontrado algun tema que me ayude con el asunto de los pipes, he buscado varias soluciones al tema y por ahi encontre la funcion usb_puts que envia un mensage de largo mayor al pquete del endpoint via sucesivos usb_put_packet terminando el mensaje con un usb_put_packet de largo 0, sera esta una posible solucion a la velocidad de transferencia.

Otra cosa es que en este momento estoy ocupando el mismo endpoint para enviar y recibir. sera este el origen del problema??
debería usar mas de 1 endpoint quizas 3 o 4??

         memset(recbuf,0,sizeof(recbuf));
         memset(sndbuf,0,sizeof(sndbuf));
         usb_get_packet(1, recbuf, Lenbuf);
         cifrar(codigo,recbuf,sndbuf);
         usb_put_packet(1,sndbuf,Lenbuf,USB_DTS_TOGGLE);


 Gracias por la ayuda , saludos

Desconectado demonae

  • PIC10
  • *
  • Mensajes: 4
Re: Mayor Velocidad USB
« Respuesta #3 en: 14 de Febrero de 2007, 16:47:15 »
HE realizado unas pruebas de timer para determinar donde esta la demora  que ralentiza el sistema. las pruebas son:

for(i=0;i<largo;i++)
         {
         Timer_ON;            //Se inicia interrupcion de tiempo           
         set_timer3(0);     
      
         while(usb_kbhit(1)!=1)     // en este bucle de espera el tiempo es igual a 2.6ms

            {

            j++;
            if(TimerOFF==TRUE)
               {               
               TIMER_OFF;
               break;
               }
         
            }


            
         if(TimerOFF==TRUE)
            {
            TimerOFF=FALSE;
            break;
            }
            
         TimerOFF=FALSE;
         TIMER_OFF;
         memset(recbuf,0,sizeof(recbuf));
         memset(sndbuf,0,sizeof(sndbuf));
         usb_get_packet(1, recbuf, Lenbuf);         //180us
         cifrar(codigo,recbuf,sndbuf);                  //220us
         usb_put_packet(1,sndbuf,Lenbuf,USB_DTS_TOGGLE);         //174us
         }

Apaga(LED1);
}


Se aprecia que la demora se encuentra en el bucle while(!usb_kbhit(1)){................} osea no se esta llenando el buffer de entrada a una buena tas a de refresco. Agradezco alguna colapboracion, saludos..