Autor Tema: Dudas USB y 12Mbps  (Leído 52750 veces)

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

Desconectado alejandro20

  • PIC10
  • *
  • Mensajes: 5
Re: Dudas USB y 12Mbps
« Respuesta #90 en: 01 de Diciembre de 2009, 16:45:18 »
Muchas gracias migsantiago voy a probarlo más adelante cuando salga de estos proyectos en la universidad, por lo pronto lo voy a dejar en modo Bulk.

Desconectado mmij

  • PIC10
  • *
  • Mensajes: 1
Re: Dudas USB y 12Mbps
« Respuesta #91 en: 19 de Diciembre de 2009, 03:23:20 »
Muchas gracias, MigSantiago, he leido este post y me ha ayudado mucho a comprender muchas cosas sobre comunicacion USB con pic y como eficientarla  :-/ Espero seguir leyendo articulos tan interesante como este!

Suerte

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Dudas USB y 12Mbps
« Respuesta #92 en: 20 de Diciembre de 2009, 16:11:27 »
Te quedo te lujo santiago, felicidades. Ahora estoy denuevo con este proyecto en el que tengo que integrar comunicacion usb, y pues al parecer, aparte como ya lo abia integrado, me voi a quedar con el modo HID. Aunq tengo mis dudas, en algun momento me parece haber visto uno o dos datos erroneos cuando transferia de la PC al PIC como 5000 bytes asi. Es realmente seguro el modo HID? Algo que tranquiliza es que el pickit 2 usa este modo y, para ser un programador y depurador de PICS, pues va bien. Espero no tener que cambiar al modo Bulk porque quiero evitar la necesidad de instalar un driver.

Felicitaciones dnuevo, aunq esto del usb nunca se acabe xD!
Suerte, sau2.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Dudas USB y 12Mbps
« Respuesta #93 en: 20 de Diciembre de 2009, 16:16:35 »
Gracias Jeremy.

El modo HID es muy seguro porque implementa CRC y si llega mal algún reporte se pide la retransmisión. La única transferencia que no revisa el estado de los paquetes es la isócrona, comúnmente usada para las clases de audio y video para usuario final.

Seguramente el error que tuviste fue por algún dato mal mandado.

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Dudas USB y 12Mbps
« Respuesta #94 en: 20 de Diciembre de 2009, 17:07:02 »
Si, debio ser eso. Otra cosa, el HID por ahi comentas que solo permite usar un solo endpoint por interfaz ? Ocea, uno de tx y otro de rx nomas? no se puede mas?  :o

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Dudas USB y 12Mbps
« Respuesta #95 en: 20 de Diciembre de 2009, 17:28:42 »
La clase HID especifica que solo puedes tener un endpoint de control y un endpoint interruptivo por interfaz. Pero si tienes un dispositivo (PIC) puedes tener varias interfaces en él, pudiendo implementar varios HID en un solo PIC y así incrementando la velocidad.

Y bueno, cada pipe interruptivo soporta un endpoint tx y otro rx.

Nadamás habría que modificar el descriptor, pero en eso no tengo experiencia aún, aunque no debería ser complicado porque son puras tablas.
« Última modificación: 20 de Diciembre de 2009, 17:50:22 por migsantiago »

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Dudas USB y 12Mbps
« Respuesta #96 en: 20 de Diciembre de 2009, 20:10:07 »
Vaya, no peudo creer que no se pueda habilitar mas endpoint en HID. Tas seguro de ello? Donde lo viste, has probado? buneo aunq yo no, no dejo de pnsar que es por el cambio de funciona que hiciste y ttodo eso? Bueno, seria bien desilusioante que no se pueda habiltar mas endpoints pero es buneo saber que se puede solucionar aumetnando las interfaces.


Salu2l

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Dudas USB y 12Mbps
« Respuesta #97 en: 21 de Diciembre de 2009, 15:05:12 »
Poder agregar más de un HID por dispositivo es posible, pero de poder hacer lo mismo usando el ejemplo de CCS... quién sabe.

Lo que quisiera es lograr usar el modo bulk y los 15 endpoints. El problema reside en que no sé cómo hacer que la pc lea los 15 endpoints velozmente.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Dudas USB y 12Mbps
« Respuesta #98 en: 01 de Enero de 2010, 16:48:44 »
Encontré el artículo que permite a los usuarios pedir un Product ID a Microchip de forma gratuita y con licencia de hasta 10,000 unidades.

Lo dejo aquí por si luego olvido dónde lo leí.

APPLICATION FOR SUBLICENSE TO
MICROCHIP UNIVERSAL SERIAL BUS VENDOR ID
http://ww1.microchip.com/downloads/en/AppNotes/Application%20for%20USB%20Vendor%20ID%20Sublicense.pdf

Desconectado giff

  • PIC10
  • *
  • Mensajes: 31
    • Ignogantes
Re: Dudas USB y 12Mbps
« Respuesta #99 en: 15 de Abril de 2010, 23:44:36 »
Hoy estuve revisando y probando en mi PIC18F2550 como activar dos ENDPOINTS y lo logre, también configure la mpusbapi para tal función.

Leyendo de un post del foro pero que no recuerdo que palabras usé, empece a probar y realice unos cambios en los descriptores.

Esto es la parte importante del archivo PICUSB.c. Copié esto solamente ya que en USB_CONFIG_DESC[] fue donde modifique y añadí cosas
Código: [Seleccionar]
   #DEFINE USB_TOTAL_CONFIG_LEN      46 //config+interface+class+endpoint


   char const USB_CONFIG_DESC[] = {
   //config_descriptor for config index 1
         USB_DESC_CONFIG_LEN,     //length of descriptor size =1
         USB_DESC_CONFIG_TYPE,         //constant CONFIGURATION (0x02)
         USB_TOTAL_CONFIG_LEN,0,  //size of all data returned for this config ==3,4
         1,      //number of interfaces this device supports
         0x01,                //identifier for this configuration.  (IF we had more than one configurations)
         0x00,                //index of string descriptor for this configuration
         0xC0,                //bit 6=1 if self powered, bit 5=1 if supports remote wakeup (we don't), bits 0-4 reserved and bit7=1
         0x32,                //maximum bus power required (maximum milliamperes/2)  (0x32 = 100mA) =9

   //interface descriptor 0 alt 0
         USB_DESC_INTERFACE_LEN,  //length of descriptor ==10
         USB_DESC_INTERFACE_TYPE,      //constant INTERFACE (0x04)
         0x00,                //number defining this interface (IF we had more than one interface)
         0x00,                //alternate setting
         4,       //number of endpoints, not counting endpoint 0.-------------------------------------------------------------------------->NOTA1
         0xFF,                //class code, FF = vendor defined
         0xFF,                //subclass code, FF = vendor
         0xFF,                //protocol code, FF = vendor
         0x00,                //index of string descriptor for interface =18

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
         0x81,              //endpoint number and direction (0x81 = EP1 IN)
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
         USB_EP1_TX_SIZE,0x00,         //maximum packet size supported =23,24
         0x01,              //polling interval in ms. (for interrupt transfers ONLY)=25

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor ==26
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
         0x01,              //endpoint number and direction (0x01 = EP1 OUT)
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
         USB_EP1_RX_SIZE,0x00,         //maximum packet size supported =30,31
         0x01,              //polling interval in ms. (for interrupt transfers ONLY) =32
        
   //endpoint descriptor ////AGREGADO
         USB_DESC_ENDPOINT_LEN, //length of descriptor == 33
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
         0x82,              //endpoint number and direction (0x82 = EP2 IN)
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
         USB_EP2_TX_SIZE,0x00,         //maximum packet size supported ==37,38
         0x01,              //polling interval in ms. (for interrupt transfers ONLY) ==39

   //endpoint descriptor
         USB_DESC_ENDPOINT_LEN, //length of descriptor ==40
         USB_DESC_ENDPOINT_TYPE,     //constant ENDPOINT (0x05)
         0x02,              //endpoint number and direction (0x02 = EP2 OUT)
         0x02,              //transfer type supported (0 is control, 1 is iso, 2 is bulk, 3 is interrupt)
         USB_EP2_RX_SIZE,0x00,         //maximum packet size supported ==44,45
         0x01              //polling interval in ms. (for interrupt transfers ONLY)  == 46[/b]
  };


NOTA1: Agregué la información para usar el ENDPOINT 2, por lo que donde indico se debe poner un 4. Sin contar el EP0 serian 4 Endpoints en total (2 in y 2 OUT). También modifiqué respectivamente   #DEFINE USB_TOTAL_CONFIG_LEN      46 //config+interface+class+endpoint. De esta forma ya tengo habilitados dos endpoints. Si quisiera añadir 3 Endpoints deberia agregar dos "endpoint descriptor" (uno para In y otro para OUT) asi como también contar nuevamente las lineas para poner el numero respectivo en USB_TOTAL_CONFIG_LEN. Además donde indico la NOTA1 no sería 4, sino un 6.

Por otra parte, en el archivo que tiene el main(), fuses y todo lo demás; para ver si hay datos en cada ENDPOINT se procede de la misma forma como lo hizo J1M en su proyecto PicUSB pero hay que ir constatando usb_kbhit() por cada endpoint, es decir:

usb_kbhit(1) para endpoint 1
usb_kbhit(2) para endpoint 2, y asi suma y sigue.

Se me olvidaba, declaren los #define para cada enpoint IN y/o OUT.
Código: [Seleccionar]

#define USB_EP1_TX_ENABLE USB_ENABLE_BULK // turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK // turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP2_TX_ENABLE USB_ENABLE_BULK // turn on EP2(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP2_RX_ENABLE USB_ENABLE_BULK // turn on EP2(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE 5 // size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 1 // size to allocate for the rx endpoint 1 buffer
#define USB_EP2_TX_SIZE 5 // size to allocate for the tx endpoint 2 buffer
#define USB_EP2_RX_SIZE 1



Para enviar y/o recibir, hacer uso de las funciones que me enseñaron uds aca como usb_get_packet(0x02, recibe, 1)  y usb_put_packet(0x02, envia, 5, USB_DTS_TOGGLE). si se fijan use el Endpoint 2 para enviar y recibir algo.

Finalmente, ahora solo constaté cambiando el STRING que define el endpoint para usar con la libreria importada mpusbapi que usa J1M para realizar su programa PicUSB, o sea:

Código: [Seleccionar]
       #region Definición de los Strings: EndPoint y VID_PID
        string vid_pid_norm = "vid_04d8&pid_0011";

        string out_pipe = "\\MCHP_EP2";
        string in_pipe = "\\MCHP_EP2";

        #endregion

y funcionó igual que como si hubiese estado con el ENDPOINT1. En un rato más probare usando dos enpoint con BULK TRANSFERS simultaneamente para una aplicación que estoy realizando para mi seminario. Les aviso luego.

migsantiago como te manejas más con el código quizas le saques más provecho, me gustaria saber que tendra esa mente tuya para este tema

PD: como miercale se usa el Geshi?, quiero poner codigo con colores y cosas bonitas
« Última modificación: 15 de Abril de 2010, 23:49:03 por giff »
Mi blog sobre apuntes de electrónica: www.ignogantes.net

Desconectado giff

  • PIC10
  • *
  • Mensajes: 31
    • Ignogantes
Re: Dudas USB y 12Mbps
« Respuesta #100 en: 16 de Abril de 2010, 03:27:12 »
Pude hacer comunicación con dos endpoint.

Adjunto los archivos picusbapi.cs y picusb.h para que los miren y se hagan una idea.

Para la parte de CCS, sigan las recomendaciones del post anterior.

Por lo que veo, uso dos EP con bulk pero la transferencia la hace secuencialmente, porque según mi programación hago un usb_kbhit(1) para procesar y responder en el EP1 y despues un usb_kbhit(2) para resonder a lo que me pide el host en el EP2.

¿Esto se optimizaria con el ping pong mode?


Agregado: acabo de releer por enésima vez este hilo y veo que quizás se tenga que editar la funcion usb_put_packet pararedir tiempos en el envio asi como también ver si se puede hacer buffer circular, rayos; y eso que no llevo mucho con el asunto de visual C#
« Última modificación: 16 de Abril de 2010, 04:29:38 por giff »
Mi blog sobre apuntes de electrónica: www.ignogantes.net

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Dudas USB y 12Mbps
« Respuesta #101 en: 16 de Abril de 2010, 09:59:04 »
Qué bueno que estás aprendiendo a usar USB.

Lo que comentas sobre usar más endpoints ya se había logrado, lo que nos interesa es lograr transmitir a 12Mbps.

Si logras una velocidad de más de 1Mbps... real, nos avisas.
« Última modificación: 16 de Abril de 2010, 10:34:56 por migsantiago »

Desconectado giff

  • PIC10
  • *
  • Mensajes: 31
    • Ignogantes
Re: Dudas USB y 12Mbps
« Respuesta #102 en: 16 de Abril de 2010, 11:36:36 »
ok, no sabia que lo habías hecho ya. Por donde recomiendas seguir la investigación?
Mi blog sobre apuntes de electrónica: www.ignogantes.net

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: Dudas USB y 12Mbps
« Respuesta #103 en: 16 de Abril de 2010, 11:51:20 »
Del lado de la PC.

Hacer un programa que sea capaz de leer los 15 endpoints en modo bulk del PIC sin retrasos, preferentemente en modo kernel. Si se logra, el PIC enviaría constantemente datos en los endpoints (sin usar ping-pong) y como mínimo la PC los leería a 1Mbps.

Desconectado giff

  • PIC10
  • *
  • Mensajes: 31
    • Ignogantes
Re: Dudas USB y 12Mbps
« Respuesta #104 en: 16 de Abril de 2010, 12:28:30 »
Del lado de la PC.

Hacer un programa que sea capaz de leer los 15 endpoints en modo bulk del PIC sin retrasos, preferentemente en modo kernel. Si se logra, el PIC enviaría constantemente datos en los endpoints (sin usar ping-pong) y como mínimo la PC los leería a 1Mbps.

En campaña entonces
Mi blog sobre apuntes de electrónica: www.ignogantes.net


 

anything