Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Bande passante USB avec PIC24F



  1. #1
    frouby

    Bande passante USB avec PIC24F


    ------

    Bonjour à tous!!

    J'aurais une petite question à vous poser! Je désire faire une appli qui permette de récupérer des données d'un PIC24 vers un PC grâce à une communciation USB. J'ai téléchargé la bibliothèque de fonctions Microchip et à partir de la librairie de fonctions HID j'arrive à envoyer des données du PIC vers le PC. N'ayant pas encore d'interface, j'ai un sniffer de port USB pour enregistrer ce qui passe sur le port.

    Mon problème est que je voudrais pouvoir envoyer 672 unsigned int à une fréquence de 500Hz, et j'ai l'impression que je ne peux envoyer toutes ces données à une fréquence de 30Hz.....n'y aurait-il pas un autre moyen, plus rapide, pour envoyer des données?? (quitte à utiliser une autre bibliothèque de fonctions...)

    Merci à tous pour vos réponses! A vos claviers

    -----

  2. Publicité
  3. #2
    RISC

    Re : Bande passante USB avec PIC24F

    Salut,

    Tout dépend de la classe USB que tu utilises...
    En HID, tu ne pourras pas dépasser 64Ko / s .

    En supposant que tes int soient sur 16 bits (2 octets), tu as besoin de 500Hz x 672 x 2 = 672Ko / s...ce qui est 10 fois plus rapide que ce que la classe HID permet.

    La seule solution pour ton application est d'utiliser la classes "Générique" aussi appelée Custom qui permet de s'approcher de 1Mo/s.

    C'est plus compliqué car il faut gérer les API plus bas niveaur coté PC et attaquer avec des API plus bas niveau coté PIC.

    Utilises-tu une carte perso ou une carte standard ? référence ?
    Quel modèle de PIC24 ?

    Dans les librairies Microchip il existe des projets en classe générique comme celui-ci qui permet une haute bande passante :
    c:\Microchip Solutions v2011-10-18\USB\Device - WinUSB - High Bandwidth Demo\USB Device - WinUSB - High Bandwidth - C30.mcw

    Tu trouveras l'explication dans ce document
    C:\Microchip Solutions v2011-10-18\Microchip\USB\Documentation \Getting Started\Getting Started - Running the Device - WinUSB - High Bandwidth demo.htm
    Apparemment cette démo permet d'atteindre 960Ko/s

    a+
    Dernière modification par RISC ; 30/11/2011 à 18h57.
    Ma marotte ? les microcontrôleurs ;=)

  4. #3
    frouby

    Re : Bande passante USB avec PIC24F

    Lol merci pour la réponse!!! A vrai je me doutais que tu allais me répondre ^^

    En ce qui concerne la carte, j'utilise la carte de développement Explorer 16 avec le PIM 24F256GB210.

    je viens de programmer le firmware et d'installer le driver, je vais regarder plus en profondeur le code pour comprendre comment ça marche!


    Merci en tout cas!!!

  5. #4
    RISC

    Re : Bande passante USB avec PIC24F

    Salut,

    Si tu tournes le projet High Bandwith sur ta configuration, peux-tu me dire combien tu lis sur l'utilitaire coté PC au niveau du débit ?

    Merci
    a+
    Ma marotte ? les microcontrôleurs ;=)

  6. A voir en vidéo sur Futura
  7. #5
    frouby

    Re : Bande passante USB avec PIC24F

    je la fais tourner et j'arrive à 1008403 Kb/s...ce qui est très bon en soi! ^^
    faut que je fasse pareil avec mon appli maintenant!

  8. #6
    RISC

    Re : Bande passante USB avec PIC24F

    Merci,

    Tu veux sans doute dire 1008,403 Ko/s ( 1,008403 Mo/s ) ;=)

    Bon courage
    a+
    Ma marotte ? les microcontrôleurs ;=)

  9. Publicité
  10. #7
    frouby

    Re : Bande passante USB avec PIC24F

    oui en effet!!! c'est l'usb de l'enfer sinon si tu peux transférer 1008 Mb/s

  11. #8
    frouby

    Re : Bande passante USB avec PIC24F

    Yoo RISC, une question pour toi!! ^^

    Je travaille sur cet exemple de Microchip très intéressant, High Banddwith, le seul hic c'est que l'exemple ne fonctionne que pour recevoir des données du PC or j'aimerais en envoyer aussi à grande vitesse...Du coup j'ai adapté le code comme suit :

    <ProcessIO>

    ...
    unsigned int i;
    if(EP1INEvenNeedsServicingNext == TRUE)
    {
    if(!USBHandleBusy(EP1INEvenHan dle))
    {
    Nop(); Nop();
    // Fill the buffer with data
    for(i=0; i<64; i++)
    {
    EP1INEvenBuffer[i] = i;
    }
    // Send data to host
    EP1INEvenHandle = USBTransferOnePacket(1, IN_TO_HOST,(BYTE*)&EP1INEvenBu ffer,64);
    // Switch to the Odd buffer
    EP1INEvenNeedsServicingNext = FALSE;
    mLED_3_Toggle();
    }
    }
    else
    {
    if(!USBHandleBusy(EP1INOddHand le))
    {
    Nop(); Nop();
    // Fill the buffer with data
    for(i=0; i<64; i++)
    {
    EP1INOddBuffer[i] = 128+i;
    }
    // Send data to host
    EP1INOddHandle = USBTransferOnePacket(1, IN_TO_HOST,(BYTE*)&EP1INOddBuf fer,64);
    // Switch to the Odd buffer
    EP1INEvenNeedsServicingNext = TRUE;
    mLED_4_Toggle();
    }
    }
    ...

    <usb_descriptors.c>

    ...
    /* Configuration 1 Descriptor */
    ROM BYTE configDescriptor1[]={
    /* Configuration Descriptor */
    0x09,//sizeof(USB_CFG_DSC), // Size of this descriptor in bytes
    USB_DESCRIPTOR_CONFIGURATION, // CONFIGURATION descriptor type
    0x27,0x00, // Total length of data for this cfg
    1, // Number of interfaces in this cfg
    1, // Index value of this configuration
    0, // Configuration string index
    _DEFAULT | _SELF, // Attributes, see usb_device.h
    50, // Max power consumption (2X mA)

    /* Interface Descriptor */
    0x09,//sizeof(USB_INTF_DSC), // Size of this descriptor in bytes
    USB_DESCRIPTOR_INTERFACE, // INTERFACE descriptor type
    0, // Interface Number
    0, // Alternate Setting Number
    4, // Number of endpoints in this intf --- Changed from 3 to 4 after adding EP01_IN
    0xFF, // Class code
    0xFF, // Subclass code
    0xFF, // Protocol code
    0, // Interface string index

    /* Endpoint Descriptor */
    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP01_OUT, //EndpointAddress
    _BULK, //Attributes
    64,0x00, //size
    1, //Interval

    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP02_OUT, //EndpointAddress
    _BULK, //Attributes
    64,0x00, //size
    1, //Interval

    0x07, /*sizeof(USB_EP_DSC)*/
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP03_OUT, //EndpointAddress
    _BULK, //Attributes
    64,0x00, //size
    1, //Interval

    0x07, /*sizeof(USB_EP_DSC)*/ // New endpoint for sending data to host
    USB_DESCRIPTOR_ENDPOINT, //Endpoint Descriptor
    _EP01_IN, //EndpointAddress
    _BULK, //Attributes
    64,0x00, //size
    1 //Interval // Ignored in Bulk EP, usually set to 0

    };
    ...

    <USBCBInitEP() >

    ...
    EP1INEvenNeedsServicingNext = TRUE;
    ...

    Qu'en penses tu?

Discussions similaires

  1. PIC24F USB et C#
    Par frouby dans le forum Électronique
    Réponses: 15
    Dernier message: 18/11/2011, 16h11
  2. probleme Bande passante du controleur USB dépassée
    Par calypso06 dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 12/07/2010, 00h20
  3. liaison USB avec PIC24F
    Par kronanberg dans le forum Électronique
    Réponses: 8
    Dernier message: 28/05/2009, 18h09
  4. rajout de mémoire et bande passante USB
    Par gevrieux dans le forum Matériel - Hardware
    Réponses: 5
    Dernier message: 19/11/2006, 19h05
Découvrez nos comparatifs produits sur l'informatique et les technologies.