This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

TMS320C55x5 plain/simple Isochronous example



Hi,

 

We are trying to have a plain isochronous highspeed testcase on C5515.

Up to now we were not so succesful.

There are two isoc examples in the CSL though they are for Audio Class yet what we need is simple isoc highspeed endpoints.

Is there any example that we can review for that?

 

Christos

 

  • Hi Christos,

    What kind of application you are developing with ISOC end points. As far as I know there is no simple isoc example in the CSL.

    Have you tried modifying the USB example1 to 3(CCS3) or CSL_USB_PollExample, CSL_USB_IntcExample, CSL_USB_DmaExample(CCS4) to use isoc end points?. This needs some effort and again it depends on your application.

    Pratap

  • Hi Pratap,

    There is already an application having highspeed bulk endpoints, on top of the CSL_USB_DmaExample for CCS4 and it works very well.

    All CSL examples do work ok. Even the fullspeed audio class example is working here.

    Yet when I tried to change the config descriptor and the relevant endpoint setup commands of the DmaExample in order to have simple isoc endpoints it does not even enumerate.

    The application is a high bandwidth data reading/writing similar eg to usb audio. It is ok with bulk endpoints but due to re-transmissions that create some issues I need to investigate the isoc method.

    Any hints?

    Regards,

    Christos

     

  • Hi Christos,

    Do you have any infomation on at which point USB host-target communication is failing when you try with DmaExample.

    Pratap.

     

  • Its ok,

    After quite some investigation it was a malformed descriptor that created the non-enumeration.

    Specifically the total number of configuration descriptor bytes wTotallength was specified different than what the actual length is.

    I think there is a Murfy's law that only the silly mistakes can give you real headache  !!


    It does enumerate after that.

     

    I've started to test the isoc endpoints now, yet after some first tests, their bandwidth behaviour looks a bit weird, it fluxuates significantly and it has not the bandwidth (~20MB/sec) that the bulk endpoints had, just a 20% of it most of the times.

    I've checked for the double buffering and did not found a specific flag, yet from a search in the cslVC5505 ibrary/project it looks to me that it is enabled by default, only in isoc transfers, could this be an issue for some reason?

     

    Regards,

    Christos

     

  • These are the changes that I did in CSL_USB_DmaExample in order to enumerate with isoc endpoints

     

    Config Descriprions

    ========================================================================

    Uint16    deviceDesc[9] = {0x0112, 0x0200, 0x0000, 0x4000, 0x0451,
                               0x9010, 0x0100, 0x0201, 0x0103};

    Uint16    cfgDesc[40] = {0x0209, 0x003C, 0x0101, 0xC001, 0x0928,    // configure descriptor
                             0x0004, 0x0600, 0x0000, 0x0000,             // interface descriptor

                             0x0507, 0x0581, 0x0200, 0x0701,            //endpoint 1 IN descriptor  isoc
                             0x0105, 0x0005, 0x0102,                     //endpoint 1 OUT descriptor isoc
                             0x0507, 0x0582, 0x0200, 0x0701,            //endpoint 2 IN descriptor isoc
                             0x0205, 0x0005, 0x0102,                    //endpoint 2 OUT descriptor isoc

                             0x0507, 0x0283, 0x0200, 0x0700,             //endpoint 3 IN descriptor bulk
                             0x0305, 0x0002, 0x0002,                    //endpoint 3 OUT descriptor bulk
                             0x0507, 0x0284, 0x0200, 0x0700,             //endpoint 4 IN descriptor bulk
                             0x0405, 0x0002, 0x0002                        //endpoint 4 OUT descriptor bulk
                             };
    ========================================================================

     

    Isoc Endpoints initialization commands within the main()

    ========================================================================

        /* Initialize the Isoc Endpoint IN 1 */
        eventMask = (CSL_USB_EVENT_RESET | CSL_USB_EVENT_EOT);
        status = USB_initEndptObj(CSL_USB0, hEpObjArray[2], CSL_USB_IN_EP1,
                                  CSL_USB_ISO, CSL_USB_EP1_PACKET_SIZE_HS,
                                  eventMask, NULL);
        if(status != CSL_SOK)
        {
            printFunction(1, "USB Endpoint init");
            return;
        }

        /* Initialize the Isoc Endpoint OUT 2 */
        status = USB_initEndptObj(CSL_USB0, hEpObjArray[3], CSL_USB_OUT_EP2,
                                  CSL_USB_ISO, CSL_USB_EP2_PACKET_SIZE_HS,
                                  CSL_USB_EVENT_EOT, NULL);
        if(status != CSL_SOK)
        {
            printFunction(1, "USB Endpoint init");
            return;
        }

    ========================================================================

     

    No other changes than these.

    The behaviour of the isoc endpoints though is not stable and with low bandwidth compared to the bulk endpoints.

    Is there anything else that might be needed to change in the CSL_USB_DmaExample in order to work for isochronous?

    Could be something in the isr interrupt handling or in the endpoint initialization?

     

    Christos

     

  • Ok,

     

    I'll need some help here.

     

    Having the CSL_USB_DmaExample With the above changes and enumerating ok with isochronous highspeed endpoints.

    This is what I get with usbview

    =======================================================================================

    Device Descriptor:
    bcdUSB:             0x0200
    bDeviceClass:         0x00
    bDeviceSubClass:      0x00
    bDeviceProtocol:      0x00
    bMaxPacketSize0:      0x40 (64)
    idVendor:           0x0451 (Texas Instruments)
    idProduct:          0x9010
    bcdDevice:          0x0100
    iManufacturer:        0x01
    iProduct:             0x02
    iSerialNumber:        0x03
    bNumConfigurations:   0x01

    ConnectionStatus: DeviceConnected
    Current Config Value: 0x01
    Device Bus Speed:     High
    Device Address:       0x02
    Open Pipes:              6

    Endpoint Descriptor:
    bEndpointAddress:     0x81  IN
    Transfer Type: Isochronous
    wMaxPacketSize:     0x0200 (512)
    bInterval:            0x01

    Endpoint Descriptor:
    bEndpointAddress:     0x01  OUT
    Transfer Type: Isochronous
    wMaxPacketSize:     0x0200 (512)
    bInterval:            0x01

    Endpoint Descriptor:
    bEndpointAddress:     0x82  IN
    Transfer Type: Isochronous
    wMaxPacketSize:     0x0200 (512)
    bInterval:            0x01

    Endpoint Descriptor:
    bEndpointAddress:     0x02  OUT
    Transfer Type: Isochronous
    wMaxPacketSize:     0x0200 (512)
    bInterval:            0x01

    Endpoint Descriptor:
    bEndpointAddress:     0x83  IN
    Transfer Type:        Bulk
    wMaxPacketSize:     0x0200 (512)
    bInterval:            0x00

    Endpoint Descriptor:
    bEndpointAddress:     0x03  OUT
    Transfer Type:        Bulk
    wMaxPacketSize:     0x0200 (512)
    bInterval:            0x00

    =======================================================================================

     

     

    Exercizing the endpoints showed that there are no interrupts for IN or OUT requests in the isochronous interrupts.

    Is there something that I miss in configuring the isoc endpoints?

     

    Christos

     

  • Hi Christos,

    Have you tried exercising the isoc end points in full speed mode. High speed mode audio class example in the CSL also does not work properly.

    Pratap 

  • Hi Pratap,

    The full speed isoc audio class example  does work here.

    I've seen some posts mentioning that the Audio class in high speed did not produce interrupts. I expected though that this would be because of the DSP/BIOS usage.

    It seems this highspeed isochronous problem is a more generic one and not only for the Audio class with DSP/BIOS.

    Is there any TI opinion on this?

     

    Christos

     

  • I've waited for a couple of weeks but there has been no TI response on this.

     

    Iτ seems that no news is not-good-news in that case.

    I would realy want to know if the C55x5 can have isochronous highspeed endpoints operating properly in the current silicon revision.

     

    Can someone from TI shed some light here?

     

    Christos

     

  • Hi,

    Is there any help that can be given here?

    This is open for so long without any TI response.

     

    Christos