[FAQ] AM2612: USB: DFU and SBL DFU application not working

Part Number: AM2612

Tool/software:

Hi TI experts,

I am using the AM261x-LP board and running into the following USB issues:

  1. I tried running the SBL DFU application via the dfu-util tool provided. I am not able to get the device to enumerate after I send the SBL DFU .tiimage using dfu-util tool. Sometimes I run into Timeout related issues as well.
  2. I tried to run the DFU USB application from the MCU+ SDK. It does not work either.
  3. In DFU bootmode, my AM261x-LP does not enumerate. Is this an issue with my Hardware or ROM code?

Can you please help?

  • There are known issues with the USB Low-level drivers in the mcu_plus_sdk_am261x_10_00_01_10. The commonly observed issues are:

    1. SBL DFU not working
      There are two fixes required here:

      1.1 Issues with optimized USB release library
      The USB driver has issues when paired with compiler optimizations, which breaks the "release" library and the applications that use this library. A quick workaround is to change the application properties in CCS or Makefile in command line to use the debug library instead of the release library (for both TinyUSB library and USB synp library).
      For CCS based project:
      Step-1: In project explorer, right click on your project and open properties:
      Step-2: Navigate to ARM Linker and change the profile of the library as shown below:

      Step-3: Click apply and close
      Step-4: Rebuild the application

      For Command line builds:
      Step-1: In the USB application directory, navigate to the am261x-lp/r5fss0-0_nortos/ti-arm-clang/makefile
      Step-2: Modify the LIBS_common list to link the debug libraries (for both usb-synp and usb-tusb) instead of release libraries.
      Step-3: Save and rebuild the application with debug libs linked. To know how to build applications from Command line, please refer: Using AM261x SDK with Makefiles

      Now test the newly generated images.
      Note: The above issues are being debugged and will be fixed in the future SDK releases (AM261x MCU_PLUS_SDK v10.02 and later versions)

      1.2 Timeout Issues with dfu-util tool
      The mcu_plus_sdk contains a pre-built dfu-util binary delivered as a part of the SDK. The AM261x-LP does not work with standard DFU-UTIL tool due to timeout related issues. The same details can be found here: https://software-dl.ti.com/mcu-plus-sdk/esd/AM261X/latest/exports/docs/api_guide_am261x/SDK_DOWNLOAD_PAGE.html#INSTALL_DFU_UTIL

      There are two modifications made in the DFU-UTIL source code:
      1. Increase the DFU Timeout - This is done to handle transfer of larger application images
      2. Decrease the sleep time in dfuMANIFEST state. This is to make sure the USB host can read the status of the DFU device before ROM resets the AM261x and passes the control to the SBL application.

      This FAQ contains the updated DFU-UTIL tool (which is also included in the mcu_plus_sdk v10.02 and later by default), it is recommended to use these DFU-UTIL binaries instead.
      For windows:
      dfu-util.exe
      For Linux:
      dfu-util

    2. USB DFU device application not working
      This issue is similar to the one above and can be fixed by linking the debug library instead of the release library. Follow the steps in the 1.1 section above.

    3. In DFU Boot mode, my AM261x-LP does not enumerate
      When in DFU boot-mode, the ROM code running USB is responsible for enumeration. This code is in read-only memory and and cannot be changed. The issue observed on some AM261x-LP is due to the R355 resistor. If you face this issue, the recommendation is to completely unmount the R355 resistor from your AM261x-LP board. The same is documented in the Launchpad user guide. By default the resistor is DNI, but it has been observed that completely removing it fixes the issue.

    Regards,
    Shaunak