Skip to main content
Associate II
May 7, 2026
Question

USB is not recognized by PC when PIMA USBX disables UX_PIMA_WITH_MTP_SUPPORT

  • May 7, 2026
  • 3 replies
  • 183 views

I am developing a custom embedded device that uses PIMA with USBX in order to access the SD card contents of my PCB from a PC through USB.

When UX_PIMA_WITH_MTP_SUPPORT is enabled, the device is correctly detected by Windows and communication works properly.

However, in order to correctly represent a hierarchical folder structure in Windows Explorer using MTP, I would need support for command 0x9805 (GetObjPropList, CMD 00000043). As far as I can see, USBX does not implement this command.

To avoid implementing the full MTP property system myself, I wanted to use the more generic PIMA behavior instead, where the host requests ObjectHandles each time the user enters a folder, similar to how old digital cameras behaved.

The issue is that when I disable UX_PIMA_WITH_MTP_SUPPORT, the PC no longer even recognizes that a USB device is connected. If I enable the macro again, everything works correctly.

So my question is:
Is disabling UX_PIMA_WITH_MTP_SUPPORT expected to completely break USB enumeration on Windows? Or is there some additional descriptor/class configuration required when using the generic PIMA mode without MTP support?

3 replies

esxuAuthor
Associate II
May 7, 2026

I’ve been investigating this topic further, and I wanted to clarify my previous assumption regarding GetObjPropList (0x9805).

At first, I thought this command would be necessary to correctly represent a hierarchical folder structure in Windows Explorer when using MTP. That was the reason I mentioned it. However, after digging deeper into the MTP/PIMA behavior and how USBX implements the class, I now realize I was most likely wrong about that assumption.

It seems that GetObjPropList is part of the more advanced MTP object property system, and not strictly required for basic hierarchical navigation, which is more tied to how object handles and associations are managed rather than property enumeration alone.

That said, I still have the main issue unresolved:

When I disable UX_PIMA_WITH_MTP_SUPPORT, the device stops being recognized by Windows altogether. The USB enumeration fails completely, even though I expected a more “basic PIMA” mode to still expose the device and allow object-based navigation.

When the macro is enabled again, everything works correctly and the device is properly detected and accessible.

Also, this is my first time working with MTP, so it is very likely that I am misunderstanding parts of the protocol or mixing concepts that don’t fully align. If some of my statements don’t make perfect sense from an expert perspective, that would probably be the reason.

So my main question remains:

Is this behavior expected? In other words, does disabling UX_PIMA_WITH_MTP_SUPPORT imply that the MTP class layer is entirely removed (including required descriptors and handlers for Windows to recognize the device)?

Or is there an additional configuration step required in USBX to properly expose a non-MTP PIMA device (for example, different class/subclass definitions or mandatory callbacks) that I might be missing?

ST Technical Moderator
May 8, 2026

Hi @esxu 

Thank you for the question

An internal ticket is submitted to dedicated team for further clarification regarding PTP only support on Windows.  For internal tracking CDM0062495.

To give better visibility on the answered topics, please click on "Best answer" on the reply which solved your issue or answered your question.Best regards,FBL
ST Technical Moderator
September 7, 2026

Hi ​@esxu 

Thank you for the detailed report and for clarifying the intended use case.

Based on our review, disabling UX_PIMA_WITH_MTP_SUPPORT is not expected to break low-level USB enumeration by itself. In other words, the device should still be able to enumerate on the USB bus if the descriptors and class configuration are valid.

 

> What changes when UX_PIMA_WITH_MTP_SUPPORT is disabled?

With MTP enabled, Windows typically treats the device as a portable media device, which is the path used for Windows Explorer integration with generic files and folders.

With MTP support disabled, the device falls back to pure PIMA/PTP behavior. In that mode, Windows does not handle the device as a generic file browser. Instead, it is expected to recognize it as a Still Image / Digital Camera style device, provided the USB interface descriptors are consistent with PTP.

For a pure PTP configuration, the interface should use:

  • Class: 0x06

  • Still Image Subclass: 0x01

  • Protocol: 0x01

Important limitation of PTP only mode on Windows

Even when PTP-only is correctly recognized by Windows, this mode is generally intended for camera-style object transfer, typically image/video oriented workflows.

I assume, on Windows, for the specific goal of:

  • exposing an SD card

  • browsing generic files

  • navigating folders in Windows Explorer ..

MTP support is effectively required.

Pure PTP may still be usable in some Windows imaging workflows, but it should not be considered equivalent to MTP based Explorer browsing.

About your observation that the PC no longer recognizes the device, the behavior is not expected as a USBX implementation from disabling UX_PIMA_WITH_MTP_SUPPORT.

If the device is no longer seen by Windows at all when the macro is disabled, the most likely causes are configuration related, for example:

  • interface descriptors not matching pure PTP expectations

  • mismatch between the selected USBX mode and the USB descriptor set used by the application

  • Windows no longer binding the function to a visible device class, even though USB bus enumeration still occurs

To determine whether this is, a true USB enumeration issue, or Windows class/driver binding issue, I recommend using a USB analyzer to check the traffic.

To give better visibility on the answered topics, please click on "Best answer" on the reply which solved your issue or answered your question.Best regards,FBL