This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

Isochronus Usb Device in LPC2468

Hi Techies, Presently we are working on LPC2468 OEM Board for isochronus transfer in USB Device.

Can anybody exaplains the hardware behaviour(Registers use) with isochronus data transfer for IN and OUT in LPC2468.

Our quiries are
1.When we configure the Endpoints (IN or OUT) as Isochronus then how can we know that which Endpoint is received/transmition (was success for IN)the data?

User manual is explaining that we get the FRAME interrupt for isochronus Endpoint, but after getting the frame interrupt what we have to do?

2. What is the use of Start of Frame (11 bits) value? How can we use it?What information it contains?

  • LPC2468 has both of USB device and host function.
    You seem asking about the USB device side, not for the host.

    The USB device function on LPC2468 is almost same as LPC214x and LPC236x-237x. Then, these examples on the KEIL web pages show the isoc endpoint (EP) handling.

    LPC2148 USB Audio Device Example
    http://www.keil.com/download/docs/308.asp

    LPC2368 / LPC2378 USB Audio Device Example
    http://www.keil.com/download/docs/334.asp

    In the USB 1.0/1.1 spec, the bInterval of isoc EP is fixed to 1ms, a packet per single USB frame of full-speed (FS). Though the USB 2.0 spec allows other setting for bInterval, FS isoc EP is usually driven in 1ms interval, because of this historical reason. The isoc EPs on LPC family is designed following this 1ms custom.



    "1. how can we know that which Endpoint is received/transmition (was success for IN)the data? ... after getting the frame interrupt what we have to do?"

    Isoc EP doesn't directly generate any interrupt on this MCU.
    You have to check each isoc endpoint in the SOF (Start Of FRAME) interrupt service routine (ISR).

    For OUT EP, check Receive Packet Length register (USBRxPLen), PKT_RDY, DV and PKT_LNGTH fields. If it is valid data, read out it. If it isn't, drop the packet.

    For IN EP, just send the next packet.
    There is no flag which shows success on the last packet. The isoc protocol doesn't care if the packet may drop.



    "2. What is the use of Start of Frame (11 bits) value? How can we use it?What information it contains?"

    It's the frame number, attached to the SOF packet.
    Each SOF packet has this frame number, incremented by one on each frame.
    Tracking this number on each SOF (FRAME) interrupt, drop of SOF reception is detected.

    Tsuneo

  • Thanks Tsueno, That's what exactly I want. But right now we are implementing the Isoch through DMA.

  • Above example code also supports DMA using conditional compilation.
    Search "#if USB_DMA #endif" pair on the example code. The example code will help you to understand the description on the datasheet.

    The usbcfg.h defines the keys.

    usbcfg.h
    #define USB_DMA             0
    #define USB_DMA_EP          0x00000040
    


    Modify it directly
    OR
    apply uVision Config wizard to usbcfg.h to enable DMA on the isoc EPs

    There are several scheme for the synchronization of isoc EP. Above example applies synchronized EP, popular for PCM audio. In this scheme, the number of the data on a packet represents the sampling rate.

    For example, when the sampling rate is 8kHz, each packet has 8 pairs of data for each channel.
    To represent fractional sampling rate, say 44.1kHz, packets with 44 or 45 pairs are used. Usually, 44 pairs are transferred, but 45 pairs are sent every 10 transfers.
    44 * 9/10 + 45 * 1/10 = 44.1

    This requirement makes the DMA descriptor complicated.

    Tsuneo