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.

TAS1020B on Windows7

Hi,

I use TAS1020B for audio streaming in my board and it works fine on XP systems, but not on Windows 7.

When I plug the USB cable, it loads the driver and said the device is ready for use but I'm not hearing any sound out.

I use windows media player or quick time.

Can anyone help?

Thanks.

  • Hi,

    This works fine. We do it all the time.

    Try plugging in, and then rebooting your computer (have the TAS1020B plugged in while doing the reboot). After you reboot, you should be fine.

    -d2

  • Hi Don,

    I did as you suggested, but issue persist.

    Any special setting or driver needed for Win7?

    Thanks,

    Peter

  • Peter,

    Another OEM saw something like this - turned out, it was a problem in his application. 

    As time has gone on, the Windows audio drivers have become more-particular as to whether the audio class device behaves correctly.  For example, if the device's configuration descriptor indicates that a setting is adjustable, the device must correctly respond to Audio Class commands to obtain min/max/current and set a value for that setting.

    If the descriptors exposed by the TAS1020B application are correct, and the application responds correctly to the control transfers, the TAS1020B works fine with Windows 7. 

    There are some changes with regard to the volume curve for Windows 7 - but that's in Windows itself.

    Regards,

    Frank

     

  • Frank,

    Can you point me as where to look for in your statement below?

    For example, if the device's configuration descriptor indicates that a setting is adjustable, the device must correctly respond to Audio Class commands to obtain min/max/current and set a value for that setting.

    Thanks.


  • See

    http://e2e.ti.com/support/applications/audio/f/22/p/31146/462185.aspx#462185

    I suggest that you capture the USB bus traffic during the connection and see if any transactions addressed to the TAS1020B are stalled by the TAS1020B.

  • Hi Frank,

    After modifying my codes, I have one of the device (I2S format) works on Windows7 but another one which uses AIC format gives me the windows player error as shown even if changing the audio device to mine. What could possibly be the cause?

    Thanks.

  • The USB side doesn't really know whether you're using I2S or AIC to connect the TAS1020B to the CODEC, except that:

    - you may have made changes in the USB descriptors due to having different audio capabilities

    - you may respond to USB transfers differently because of those different audio capabilities

    - you have introduced a bug (e.g., buffer overlaps)

    It's impossible for me to diagnose how your two applications differ.  Can you insert a USB sniffer between the PC and TAS1020B and capture the bus traffic?

  • Hi Frank,

    I use lecroy USB analyzer to record the traffic when I plug and unplug the USB cable connected to TAS1020 and the PC.

    Attached is the file, I don't know if this is useful or sufficient. Let me know as I'm learning how to use this tool as well.

    1817.catc.txt

  • Please send the actual Lecroy capture file (e.g., *.usb), not the text version.  Too much info is missing in the text verson - and I have Lecroy viewing software for the actual capture.

  • I can't attached the usb file int this forum, I send thru email.

  • Take a look at wMaxPacketSize for the second audio streaming endpoint:  your capture shows that your application reports the size to be one (1) byte, even though you say that the endpoint provides 44.1kHz stereo at 20bit.

    Possibly also, you indicate that the sample rate of both streaming endpoints is controllable, though there's only one sample rate supported;  try indicating that not even the sample rate is controllable.

     

  • I've changed the wMaxPacketSize for the second endpoint, but I still see the error.

    I will send the usb file thru email.

  • LeCroy shows the following:

    And, I've always seen the following an integral number of samples (i.e., 6*something, in your case) and, now that you support 48kHz, the max transfer should be 48*6=288bytes (since you're synchronous):

    If none of this works, I suggest setting bAssocTerminal to 0 in both InputTerminalDescriptors and both OutputTerminalDescriptors - I've not seen nonzero values used.

  • I have changed the following, but it has the same error.

    /---------------- For Speaker ------------
    // ============================================
    // Audio Control Input Terminal Descriptor (from host to DUT)
    // ===========================================
    {
    sizeof(AUD_IT_DESC), // bLength
    AUD_CS_INTERFACE, // bDescriptorType
    AUD_SUBTYPE_IT, // bDescriptorSubtype
    DEV_HOST_IT_ID, // bTerminalID [1]
    MAKE_LITTLE_ENDIAN(AUD_USB_TYPE_USB_STREAMING), // wTerminalType streaming to speaker
    0x00, // bAssocTerminal //JA 0 DEV_SPK_OT_ID -- change to 0x00
    DEV_NUM_USB_SPK_CHANNELS, // bNrChannels
    MAKE_LITTLE_ENDIAN(CHANNELS_STEREO), // wChannelConfig
    0x00, // iChannelNames
    0x00 // iTerminal
    },

    // ============================================
    // Audio Control Output Terminal Descriptor (from DUT to host)
    // ===========================================
    {
    sizeof(AUD_OT_DESC), // bLength
    AUD_CS_INTERFACE, // bDescriptorType
    AUD_SUBTYPE_OT, // bDescriptorSubtype
    DEV_SPK_OT_ID, // bTerminalID
    MAKE_LITTLE_ENDIAN(AUD_OT_TYPE_LINEOUT), // wTerminalType; change AUD_OT_TYPE_SPEAKER to AUD_OT_TYPE_LINEOUT to support Win7
    0x00, // bAssocTerminal //JA 0x00 DEV_HOST_IT_ID  -- change to 0x00
    DEV_HOST_IT_ID, // Source ID //JA DEV_SPK_OT_ID
    0x00 // iTerminal
    },

    I have another device that has the same size setting as this one as shown below. It works on Windows7 except it's a 24 bit and this one is 20 bits.

    I changed the setting for the 20 bit as the 24 bit.

    #ifndef _SET_20BIT // _SET_24BIT
    #define DEV_SPK_MAX_PKT 192 // 2 effective channel, 16bit @48Khz (192)= 2*2bytes(16 bits)*48(48 samples per msec) or (384) *2(for double buffer if RAM space OK) by PD
    #else
    #define DEV_SPK_MAX_PKT 288 // 2 effective channel, 24bit @48Khz (288)= 2*3bytes(24 bits)*48(48 samples per msec) or (576) *2(for double buffer if RAM space OK) by PD
    #endif // 2 effective channel, 24bit @96Khz (576)= 2*3bytes(24 bits)*96(48 samples per msec)


    // Packet size; not for Waltz so reduce to minimum
    #ifndef _SET_20BIT
    #define DEV_MICREC_MAX_PKT 96 // 192 = 2channel, 16bit samples@48Khz
    #else
    #define DEV_MICREC_MAX_PKT 96 // 288 = 2channel, 24bit samples@48Khz
    #endif

  • I managed to get it to work by just changing the DEV_SPK_BIT_RES from 20 to 24.

    I'm not sure why Win7 gives me an error? My device is a 20 bit data.

  • I thought you said it worked fine for I2S, but not for AIC?  Did you change between 20 bit and 24 bit as part of that difference?

  • The I2S device is a 24 bit data, the AIC part is a 20 bit data. Initially the DEV_SPK_BIT_RES for the AIC part was 20 bit and causes problem on Windows 7. When I changed to 24, it now works on Win7. Should the DEV_SPK_BIT_RES follows my device setting? Why it is not working with 20 bit in Win7 but works on XP?