Skip to the content
6 layers237.9 × 80.5 mmXG Mobile Dock, the printed circuit board in 3D

Open source eGPU dock for ROG Ally and ROG Flow

Size
237.9 × 80.5 mm
Copper layers
6
Thickness
1.56 mm
Parts
300
Nets
334
Pads
1,421
Tracks, vias
2,909, 712
Pours
71
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
23 Mar 2024
Updated
2 Nov 2026

Overview

XG Mobile Dock is an open-source printed circuit board by osy, from the osy/XG_Mobile_Station repository on GitHub, published under the CC-BY-4.0 licence. It is a 6-layer board of 237.9 × 80.5 mm with 300 parts on 334 nets, routed with 2,909 tracks and 712 vias.

It is built around the LM3489MMX/NOPB, MX25L8006EM1I-12G and 2N7002W, with the H5VU25U, AON7403 and CSD18532Q5B among its other parts. Its parts include 128 capacitors, 86 resistors, 17 transistors, 17 connectors and 15 diodes. It belongs with the STM32 boards of this library.

Main components

10

README

README.md

XG Mobile Dock

This open source hardware allows you to connect any PCIe card to an ASUS ROG device with the XG Mobile connector.

Board 3D model

The standard variant is a drop-in replacement PCB for the XG Station Pro Thunderbolt 3 eGPU dock. It contains a built in USB 3.1 Gen 2 hub and a USB PD charger.

Board 3D model

The lite variant is a standalone board that is compatible in dimensions with the ADT-UT3G. It requires a standard ATX power supply and passes through the USB to an external port.

Features

  • Up to PCIe 4.0 x8 support for 2021/2022/2023 ROG Flow
  • Up to PCIe 4.0 x4 support for 2023 ROG Ally
  • MCU handling cable detection and LEDs
  • 65W USB PD charger (standard variant)
  • 2 USB-C ports connected to a USB 3.1 Gen 2 hub (standard variant)
  • 300W DC-DC power supply (standard variant)

Getting Started

  1. Build the PCB
  2. Flash the board
  3. Install the software

Flashing Firmware

Lite boards only need to flash STM32 while the standard board requires writing two SPI flash as well.

STM32 MCU
  1. Download XG_Mobile_Dock_MCU.bin from the latest release or build your own.
  2. Download and install ST32CubeProgrammer.
  3. Connect your ST-LINK v2 to your computer. Note if you are using a cheap clone from Amazon or Aliexpress, the pin numbers printed on the device may be incorrect.
  4. Connect the SWDIO, SWCLK, and GND pins to J10 on the board to the ST-LINK v2. Do not connect +3V3. If you are using an official ST-LINK, you will need a jumper wire from VAPP (pin 1) to VDD (pin 19).
  5. Ensure the board is powered on so it can be programmed.
  6. Open ST32CubeProgrammer and go to the "Erasing & programming" page (second icon on the left sidebar).
  7. Browse and select the firmware file.
  8. Check "Run after programming"
  9. Click "Connect" on the right sidebar and then "Start Programming" on the left.
SPI Flash for TI USB PD

We will be using a Raspberry Pi, although most other SBC can also work as well as dedicated SPI flashers.

  1. Enable the SPI interface on the Raspberry Pi.
  2. Connect GND (Ground), SS (SPI0 CE0), CLK (SPI0 SCLK), MISO (SPI0 MISO), and MOSI (SPI0 MOSI) on J9 to the Raspberry Pi.
  3. Open a shell to the Raspberry Pi and install Flashrom: sudo apt-get install flashrom
  4. Download XG_Mobile_Dock_Charger.bin from the latest release or build your own.
  5. Flash the firmware: sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -w XG_Mobile_Dock_Charger.bin
SPI Flash for VIA USB Hub

We will be using a Raspberry Pi, although most other SBC can also work as well as dedicated SPI flashers.

  1. Enable the SPI interface on the Raspberry Pi.
  2. Connect GND (Ground), SS (SPI0 CE0), CLK (SPI0 SCLK), MISO (SPI0 MISO), and MOSI (SPI0 MOSI) on J13 to the Raspberry Pi. Note the order of the pins is different from J9.
  3. Open a shell to the Raspberry Pi and install Flashrom if it is not already installed: sudo apt-get install flashrom
  4. Download VL822_Q7_9043_Phantom_20220616.bin from the latest release.
  5. Flash the firmware: sudo flashrom -p linux_spi:dev=/dev/spidev0.0,spispeed=1000 -w VL822_Q7_9043_Phantom_20220616.bin

Install XGMDriver

XGMDriver tricks ARMORY CRATE software into identifying the custom dock as an official XG Mobile device. Once installed, it should work even if ARMORY CRATE software is updated. You can check out the source code here.

  1. Download XGMDriverSetup.exe from the latest release.
  2. Run the installer making sure to correctly select AMD or NVIDIA depending on the vendor of the GPU you are installing.
  3. If you need to swap between AMD and NVIDIA, uninstall from Control Panel or by running the installer again. Then you can re-install and select the right option.

Troubleshooting

Error 43 or no video output on NVIDIA GPUs

This is a well known issue with NVIDIA eGPUs. Once the eGPU is installed along with the correct drivers, you will need to install this script.

PCIe is only getting 3.0 speeds after hot plugging

You need to restart your device. For some reason, hot plugging results in 3.0 speeds.

Unable to get 4.0 speeds

If you observe any of the following:

  • GPU-Z changes between 4.0 and lower versions when under load
  • You observe a lot of stuttering or < 10 FPS in 1% lows
  • Windows behaves extremely slowly (moving the mouse cursor will take > 1 sec to respond)
  • Event viewer for System shows multiple times: "WHEA-Logger Event ID:17 - A corrected hardware error has occurred"

Then the device is having trouble sustaining PCIe 4.0 speeds. This can be caused by any combination of the following issues:

  1. The board was not manufactured properly with impedance matching or the high speed connectors were not properly soldered. Verify that the boards were manufactured with the correct specifications and test multiple boards.
  2. The GPU is malfunctioning or is not mounted correctly. Make sure you can obtain PCIe 4.0 speeds on a desktop PC.
  3. The XGM cable is not connected to the board correctly. Make sure the two 40P connectors are tight and the metal bar is locked over the connector to prevent unintentional loosening. Make sure the shielding screw is tightly screwed to the screw terminal next to the connector. Make sure the cable isn't twisted or bent any more than it needs to be. If the XGM cable came coiled up, try to carefully straighten it.
  4. The XGM cable is not manufactured correctly. The official XGM device only supports PCIe 3.0 speeds so the cable is only rated for PCIe 3.0. We found that some cables are easier to get 4.0 speeds working than other cables so there is some manufacturing variance.

You can run FurMark for a long duration and observe the GPU load to check that it is able to maintain 4.0 speeds. If the GPU is constantly trying to switch speeds, you will observe large FPS drops and large dips in the GPU usage percentage. You can also use CUDA-Z to check the access speeds while under load.

If you cannot maintain PCIe 4.0 speeds, you can always do a hot-unplug and hot-plug to force it to run in PCIe 3.0 mode.

No popup when XGM is connected

Sometimes, the device will not be detected and you can flip the lock switch off and on again to force the software to re-detect the device.

"It appears that your XG Mobile is not properly connected..."

If you get a pop-up saying XG Mobile is not properly connected, make sure XGMDriver is installed. If this is still an issue with XGMDriver installed, there is likely a connection issue with the cable.

ASUS Driver install popup on reboot

Re-install XGMDriver to inhibit the ASUS driver popup.

Lite: USB is not detected

The lite board does not have USB orientation detection. Try flipping the USB-C cable upside down and try again.

References

Knowledge base for all things XGM gathered from reverse engineering the hardware and software.

Related Projects

Parts

300
QtyValueFootprintReferences
410.1µFCapacitor_SMD:C_0402_1005MetricC10, C11, C12, C13, C14, C16, C17, C20, C27, C28, C102, C105, C111, C112, C113, C114 +25
1410kResistor_SMD:R_0402_1005MetricR2, R7, R8, R21, R22, R23, R33, R34, R47, R48, R61, R63, R77, R85
144.7kResistor_SMD:R_0402_1005MetricR17, R18, R19, R20, R32, R35, R37, R38, R39, R40, R41, R42, R45, R46
121000pFCapacitor_SMD:C_0402_1005MetricC6, C9, C46, C47, C60, C64, C87, C88, C97, C98, C106, C107
10100kResistor_SMD:R_0402_1005MetricR24, R25, R26, R27, R43, R52, R54, R68, R69, R86
1010µFCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC52, C53, C54, C55, C56, C90, C119, C121, C123, C125
822µFCapacitor_SMD:C_0805_2012MetricC3, C4, C39, C40, C94, C95, C103, C104
847µFCapacitor_SMD:C_1210_3225Metric_Pad1.33x2.70mm_HandSolderC75, C76, C77, C78, C120, C122, C124, C126
847µFCapacitor_Tantalum_SMD:CP_EIA-7343-43_Kemet-XC1, C2, C49, C50, C100, C101, C109, C110
7TestPoint_SmallTestPoint:TestPoint_Pad_D1.0mmTP2, TP3, TP4, TP5, TP6, TP11, TP12
6100pFCapacitor_SMD:C_0402_1005MetricC8, C48, C57, C83, C99, C108
62N7002W2N7002W:SOT-323-3_L2.0-W1.3-P1.30-LS2.1-BRQ5, Q6, Q7, Q14, Q15, Q17
6H5VU25UAZ1045-04F:AZ1045-04FD2, D3, D4, D5, D6, D7
6~XG_Mobile:Hole_200milH1, H2, H3, H4, H5, H6
50.01µFCapacitor_SMD:C_0402_1005MetricC15, C19, C32, C59, C84
5100Resistor_SMD:R_0402_1005MetricR58, R59, R71, R72, R75
40.1μFCapacitor_SMD:C_0402_1005MetricC37, C38, C41, C42
410µHInductor_SMD:L_Abracon_ASPI-0630LRL1, L2, L3, L4
41µFCapacitor_SMD:C_0402_1005MetricC62, C85, C116, C118
422kResistor_SMD:R_0402_1005MetricR80, R81, R82, R83
4270Resistor_SMD:R_0603_1608MetricR6, R9, R14, R31
43.3kResistor_SMD:R_0402_1005MetricR10, R12, R49, R66
447kResistor_SMD:R_0402_1005MetricR1, R3, R30, R74
4AON7403AON7403:TRANS_AON7403Q1, Q2, Q3, Q4
4CSD18532Q5BPackage_TO_SOT_SMD:TDSON-8-1Q9, Q10, Q12, Q13
4LM3489MMX/NOPBLM3489QMM-NOPB:LM3489QMM-NOPBU1, U6, U8, U11
4PDS1040L-13Diode_SMD:D_PowerDI-5D1, D8, D9, D10
4~Diode_SMD:D_SOD-123FD11, D12, D13, D14
310µFCapacitor_SMD:C_0402_1005MetricC22, C23, C26
31kResistor_SMD:R_0402_1005MetricR53, R65, R84
333kResistor_SMD:R_0402_1005MetricR15, R55, R70
3470µFCapacitor_THT:CP_Radial_D10.0mm_P5.00mmC80, C127, C130
20.005Resistor_SMD:R_1210_3225Metric_Pad1.30x2.65mm_HandSolderR56, R73
20.1µFCapacitor_SMD:C_0603_1608MetricC128, C129
210µFCapacitor_SMD:C_0603_1608MetricC24, C25
210µHInductor_SMD:L_Vishay_IHLP-6767L5, L6
212kResistor_SMD:R_0402_1005MetricR28, R79
218pFCapacitor_SMD:C_0603_1608MetricC91, C92
21µFCapacitor_SMD:C_0603_1608MetricC21, C35
220455-040E-7620455-040E-76:20455-040E-76J2, J3
222μFCapacitor_SMD:C_0603_1608MetricC44, C45
224kResistor_SMD:R_0402_1005MetricR51, R64
23.9kResistor_SMD:R_0402_1005MetricR16, R29
24.7µFCapacitor_SMD:C_0603_1608MetricC63, C86
249.9Resistor_SMD:R_0402_1005MetricR57, R60
2680Resistor_SMD:R_0402_1005MetricR50, R62
27.5kResistor_SMD:R_0402_1005MetricR44, R67
2CSD18563Q5APackage_TO_SOT_SMD:TDSON-8-1Q8, Q11
2Conn_02x04_Top_Bottom0455860005:CON_455860005_MOLJ14, J15
2Conn_02x10_Odd_Even5-5530843-0:5-5530843-0J7, J8
2LM5117PMHX/NOPBLM5117PMH:PWP0020A_NU10, U13
2MX25L8006EM1I-12GMX25L8006EM1I-12G:MX25L8006EM1I-12GU3, U9
2USB_C_ReceptacleUSB-C-SMD_TYPE-C-24P-QT:USB-C-SMD_TYPE-C-24P-QTJ5, J6
2~470531000:CONN_SD-47053-001_H10p00_MOLJ18, J19
11.2kResistor_SMD:R_0402_1005MetricR11
110nFCapacitor_SMD:C_0402_1005MetricC115
11N4007Diode_SMD:D_SOD-123FD15
12.4kResistor_SMD:R_0402_1005MetricR36
120kResistor_SMD:R_0402_1005MetricR78
1220pFCapacitor_SMD:C_0402_1005MetricC18
125MHzCrystal:Crystal_SMD_3225-4Pin_3.2x2.5mmY1
13-2362375-43113-113T:CONN-SMD_164P-P1.00-V_3133J4
1330Resistor_SMD:R_0402_1005MetricR76
14.7µFCapacitor_SMD:C_0402_1005MetricC117
14.7μFCapacitor_SMD:C_0603_1608MetricC36
149.9kResistor_SMD:R_0402_1005MetricR4
15-1775443-85-1775443-8:5-1775443-8J1
168kResistor_SMD:R_0402_1005MetricR5
18.2kResistor_SMD:R_0402_1005MetricR13
18730KEYSTONE_8730:KEYSTONE_8730J17
1AO3401APackage_TO_SOT_SMD:SOT-23Q16
1AP7361-10ER-13AP7361-10ER-13:SOT230P700X180-4NU5
1Conn_01x05Connector_PinHeader_2.54mm:PinHeader_1x05_P2.54mm_VerticalJ9
1Conn_01x06Connector_PinHeader_2.54mm:PinHeader_1x06_P2.54mm_VerticalJ13
1I2C1Connector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ12
1NCP15WF104F03RCResistor_SMD:R_0402_1005MetricTH1
1STM32F030C8TxPackage_QFP:LQFP-48_7x7mm_P0.5mmU12
1SWDConnector_PinHeader_2.54mm:PinHeader_1x04_P2.54mm_VerticalJ10
1SW_PushButton_Switch_SMD:SW_SPST_SKQG_WithStemSW1
1TPS2003CDRCRTPS2003CDRCR:DRC10_1P65X2P40_TEXU7

The 296 most common of 300 parts.

More from osy/XG_Mobile_Station

4
  • 4 layers50 × 50 mmUSB Hub Test, the printed circuit board in 3D

    USB Hub Test

    osy/XG_Mobile_Station

    Open source eGPU dock for ROG Ally and ROG Flow

    85 parts712CC-BY-4.0
  • 4 layers220 × 65 mmXG Mobile Dock Lite, the printed circuit board in 3D

    XG Mobile Dock Lite

    osy/XG_Mobile_Station

    Open source eGPU dock for ROG Ally and ROG Flow

    60 parts712CC-BY-4.0
  • 2 layers54.3 × 91 mmXG Station Power, the printed circuit board in 3D

    XG Station Power

    osy/XG_Mobile_Station

    Open source eGPU dock for ROG Ally and ROG Flow

    11 parts712CC-BY-4.0
  • 2 layers34.7 × 20 mmXG Station Power MSI, the printed circuit board in 3D

    XG Station Power MSI

    osy/XG_Mobile_Station

    Open source eGPU dock for ROG Ally and ROG Flow

    4 parts712CC-BY-4.0

Similar boards

  • 2 layers46.7 × 87.5 mmServo motor, the printed circuit board in 3D

    Servo motor

    tomrodinger/servomotor

    Open-source NEMA-17 integrated servomotor (motor + closed-loop driver + controller + encoder). RS-485, Python/Arduino libraries, MCP server for AI control. Hardware, firmware and software.

    112 parts17MIT
  • 6 layers70 × 50 mmThunderbolt pcie adapter, the printed circuit board in 3D

    Thunderbolt pcie adapter

    antmicro/thunderbolt-pcie-adapter

    This project contains open hardware design files for an adapter board wrapping 4-lane (i.e. 4x) PCIe Gen 3.0 devices into a Thunderbolt 3 uplink. It is based on the Intel/JHL6340SLLSQ Thunderbolt controller.

    272 parts82Apache-2.0
  • 4 layers100 × 80 mmPd brick, the printed circuit board in 3D

    Pd brick

    enkhbold470/pd-brick

    USB-C Power Delivery bench supply: STUSB4500 sink, LM5176 buck-boost, INA228 monitor, 1.2-22 V set over I2C by an ESP32-S3. 4-layer KiCad 10 board.

    120 partsCERN-OHL-S-2.0
  • 4 layers100 × 80 mmPhase1-module, the printed circuit board in 3D

    Phase1-module

    udaravima/Lab_Bench

    A modular, rack-style DC power supply: up to 8 hot-pluggable 600 W buck modules on a shared DC input bus, coordinated by a central manager over CAN.

    144 parts1GPL-3.0
  • 2 layers99.1 × 76.2 mmVetrnik control, the printed circuit board in 3D

    Vetrnik control

    ondras12345/vetrnik

    Electronics for heating water with power from a 2 kW wind turbine

    87 parts
  • 6 layers90.1 × 135 mmHandheld, the printed circuit board in 3D

    Handheld

    gamebub/gamebub-pcb

    PCB design files for the Game Bub project

    386 parts31CERN-OHL-S-2.0
  • 4 layers69.6 × 56.6 mmEDP adapter, the printed circuit board in 3D

    EDP adapter

    django-wardlow/diy-laptop

    A diy 15" 2 in 1 based around the framework 13 motherboard

    22 parts7
  • 4 layers50 × 30 mmMct2 disp, the printed circuit board in 3D

    Mct2 disp

    ctcl-bregis/mct2

    MediaCow Touch 2 tablet computer project

    17 parts1

Questions

How big is the XG Mobile Dock PCB?

It measures 237.9 × 80.5 mm and has 6 copper layers, 1.56 mm thick.

What parts does the XG Mobile Dock use?

300 parts, built around the LM3489MMX/NOPB, MX25L8006EM1I-12G, 2N7002W and H5VU25U. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the XG Mobile Dock KiCad files?

From the osy/XG_Mobile_Station repository on GitHub, at the commit this page was made from: the board is XG_Mobile_Dock.kicad_pcb and its schematic MCU.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the XG Mobile Dock design in my own project?

Its repository publishes it under the CC-BY-4.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).