Make a computer act as a virtual USB device for other equipments

You would need to add a USB Device/Peripheral controller to the computer, as opposed to the USB Host Controller they tend to come with.

Something like this: https://www.maximintegrated.com/en/products/interface/controllers-expanders/MAX3420E.html

Unfortunately, you'd have to find a way to wire it onto your motherboard. Technically, it can be done. Practically, you'd have to redesign the motherboard to include it. You might be lucky enough to find an SPI or I2C bus exposed somewhere on your motherboard to allow you to add it, but they're usually wired directly into whatever they're being used for unless you're using a dev board or single-board computer with exposed GPIO and other ports such as a Raspberry Pi.

The other option would be a USB On-the-Go Controller. Motherboards designed for embedded and portable devices tend to have a USB OTG (On-the-go) contoller, which can function as either a Host or Device controller. For example, the aforementioned Raspberry Pi has an On-the-Go Controller, but on all models except the Pi Zero that gets rewired to a host port or an onboard USB hub denying the use of USB device functionality. The BeagleBone Black has an OTG port.

That's not all though - once you've got the hardware, you'd also need the software. Linux has some useful kernel USB Gadget drivers ("USB gadget" is another term for USB peripheral/device) such as g_serial and g_ethernet that allow you to plug your device into another computer and be visible as a serial or ethernet-over-USB device (there are others for exposing a device as mass storage, which allow you to use a file as a block device and expose the computer as a mass storage gadget). The BeagleBone Black tends to come with this enabled by default, so you can simply plug it into your PC over USB and see it as a networked device - and I believe it also appears as a mass storage device by using a composite driver (which allows it to appear as multiple USB device types over a single connection.) The Pi Zero can use these, but does not by default. For Windows or other OSes, you'd probably have to write that device driver yourself.

So, theoretically, you can do it. You can tear down your desktop PC, try and find an unused compatible bus on the motherboard somewhere (most likely some unused pins on a controller IC), or a way to extend an internal I2C or SPI bus, or something you can tear out and replace, and solder a USB OTG or device controller chip onto it. Then you can install Linux and use a gadget driver, or write your own for another OS. Practically, unless you're a top-notch electronics engineer, you're not going to be able to do it. At least, not until someone comes out with that elusive adapter with a device or OTG port on it that plugs into a USB port (theoretically, that could be done with a microcontroller such an Arduino wired to a pair of USB device controller ICs), and writes the drivers to run it.


USB is dissymmetric: one side is a host, the other side is a peripheral device. You can't make a peripheral device act as a host or vice versa. It is possible for a USB port to be able to act as either side; this is called USB on-the-go and is present on some mobile phones and tablets. The ports are physically device-type ports, not host-type ports. I've never seen a PC with a device port. This requires electronics on the controller, it isn't enough to make a cable that fits on both ends.

So no, you won't be able to make a PC into a USB device.

If you want to use a computer as a USB storage device, you can use a mobile phone or tablet with a USB connection instead of using a PC.


I do wish people would stop repeating the erroneous claim that all personal computers lack the hardware to act as a USB device/slave/gadget/whatever. I can prove this is not the case. My first example of this is that all Apple Mac computers with a USB-C port have the capability of going into a USB-C slave mode. This is called "Target Disk Mode", and it is documented here: https://support.apple.com/en-us/HT201462

This is a function of temporarily turning your $2000 laptop into a $200 USB-C drive. Why do this? So that one can repair the drive on a non-booting Mac for one. How does this work? It works because Apple used a USB-C chip in their computers that is capable of acting as a USB slave/device/whatever, and installed some firmware to allow this function. This chip is not unique to Apple computers, this is also used by a number of other computer manufacturers.

There's more evidence to back up that most every laptop with USB-C ports also have the hardware needed to act as a USB slave/device. Take a laptop that uses USB-C for power and charging, get a USB-C to USB-C, get another computer with a USB-C port that is running Windows. Now, connect the laptop to the Windows computer with the USB-C cable and check the Device Manager for new devices. If the laptop is drawing power from the Windows computer then you should see in the Device Manager the laptop show as a "USB billboard device" in the list of devices. This is the laptop acting as a USB device. It has to appear as a device to a USB Power Delivery capable host, such as a USB-C power brick, to draw more than 5 watts of power. There's other ways of checking this so adjust the process for your preferred operating system or whatever.

Why don't more operating system publishers use this capability to do more than just charge batteries in laptops? That's a good question. That's a question I've been looking to answer for a long time.

There are some people working on expanding the capability of Linux systems to act as USB devices. It works right now for a wide range of USB virtual devices but it's not trivial to setup. I'm hoping that someday soon this capability becomes better supported, and is expected by users to work simply, easily, and with the high performance we expect from USB 3.x devices.

The hardware is already there for computers to act as a USB device in most every computer with USB-C ports, we just need more people working on writing the software to make this something the average user (or even slightly above average user) can set-up and use.

Tags:

Usb