Two Port USB 3.1 GEN II PCI Express Card

Anyone else ordered a 2 Port USB 3.1 GEN II (10Gbps) PCI Express Card 1 USB Type C and 1 USB Type A Port (USB 3.1 A + C) from AliExpress.com?
2portusb31pciecard
Seem like they have one on sale for $26.99 in 19 hours from now. Ok. Let’s buy one and see what we get – they say that it works with OS X 10.6 and greater.

Update: Here is a first benchmark with a Sandisk 64GB USB3.1 type C flash drive.
orico_pa31-ac_sandisk64gb
I only installed the card and connected the SATA power cable to it. I did not modify anything. Worked out of the box, but this flash drive does not support 10Gbps. To test that I first need a new generation II device, which I do not have at the moment.

Update-2: I found some interesting lines in the log:

kernel: (kernel) 000003.592134 PEGP@00000000: AppleUSBXHCI::createPorts: port 1 unsupported protocol USB 03.01
kernel: (kernel) 000003.615236 PEGP@00000000: AppleUSBXHCI::createPorts: created port 1

kernel: (kernel) 000003.615527 PEGP@00000000: AppleUSBXHCI::createPorts: port 2 unsupported protocol USB 03.01
kernel: (kernel) 000003.615633 PEGP@00000000: AppleUSBXHCI::createPorts: created port 2

kernel: (kernel) 000003.615887 PEGP@00000000: AppleUSBXHCI::createPorts: created port 3
kernel: (kernel) 000003.616282 PEGP@00000000: AppleUSBXHCI::createPorts: created port 4

This is not good. Time for a tiny SSDT. Here is mine:

DefinitionBlock ("ssdt_usb-iMac171.aml", "SSDT", 2, "APPLE ", "Xhci", 0x00001000)
{
    External (_SB_.PCI0.PEG0, DeviceObj)
    External (_SB_.PCI0.PEG0.PEGP, DeviceObj)

    Scope (\_SB.PCI0.PEG0)
    {
        Scope (PEGP)
        {
            Name (_STA, Zero)  // _STA: Status
        }

        Device (XHC2)
        {
            Name (_ADR, Zero)  // _ADR: Address

            Device (RHUB)
            {
                Name (_ADR, Zero)
                Device (SSP1)
                {
                    Name (_ADR, One)
                    Name (_UPC, Package (0x04)
                    {
                        0xFF, 
                        0x09, 
                        Zero, 
                        Zero
                    })

                    Name (_PLD, Package (0x01)
                    {
                        Buffer (0x10)
                        {
                            /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                            /* 0008 */    0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                        }
                    })

                    Method (_DSM, 4, NotSerialized)
                    {
                        If (LEqual (Arg2, Zero))
                        {
                            Return (Buffer (One)
                            {
                                0x03
                            })
                        }
                        Return (Package (0x02)
                        {
                            "UsbCPortNumber", 
                            One
                        })
                    }
                }

                Device (SSP2)
                {
                    Name (_ADR, 0x2)
                    Name (_UPC, Package (0x04)
                    {
                        0xFF,
                        0x09,
                        Zero,
                        Zero
                    })

                    Name (_PLD, Package (0x01)
                    {
                        Buffer (0x10)
                        {
                            /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                            /* 0008 */    0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                        }
                    })

                    Method (_DSM, 4, NotSerialized)
                    {
                        If (LEqual (Arg2, Zero))
                        {
                            Return (Buffer (One)
                            {
                                0x03
                            })
                        }
                        Return (Package (0x02)
                        {
                            "UsbCPortNumber",
                            0x02
                        })
                    }
                }

                Device (HS01)
                {
                    Name (_ADR, 0x03)
                    Name (_UPC, Package (0x04)
                    {
                        0xFF, 
                        0x09, 
                        Zero, 
                        Zero
                    })

                    Name (_PLD, Package (0x01)
                    {
                        Buffer (0x10)
                        {
                            /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
                            /* 0008 */    0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                        }
                    })
                }

                Device (HS02)
                {
                    Name (_ADR, 0x04)
                    Name (_UPC, Package (0x04)
                    {
                        0xFF,
                        0x09,
                        Zero,
                        Zero
                    })

                    Name (_PLD, Package (0x01)
                    {
                        Buffer (0x10)
                        {
                            /* 0000 */    0x81, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
                            /* 0008 */    0x31, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
                        }
                    })
                }
            }
        }
    }
}

I may want/need to change my initial SSDT later on, but at least the errors are gone now.

Also. Note that my card is installed in the first/primary slot (PEG0) of the motherboard, but your card may – most likely – use another slot. In short; don’t forget to change the device name😉

23 thoughts on “Two Port USB 3.1 GEN II PCI Express Card

  1. As far as I know, Mac OS doesn’t support 3.1 gen 2 yet, except in the MacBook Pro 2016 in Sierra. Maybe this uses a third party driver? Don’t third party USB drivers usually have problems? See if you can get the driver from a support site first.

    • Good idea. Let me check that right away. Thanks!

      Update: The ASMedia ASM1142 controller drivers only support Mavericks and Yosemite. AsMedia has no plans to update the driver for El Capitan and/or Sierra.

      • The ASMedia ASM1142 is compliant with Intel eXtensible Host Controller Interface specification revision 1.1, so shouldn’t Apple’s drivers work (with some patches for device matching maybe)? Otherwise, what’s the point of being compliant?

        The chosen driver should support USB 3.1 gen 2 (10 Gbps). That doesn’t include the USB driver in El Capitan which recognizes the XHC of the Alpine Ridge controller, but only supports HighSpeed ports because the SuperSpeed ports report their speed as 10 Gbps which is not supported by that version of the USB driver.

  2. Sierra displays my ASUS USB 3.1 ports, and a my ASUS TB3/USB 3.1 card as USB 3.1 in System Profiler, but the TB does not work, and the USB 3.1 ports run USB 3.0 speeds.

    Perhaps you can work some software magic.

    • I also have the TB3 card on a X99 A II and have not managed to properly show on System profiler nor the 3.1😦 although my board has integrated 3.1 but it only runs at 5Gbs with a 3.1 device.

    • That’s interesting that the USB 3.1 ports run at USB 3.0 speeds. Are you using Apple’s drivers or third party drivers? In El Capitan on my Gigabyte Z170X Gaming 7 motherboard, using Apple’s drivers, the ports will only work at USB 2.0 speeds. I should try Sierra one day…

      Are we sure the MacBook Pro 2016 has support for 10 Gbps USB 3.1 gen 2 speeds? If so, then how does that differ from your hardware? I wonder if your Sierra has the same drivers as the MacBook Pro 2016’s Sierra?

      I wonder if TB3 functionality requires device properties like those of the MacBook Pro 2016 that Pike listed here:
      https://pikeralpha.wordpress.com/2016/11/02/macbookpro131-device-properties/

      Currently in El Capitan, on my motherboard, TB3 devices work if they are plugged in before booting. What’s missing is hot-plug functionality and reporting in System Profiler.

  3. I just picked up a USB-C to USB-A cable (as Apple are having sales on those), but I’m having problems with the Alpine Ridge controller on my motherboard.

    Not detected means: Not showing up in IORegisteryExplorer, Audio in System Settings, and under the controller in System Information.

    Attaching a microphone:
    * before booting up: Microphone not detected.
    * before booting up, then sleep the system: Microphone not detected.
    * after booting up: Microphone detected.
    * after booting up, then sleep the system: Microphone not detected.

    Replugging the microphone after sleep: Microphone detected.

    So it is only detected (and working) if attached AFTER the system is already running.

  4. Regarding your Update-2, are you still talking about the ASMedia card? The log says “AppleUSBXHCI”. Does that mean the card is not using third party drivers? Or does that mean it’s not using an AsMedia chip? I asked about that in a previous comment.

    “unsupported protocol USB 03.01” means USB 3.1 specification according to section 7.2.2 of the eXtensible Host Controller Interface revision 1.1 document. This is information stored in the xHCI Extended Capabilities of the PCI MMIO space of the xHCI device.

    How does the SSDT fix that? Does the Apple driver ignore that issue when it sees a UsbCPortNumber property?

    Also in the xHCI Extended Capabilities is the speed defined as a mantissa and an exponent. In El Capitan, a system log message appears for 10 Gbps ports “AppleUSBXHCIPCI::createPorts: unsupported speed mantissa 10 exponent 3”. Do you not see that message when because you’re using Sierra?

    Does your SSDT fix still allow 10 Gbps speed?

    • Yes. This is the same board that I ordered, and no I did not install any third party drivers. No errors in Sierra with the SSDT, and there is a lot going on in the driver. Reading the values from the _UPC method being one of them.

      I am still waiting for my external exclosures (M2 and normal SSD’s) to arrive. Not that I would have had time to test any Super Speed Plus capable devices, due to the water damage at home that I need to fix first (we had some insane heavy rain in the south of Spain) but I hope to do that as soon as possible.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s