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.

TM4C1294KCPDT: TIVA USB COM DRIVER ISSUE WITH WINDOWS 10

Part Number: TM4C1294KCPDT

Hi,

This is regarding the custom board having TM4C1294KCPDT on it. There is some issue with the USB COM Port drivers. Windows 10 detecting the COM as "USB Composite Device" and If i tried to update the drivers it shows error "The best drivers for your device are already installed".

Kindly suggest how to resolve this issue, so that I can have proper COM port in device manager.

Below are the screenshots for your reference:

  • Hi,

      Are you trying to enumerate an USB CDC class device? Do you have the same problem running the same code with the LaunchPad? Have you tried a different Windows 10 machine? Please clarify your application. 

  • Hi,

    Yes it will be USB CDC class device. Same problem found if I run my code on LaunchPad also. Yes I have tried with different Windows 10 machine and still same problem.

    My application is USB serial COM Port device.

    Below is the screenshot of different Windows 10 machine.

  • Hi, 

      Please see the below post and download the Windows 10 driver patch as suggest and see if it makes a difference. 

    https://e2e.ti.com/support/microcontrollers/other/f/908/p/695953/2565196?tisearch=e2e-sitesearch&keymatch=usb%25252525252525252520patch#2565196

  • Hi,

    Tried with the new patch files on above link as per the instruction mentioned in Readme file. But still same problem.

    Regards,

    Rajneesh

  • Hi,

      I will pass your question to our USB expert for suggestion.

  • Hello Rajneesh,

    The usblib function which handles the creation of the composite descriptor had a logic flaw that causes the enumeration to fail on Windows 10 as it tries to enumerate Endpoint 1 twice.

    In order to resolve this, you will need to update your usblib with the fixed function that address that problem. Please follow the below steps.

    Replace your usbdcomp.c file with this attached file (make sure it is still named usbdcomp.c as E2E will usually add some extra characters to the file name): 

    0572.usbdcomp.c
    Fullscreen
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    //****************************************************************************
    //
    // usbdcomp.c - USB composite device class driver.
    //
    // Copyright (c) 2010-2017 Texas Instruments Incorporated. All rights reserved.
    // Software License Agreement
    //
    // Texas Instruments (TI) is supplying this software for use solely and
    // exclusively on TI's microcontroller products. The software is owned by
    // TI and/or its suppliers, and is protected under applicable copyright
    // laws. You may not combine this software with "viral" open-source
    // software in order to form a larger program.
    //
    // THIS SOFTWARE IS PROVIDED "AS IS" AND WITH ALL FAULTS.
    // NO WARRANTIES, WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT
    // NOT LIMITED TO, IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    // A PARTICULAR PURPOSE APPLY TO THIS SOFTWARE. TI SHALL NOT, UNDER ANY
    // CIRCUMSTANCES, BE LIABLE FOR SPECIAL, INCIDENTAL, OR CONSEQUENTIAL
    // DAMAGES, FOR ANY REASON WHATSOEVER.
    //
    // This is part of revision 2.1.4.178 of the Tiva USB Library.
    //
    //****************************************************************************
    #include <stdbool.h>
    #include <stdint.h>
    #include "inc/hw_memmap.h"
    #include "inc/hw_types.h"
    #include "driverlib/debug.h"
    #include "driverlib/sysctl.h"
    #include "driverlib/rom.h"
    #include "driverlib/rom_map.h"
    #include "driverlib/usb.h"
    #include "usblib/usblib.h"
    #include "usblib/usblibpriv.h"
    #include "usblib/usb-ids.h"
    #include "usblib/usbcdc.h"
    #include "usblib/device/usbdevice.h"
    #include "usblib/device/usbdcdc.h"
    #include "usblib/device/usbdcomp.h"
    //****************************************************************************
    //
    //! \addtogroup composite_device_class_api
    //! @{
    //
    //****************************************************************************
    //****************************************************************************
    //
    // Device Descriptor. This is stored in RAM to allow several fields to be
    // changed at runtime based on the client's requirements.
    //
    //****************************************************************************
    static uint8_t g_pui8CompDeviceDescriptor[] =
    {
    18, // Size of this structure.
    USB_DTYPE_DEVICE, // Type of this structure.
    USBShort(0x110), // USB version 1.1 (if we say 2.0, hosts assume
    // high-speed - see USB 2.0 spec 9.2.6.6)
    USB_CLASS_MISC, // USB Device Class (spec 5.1.1)
    USB_MISC_SUBCLASS_COMMON, // USB Device Sub-class (spec 5.1.1)
    USB_MISC_PROTOCOL_IAD, // USB Device protocol (spec 5.1.1)
    64, // Maximum packet size for default pipe.
    USBShort(0), // Vendor ID (filled in during USBDCompositeInit).
    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

    From there, you need to import usblib to your CCS to rebuild it. It is very important for this step that you do not copy the usblib project into your workspace. If you copy it into your workspace, the usblib.lib that is generated will not be pointed to your project.

    Once you have the usblib imported, all you need to do is build the project for the new file to be incorporated as part of the .lib output.

    To verify you have done this correctly, go to [Install Path]\TivaWare_C_Series-2.1.4.178\usblib\ccs\Debug and check that the usblib.lib file has today's date for date modified.

    After this is done, re-build the usb_dev_cserial project and re-flash your device and you should get the composite device ports enumerating correctly.

  • Hello Rajneesh,

    You rejected my proposed solution but offered no details afterwards, can you explain the issue you are facing?

  • Hi Ralph,

    That was done  by mistake.  Somehow I received the feedback mail first and  your solution later on.

    I will check your  suggested  solution tomorrow and update you tomorrow as today is national holiday  here.

    Regards,

    Rajneesh

  • Hello Rajneesh,

    Okay, no problem. I'm going to mark it as a suggestion again as there's a decent chance we'll be referencing that post for future questions on the topic until the change is pushed out on TivaWare :)

  • Hi Ralph,

    Thanks, after following the your suggestion, now I am able to see the COM Port under device manager. But I am getting 2 COM ports, it must be only one COM Port.

    Kindly suggest why there are 2 COM ports and how to correct it to make only one COM Port.

    Regards,

    Rajneesh.

  • Hi Ralph,

    Ralph Jacobi said:
    Replace your usbdcomp.c file with this attached file (make sure it is still named usbdcomp.c as E2E will usually add some extra characters to the file name): 

    Question is the patch regression tested with earlier versions of Windows?

  • Rajneesh Verma said:
    Kindly suggest why there are 2 COM ports and how to correct it to make only one COM Port.

    Windows often caches USB virtual Com ports especially for multiple launch pads being plugged in. Putty or other terminal emulator should be able to determine the active one.

  • Hello Rajneesh,

    That is the intended result of the cserial example. It is an example for Composite devices. If you read the header comments at the top of the project you will see it describes that the project is supposed to enumerate two separate virtual ports.

    If you want a single CDC port, then I can help with that as we have an example of that developed which will be released with the next TivaWare, see the attached project: 3580.usb_dev_cdcserial.zip

  • Hello BP101,

    Unfortunately I don't have much ability to do that, though I think there's a Win 7 machine that hasn't been updated which I can quickly check with.

    That said, I have high confidence it is solved properly because in my personal opinion, the current composite device descriptors should have never worked to begin with. Why Windows 7 ignores the same endpoint being enumerated twice is beyond me. I carefully coded the enumeration sequence and validated with a USB analyzer so that each endpoint is enumerated with the correct number.

  • Hello BP101,

    Just to follow up, I did test the bug fix on a Windows 7 PC and everything enumerates correctly. I don't anticipate any backwards compatibility issues.

  • Hi Rajneesh,

    I recently encountered the same issue with the USB driver and after following the steps laid out earlier in this post I was able to fix the issue, it seems you were too.  Just for clarification, did you use the usb_dev_cserial example to help setup the serial USB? If so that's probably the reason why you are seeing two com ports.  The code is setup so that you could have two terminal programs each on their own com port communicate back and forth with each other using the launchpad as the medium.

    -Daryl