How to power any 802.3bt Wi-Fi access point using standard USB-C battery pack

I’ve been on a mission to fully power my Wi-Fi demo kit using a standard USB-C battery pack. That way I don’t need to worry about power sockets and power cables with the right plugs. I can temporarily install the AP at the exact location where I want it, power up my AP anywhere, and get work done while I am travelling.

With battery pack detached from the power injector, I can replace the battery back in case I need longer battery life. And when the battery pack loses capacity in few years, I can just swap the battery pack out. If I spot an AC 230 V socket nearby, I can just use a USB-C GaN charger instead and use the battery to fast-charge my phone or laptop.

“So what are your requirements?” you might ask. The solution should power a high-end access point using UPOE, 802.3bt, PoE++, PoE+++ (pick your favourite name) and allow it to negotiate up to 10 Gbps multigigabit Ethernet on its uplink. And I will take 4 hours of battery life, please.

Let me share the solution with you first. If you are interested in the (rather long, expensive and painful) journey, scroll all the way down.

It works! Here is how I use it.

Yes, yay, hurrah, sláva! It works great and does exactly what I wanted it to do! I guess you can feel my level of excitement 😊

I’ve been testing several outdoor point-to-point links. While I can power the infrastructure side AP by a PoE capable switch, I can now easily use a USB-C battery to power the remote C9124AXD AP.

Battery-powered C9124AXD outdoor access point

Let’s enable site survey mode on this large public venue CW9179F access point for a couple of colleagues. Shout-out to you, Olu and Pete. I put a quick guide together on how to enable site survey mode. Make sure that your site survey AP is only used temporarily by a trained engineer and clearly labelled as site survey equipment. It can’t be used in production by any clients. From compliance perspective, the 6 GHz LPI AP can’t be battery-powered.

USB-C battery pack delivering UPOE power to Cisco CW9179F AP

When I was measuring difference between dipole and directional patch antennas connected to CW9163E, this allowed me to easily mount the AP wherever I needed it. No strings attached. Yes, I did use a longer cable and a tripod.

CW9163E with dipoles

The CW9176I happily ran for about 3.5 hours. No reliance on 230 V sockets. Keep in mind that LPI restrictions apply, 6 GHz capable LPI AP can’t be powered by a battery.

Mobile Wi-Fi 7 CW9176I AP running in full power mode

Now, how do you join an AP to Dashboard and perform few quick configurations? You plug it in your switch, right? But what if that switch doesn’t support PoE (yes, those still exist)? I only had a small battery pack in my bag, but it still worked like a charm and gave me 1 hour of battery life.

CW9179F powered by 802.3bt using smaller USB-C battery pack

But how? Where did you buy this thing?

I tested many power injectors. Scroll all the way down if you are interested in the journey. This is the best solution that I could find for me.

Let me introduce you to Phihong POE90D-1BTP-R power injector. It takes 20-55 Volts DC on the 3-pin terminal block input and provides 802.3bt 90 W on its PoE output.

Phihong POE90D-1BTP-R 802.3bt 90W 2.5 GbE power injector

The battery packs I use are Anker A1336 (20,000 mAh). Potentially Anker 533 A1256 (5,000 mAh), but it has significantly lower capacity, and you would be pushing it to its limits with regards to power.

Always make sure that the battery pack can comfortably provide more power than the AP requires! They important part is that your battery must support 20 V on the USB-C output. Not all of them do. Check the data sheet.

Anker A1336 battery pack powering Phihong injector

Negotiation of 20 V with the battery pack is job for a USB Power Delivery (PD) trigger cable. It has a built-in chip inside the USB-C connector which tells the battery pack to supply 20 Volts.

20 cm USB PD trigger cable programmed to request 20 V

Wi-Fi is a discipline of engineering and art. So, here comes the art part! Let’s trim the trigger cable to the right length. We will keep the part with USB-C connector and keep the barrel jack with a bit of cable for another project.

Let’s terminate it onto the 3-pin terminal block of the injector. Take a deep breath. Double-check polarity to avoid any magic smoke escape moments.

USB PD trigger cable connected to injector

Finally, why don’t we make the connection aesthetically pleasing and permanent using about half sachet of black Sugru.

Cable connected to terminal block and protected by Sugru

That’s it.

All I need to power any 802.3bt access point by a USB-C battery pack

Tested access points

I am using about 2 meters of twisted pair CAT6 cable in total.

Outdoor C9124AXD and CW9163E APs worked absolutely fine.

To test backwards compatibility, Catalyst C9105AXI worked great too and used its 1 Gbps uplink.

The only valid reason for powering Wi-Fi 7 LPI APs is for site survey purposes as I mentioned above:

  • Cisco’s CW9176I access point as well as CW9179F large venue AP both negotiate 10 Gbps Ethernet connection. If you need a significantly longer twisted pair cable, you might want to test it first, since this injector is officially certified for 2.5 Gbps Ethernet.
  • Powering CW9172H wall plate access point was no problem at all. Ethernet port ran at 2.5 Gbps and the PoE Out port of the access point happily powered my WLAN Pi M4+.
  • Likewise, CW9172I access point negotiated at 2.5 Gbps and CW9174I ran at 5 Gbps.

If you tested any other models and vendors, share them with us in the comments below.

Incompatibility with Meraki MS220 switch

Depending on your use case, you will likely never run into this and your injector “DATA IN” uplink port will have no cable connected in it.

When I connected the 802.3bt injector uplink to MS220 switch, many of the APs switched to 802.3at “Medium Power” mode. I suspect there is something going on with LLDP negotiation between the switch and the AP. The AP doesn’t figure out that it’s actually powered by an injector and it ends up defaulting to Medium Power 802.at mode.

Most APs fall back to 802.3at mode when connected to MS220

When I connected the injector uplink to a different switch like C9200CX, the access points drew full 802.3bt power from the injector.

Fully powered by injector, injector uplink connected to C9200CX

AC vs DC power injector

Here is side-by-side comparison of Cisco’s official 802.3bt 60 W power injector CW-INJ-8 with AC input to my 802.3bt 90 W battery-powered DC injector. Power socket not shown in the photo 🔌 There wasn’t any socket where I took this photo! 🤷🏻‍♂️

AC power injector CW-INJ-8 vs Phihong battery-powered injector

There are purpose-built site survey PoE battery packs available from the great people at AccelTex and Ventev.

Use whatever works best for you or your customer.

The journey

This is one of the very few projects when I’ve nearly given up. I purchased and tested all of these injectors hoping that the first, second, third, will hopefully work and I kept fast-failing again and again.

“Success is not final, failure is not fatal: it is the courage to continue that counts.” Attributed to Winston Churchill.

Yet another night in the office

Few hundred pounds later, I thought I was done. Nothing seemed to work the way I wanted it to.

802.3bt and 802.3at PoE power injectors

The industrial Procet injector on the left only provided 802.3at power although it was supposed to support 802.3bt. Their documentation was also extremely poor with conflicting information about input DC power range, they were heavy and not necessarily of the best form factor.

Few weeks later I ordered the Planet industrial injector but it only provided 802.3bt power to high-end CW9176 and CW9179F access points and failed to power CW9172I and CW912H APs completely.

I found this Phihong injector data sheet online but it was out of stock in the UK. I just couldn’t win! It was about time to get out of this rabbit hole and see what was the best way to deal with all of this. I contacted the manufacturer, who kindly helped me find a nice local distributor Heading Power Limited who had one in stock and the rest of the story you’ve just read above. I just had to figure out how to power it and connect everything as nearly as possible. Happy days!!!

To paint the full picture, the 2 injectors on the right were my shot in the dark into the 802.3at (the 30-Watt standard) world. I love the right-most PoE Texas 802.3at injector so much that it found its place in my every day bag. If you are looking for a light and compact injector and don’t mind 802.3at, read more about it here (I will add link as soon as I publish it).

The safety and regulatory part

You are all smart people but let’s get the safety warning out of the way first.

Since we are modifying electrical equipment and dealing with batteries, please note that you are performing everything described in this blog post at your own risk. None of the hardware manufacturers and other parties including myself can’t be held responsible in case of any damage or harm caused.

Use caution when it comes to 6 GHz. Lower Power Indoor (LPI) 6 GHz access points shall not be battery-powered. Refer to EN 303 687 and FCC KDB 987594.

Wi-Fi capabilities of all iPhone 17 models and Apple N1 wireless chip

Apple has done a excellent job at seamlessly migrating iPhones 17 from Broadcom to its own N1 wireless networking chip. It packs 2×2 Wi‑Fi 7 (based on 802.11be standard), Bluetooth 6 and Thread. Most users have probably not even noticed, have you?

Executing such a significant change takes some serious efforts, so I asked myself:

  • What has changed? Do iPhones with N1 chip behave differently from iPhones using Broadcom?
  • Are all the enterprise features supported?
  • Do Wi-Fi capabilities of standard iPhone 17 model differ from iPhone 17 Pro Max or iPhone Air?
  • From over-the-air captures, can I tell if an iPhone uses Broadcom or N1 Wi-Fi chip?
  • Does power saving work the same way?

Let’s see how many of these questions we can answer.

Consistent Wi-Fi capabilities across all iPhone 17 models

All iPhone 17 models use the same Apple N1 chip. Their Wi-Fi capabilities are fully consistent between iPhone 17, iPhone Air, iPhone 17 Pro, and iPhone 17 Pro Max. But how can I be so sure?

I “profiled” all 4 of the new iPhones on each of the 3 Wi-Fi bands.

iPhone 17, Air, 17 Pro, and 17 Pro Max

WLAN Pi Profiler

Profiler is a Python app that runs on WLAN Pi and its Linux-based operating system. It uses a standard client Wi-Fi adapter, simulates an access point, and it broadcast beacon frames. Profiler pretends to be “the most capable access point” supporting all features and amendments.

Profiler running on WLAN Pi R4

As soon as a Wi-Fi client (think iPhone) attempts to join the Profiler SSID, Profiler captures all client’s Wi-Fi capabilities.

iPhone 17 Pro Max ready to connect to Profiler SSID

Finally, Profiler generates a client capability report – coming up in the next section. Beyond that, it also saves packet capture of the Association Request sent by the client device for future analysis.

Josh is the engineer, developer, and bright mind behind Profiler. Send him some kudos if you want the tool useful.

The 2.4 GHz band

With Profiler running on WLAN Pi on channel 11, I captured these Apple N1 capabilities. To remind us, all the iPhone 17 generation phones use the same N1 chip, and report the same Wi-Fi capabilities.

No surprises there, which is great! The usual amendments like 802.11k neighbour report, 802.11r Fast Transition, 802.11v, or 802.11w Protected Management Frames are supported.

The adapter runs in 2×2 MIMO mode, and reports maximum transmit power up to 25 dBm. Note that it indicates support for 6 GHz.

Apple N1 Wi-Fi capabilities in 2.4 GHz band

To put what we have captured for N1 into perspective, iPhone 15 Pro supports up to 21 dBm (not that you want it to run at maximum power).

iPhone 15 Pro Wi-Fi capabilities in 2.4 GHz band

The 5 GHz band

Before we dive into 5 GHz and 6 GHz, I should say that I am in the UK, my Profiler uses GB country code, and the iPhone is aware of its location too. Supported channels and transmit power levels will vary depending on which part of the world you are in.

This time we start Profiler on channel 36 and attempt to connect the iPhone to the Profiler SSID. Few seconds later we get a 5 GHz band report.

Apple N1 Wi-Fi capabilities in 5 GHz band

Here is a quick comparison to iPhone 15 Pro using the same channel. How many differences have you noticed?

iPhone 15 Pro Wi-Fi capabilities in 5 GHz band

The 6 GHz band

Since Profiler doesn’t support 6 GHz AP mode, for this test I brought my own Wi-Fi 7 access point.

I used Profiler to capture iPhone’s association request to this AP using this command sudo profiler –noAP -f 5975. What 6 GHz channel is that? Can you tell by the centre frequency? I wrote a little tool called wifichannel for conversion between frequency and channel number.

N1 supports 6 GHz channel width up to 160 MHz (not that you want to use 160 MHz and let alone 320 MHz in enterprise).

Apple N1 Wi-Fi capabilities in 6 GHz band

Let’s compare N1 profile to iPhone 15 Pro and its Wi-Fi 6E Broadcom silicon.

iPhone 15 Pro Wi-Fi capabilities in 6 GHz band

Now, why does N1 show 802.11r as “Not reported”? That’s a Layer 8 problem. I didn’t have Fast Transition enabled on my AP, and when I noticed it was too late 😊 You can spot “802.11r Off” in the screenshot below and the 160 MHz max channel width captured by the AP.

I had my 802.11r set to off

PCAP or it didn’t happen!

As we mentioned, Profiler also saves Association Requests coming sent by the client devices. Here are PCAPs of iPhone 17 Pro Max associating to Profiler SSID in 2.4 GHz, 5 GHz, and 6 GHz bands.

How to tell from a packet capture what Wi-Fi silicon does an iPhone use?

iPhones 15 Pro and 16 include Broadcom vendor tag in their Association Request frames. iPhones 17 do not.

Association Request frame – N1 vs Broadcom

2 Spatial Streams in Low Power mode

I switched iPhone 17 Pro to Low Power mode, and I was curious to see if it behaves the same way as previous generations. It doesn’t!

Unlike previous generations of iPhones which downshift from 2 spatial streams to 1 spatial stream, iPhone 17 Pro keeps using 2 streams even in Low Power mode. This might be a new behaviour, unless it changes in a future release.

I like it! Regardless of its battery level, the iPhone consistently uses 2 spatial streams. No more drift of Wi-Fi client capabilities over time.

wifichannel tool comes to macOS, Linux and Windows

Are you still getting used to the 6 GHz channel numbers, PSC, and centre frequencies?

The wifichannel tool is there to do the conversion between channel number and center frequency for you.

Convert between centre frequency and channel number

It also lists all 2.4 GHz, 5 GHz and 6 GHz channels, indicates U-NII bands, and more.

List all available 6 GHz channels

Here are few practical examples of what it can do for you.

How to install

Follow my installation instructions here and get wifichannel from my GitHub.

Unboxing Cisco 802.3bt 60W PoE power injector CW-INJ-8

To enable full radio capability of some of the latest access points, 802.3bt power source is required. If you don’t or can’t have a 802.3bt capable switch, power injector might be the right choice for you.

CW-INJ-8 PoE power injector

For Cisco’s CW9179F, CW9178I, CW9172H, and other APs, the correct injector is CW-INJ-8. It takes AC power and injects 802.3bt Type 3 Class 6 (up to 60 Watts) into your twisted pair copper cable, and it is designed for up to 10 Gigabit Ethernet.

Surprisingly small box

Apart from documentation, there is just the power injector in the box. If you don’t have one in your “box of cables” already, order an IEC C13 power cable separately. It is not included.

802.3bt power injector CW-INJ-8
Package contents

When is injector not the best choice?

Here is my rule of thumb. If you can, power your AP using a switch. Why? Power injectors in general introduce extra points of failure. Unlike switches, they can’t be remotely monitored or controlled.

Now, if there is no switch available, use a power injector. Site survey, assuming that AC power or battery pack with inverter is available, is another good use case. Or lab use – for when you don’t have a 802.3bt switch.

Hardware overview

There are no surprises on the top side. Note the LED on the top right.

Here is a quick look at the label.

CW-INJ-8 label

The injector has RJ-45 input, RJ-45 output, and AC power connector which accepts standard IEC C13 cable.

Status LED

Solid green LED indicates that a valid IEEE 802.3bt or 802.3at AP is detected, and the AP consuming PoE power.

Very occasional flashing green indicates that AC power is provided to the injector itself. Don’t expect it to be solid green with no AP connected.

Let’s test it

Microchip makes this pocket-sized PoE tester. Let’s see what we get at the output of this power injector. As we expected, 802.3bt Type 3 Class 6 (up to 60 Watts) it is.

802.3bt Type 3 Class 6

Official documentation

Always refer to the official documentation, please.

Unboxing Cisco Wireless CW9172H wall plate Wi-Fi 7 access point

Wall plate access points provide both wired Ethernet and Wi-Fi connectivity. Cisco has just started shipping the latest CW9172H Wi-Fi 7 wall plate AP. Same as all other Cisco’s Wi-Fi 7 APs, it is designed for global use. The regulatory domain is no longer dictated by the SKU. The CW9172H can be managed either by Cisco Meraki Dashboard, or Catalyst 9800 controller and Catalyst Center.

CW9172H in a hotel room

It can be mounted onto an electrical wall plate. The twisted pair cable runs inside the wall and there are no visible cables.

Wall plate mounting with no visible cables

If no wall plate is available, you can mount the AP using a spacer accessory kit on the actual wall surface with cables clipped to the wall.

CW9172H in a hotel room

Back to unboxing. What is included in the box? Well, if you order multiple access points, select the 6-pack option referred to as “multi packaging”. Who wouldn’t want a six pack? 😊

The 6-pack box dimensions are about 33 x 20 x 25 cm and it contains 6 APs.

Inside are 6 smaller boxes with 1 access point each.

Each AP is wrapped in paper. No plastic bags anymore.

Mounting bracket and accessories are placed underneath the AP.

Accessories are packaged in paper bags. Let’s have a closer look.

Finally, there is the access point.

The passthrough port covered by a plastic cover. There is 1 PoE out port and 2 standard Ethernet downlinks for your devices.

On the side is a standard RJ-45 console port, also covered by a plastic cover mainly for aesthetics reasons. Let’s remove the cover, shall we?

The Ethernet passthrough port cover follows similar style.

Back side of the AP hosts the up to 2.5 Gbps Ethernet uplink and passthrough port.

Optional accessories

There are extra parts you can order depending on how you wish to use and mount the CW9172H.

The spacer kit is designed for mounting on the actual wall surface.

Desktop cradle accessory is another option if you prefer to place the AP on a desk.

The port lock prevents users from connecting or disconnecting cables to the ports on the bottom side of the AP.

As per usual, refer to the Cisco installation guide and data sheet for official guidance.

Full 5 Gigabit Ethernet on Raspberry Pi 5 with iocrest Realtek RTL8126 adapter

I’ve tested a number of 10 Gigabit Ethernet adapters on Raspberry Pi 5 based on the AQC107 chip. One adapter that negotiates PCIe Gen 3, achieves 5.5 Gbps speed and overheats. Another one which only works in PCIe Gen 2 mode and peaks at 3.44 Gbps. And even a full-size PCIe card made by TP-Link which negotiates PCIe Gen 2 link speed and doesn’t go beyond 3.44 Gbps either.

The Realtek RTL8126 chip we are testing today is so far the most suitable for Raspberry Pi 5. It is capable of 5 Gigabit Ethernet at full speed. TCP iperf3 throughput peaks at 4.7 Gbps. It doesn’t overheat. And it doesn’t excessively utilise the Raspberry Pi 5 CPU.

This particular one is sold under the iocrest brand. Like the other boards and adapters there is no increst branding on it and it will likely be sold under various brands. The RTL8126 chip is the key component here.

Raspberry Pi 5 with 5 Gigabit Ethernet network adapter

How did we connect it to the Pi? Via PCIe bus. We breakout the Raspberry Pi 5’s PCIe connector via Pineboards (aka Pineberry Pi) board to M.2 M-key slot. And in that slot we install the iocrest 5 Gigabit Ethernet network adapter – that’s the black M.2 module, plus a PCB with RJ-45 connector on a grey ribbon cable.

iocrest 5 GbE adapter connected to Raspberry Pi 5 via PCIe Gen 3 link
Closer look at the adapter

Here is how it looks from PCI device perspective.

Performance

It has no problem negotiating full duplex 5 Gigabit Ethernet and filling the interface with traffic fully.

5 GbE Full duplex

iperf3 with default TCP settings peaks at 4.7 Gbps up and down. More parallel streams don’t improve the result any further. This is in PCIe Gen 3 mode.

Full 5 Gigabit Ethernet throughput in PCIe Gen 3 mode

Just for the record, if we downgrade PCIe bus to Gen 2 link speeds, we are talking 3.43 Gbps down and 3.31 Gbps up iperf3 TCP throughput-wise.

Throughput in downgraded PCIe bus to Gen 2 mode

Thermal footprint

Fully loaded by TCP traffic, I see temperature of 81.2° C (178° F) on the top surface of the RTL8126 chip. Yes, it is on the warmer side, but Raspberry Pi 5 SoC runs quite warm too and it is nowhere near 122° C temperatures I observed on this “hot” 10 Gigabit Ethernet adapter.

Chip temperature, installed in Intel NUC with M.2 slot

By the looks of it, there is no temperature sensor on the PHY so I can’t measure internal temperature.

CPU utilization and temperature of fully loaded adapter with TCP traffic

Linux software support

I happened to have Raspberry Pi OS with 6.8.0-rc7 kernel running on the Raspberry Pi 5. Out of the box, the adapter did not work. iocrest included driver download link pointing to this Chinese website but I am not so sure I want to use that one.

After installing driver from Realtek’s website, the adapter works just fine.

Power draw

This adapter in PCIe Gen 3 mode draws about 1.5 W in idle, and 2.1 W under full iperf3 load.

Switching the adapter to Gen 2 mode doesn’t make any power savings. I measured 0.1 W less in Gen 2 mode.

The whole setup of Raspberry Pi 5 with fan, Pineboards PCIe adapter, and this 5 GbE adapter in PCIe Gen 3 mode draws about 5.1 Watts in total under full iperf3 load.

Does it work on Windows 11?

Yes, it does. I installed one in Intel NUC 12th generation. It runs at full speed full and Gen 3 x1 mode.

Windows 11 driver (as of May 2024) downloaded automatically via Windows Update only allows this adapter to use 2.5 GbE. To unlock 5 GbE we download driver directly from Realtek’s website and we are all set.

Driver from Realtek’s website with full 5 GbE support
5 GbE full duplex with driver from Realtek’s website
Intel NUC with 5 GbE RTL8126 adapter

With the adapter inserted in M.2 M-key slot, we won’t be able pop the NUC bottom lid back on. The adapter is just a bit too tall.

Bottom lid won’t fit with the adapter installed

Throughput also looks good. I might revisit Windows throughput testing tools at some point. But for now, I take 4.74 Gbps down and 4.42 Gbps up speeds. Increasing number of parallel streams did not improve throughput in any way.

Windows 11 throughput test

For the record, Jumbo frames seem to be supported but I had no reason to explore this further this time.

Jumbo frame support on Windows 11

Summary

As I mentioned towards the beginning, 5 Gigabit Ethernet based on Realtek RTL8126 chip seems to strike the perfect balance for Raspberry Pi 5. It delivers 4.7 Gbps up and down, doesn’t consume much power, and doesn’t produce excessive amount of heat.

Long-time test will tell how it actually performs but for now I am happy with what I’ve seen.

From driver perspective, I am wondering if the latest Linux kernel supports this chip natively or if I can enable the right kernel module manually.

How to connect full-size 10 Gigabit Ethernet PCIe adapter TP-Link TX401 to Raspberry Pi 5 and Intel NUC

It is refreshing to be able to test hardware which actually has a product name :) TP-Link TX401 is a 10 Gigabit Ethernet copper PCIe adapter.

TP-Link TX401 PCIe 10 GbE card

How to connect standard PCIe card to Raspberry Pi 5

I am testing on Raspberry Pi 5 and Intel NUC. Both do have an M.2 M-key slot and they won’t take this card natively, will they?

Pineboards (previously known as Pineberry Pi) makes a great PCIe Gen 3 compatible board that breaks out Raspberry Pi 5 PCIe connector to M.2 M-key slot. And from there we can use another adapter – MZHOU M.2 to PCIe 4X Adapter. It allows us to insert a standard size PCIe card into M.2 M-key slot.

Pineberry Pi M.2 M-key adapter -> M.2 to PCIe adapter -> PCIe card
Pineberry Pi M.2 M-key adapter -> M.2 to PCIe adapter -> PCIe card

The Ethernet adapter is correctly recognised. We just need to build a custom Linux kernel with AQC107 kernel module enabled. Steps by steps instructions are here for your reference. They work for all AQC107 based adapters I’ve tested.

It negotiates 10 Gbps Full duplex link with my switch.

But it only works in PCIe Gen 2 mode on Raspberry Pi 5 in this setup. That means that throughput will be significantly limited to 3.44 Gbps download TCP speed and 3.07 Gbps upload. Using more parallel streams did not help in any way. We are limited by the 4 Gbps throughput of PCIe Gen 2.

I was not able to make PCIe Gen 3 work using this setup. Understandably, high-speed buses don’t like the extra connectors and adapters.

Limited throughput due to PCIe Gen 2

Updated: It wasn’t available back then when I tested this, but Pineboards now sells uPCIty Lite HAT for Raspberry Pi 5 which completely removes the need for the intermediate MZHOU adapter.

How to connect standard PCIe card to Intel NUC

The same M.2 M-key to standard PCIe card adapter works with my Intel NUC 12th Generation.

Standard PCIe card in Intel NUC
Standard PCIe card in Intel NUC

Windows 11 automatically downloads the latest AQC107 driver using Windows Update.

Driver is downloading

It negotiates 10 Gbps Full duplex.

10 Gbps link

The TP-Link card successfully negotiates PCIe Gen 3 x4.

PCIe Gen 3 link speed and x4 width

PCIe Gen 3 allows us to achieve TCP throughput of 9.48 Gbps with no effort in the download direction and 9.49 Gbps in the upload. So this card can clearly do 10 Gigabit Ethernet, it just needs PCIe Gen 3 link speed.

Download TCP throughput 9.48 Gbps
Upload speed 9.49 Gbps

No overheating problem

Unlike unbranded Chinese adapters using the same AQC107 chip, this adapter is designed does not overheat. You can read some horror stories about chip temperatures of 122° degree Celsius (252° F) here.

Idle PHY temperature 58.1° C
PCIe Gen 2 full load temperature 63.3° C
TP-Link TX401 in PCIe Gen 3 mode on Windows 11 runs at normal temperature
Closer look at the heatsink

Summary

This adapter achieves nearly 9.5 Gbps of TCP throughput in either direction on Windows if you allow it to use PCIe gen 3 link speed.

Unfortunately, it only negotiated PCIe Gen 2 with Raspberry Pi 5 and Ethernet throughput is limited to about 3.4 Gbps. So for Raspberry Pi, I would recommend a 2.5 GbE adapter which it can fully handle. Alternatively, a 5 GbE adapter. Coming up next. Stay tuned.

It is a good product though with solid cooling. It still produces some heat but that’s a feature of the AQC107 chip. Its advantage is that it keeps the actual system CPU utilisation low even when fully loaded.

The TX401 is a great fit for a desktop machine. If you run a Mac or NUC, I recommend the external 10 Gigabit Ethernet network adapter connected via USB-C using Thunderbolt 3 protocol. No drivers needed.

Direct 20 Gbps connection between Mac and Windows 11 machine with no Ethernet adapters

Problem statement

Here is the challenge. We have a MacBook Pro M2 and an Intel NUC 12th generation PC running Windows 11. We want to transfer a significant amount of data between the two and potentially sync content of 2 directories. The Mac has no Ethernet adapter.

Solution

Both machines support Thunderbolt 4 and USB4. I happen to have a 0.5 m (1.6 ft) Thunderbolt 4 cable in my tools bag. We connect the two machines back to back. They establish USB4 peer to peer 20/20 Gbps connection, and automatically assign locally significant IP addresses from the 169.254.0.0/16 APIPA range.

For the record, I am using the Thunderbolt 4 cable shipped with my trusty OWC 10 Gigabit Ethernet Thunderbolt adapter.

Direct MacBook to Intel NUC USB4 20/20 Gbps connection

The MacBook side

Let’s start with the Mac. Head over to System Settings and Network. Select the Thunderbolt Bridge adapter and explore its config.

Thunderbolt bridge interface and IP address

As far as I can tell, the machines have decided to use USB4. From what Windows network manager is telling us, they negotiated 20/20 Gbps link speed. I expected 40 Gbps but I think I set a wrong expectation in my head. 20 Gbps up and 20 Gbps down full duplex makes up 40 Gbps.

Windows PC on the other end of the Thunderbolt link

A quick iperf3 test gives us amazing throughput of 16.4 Gbps of TCP traffic from the Mac client to PC server. That’s fast!

16.4 Gbps of TCP traffic from Mac to PC

By default macOS uses standard MTU size of 1500 Bytes. This is important hold that thought.

Standard MTU

In the downstream direction, that is from Windows PC towards the Mac, we “only” get 5.3 Gbps. Windows claims 20/20 Gbps link speed, so what’s wrong?

Limited 5.3 Gbps TCP throughput from PC to Mac

Yes, we need to bump MTU (Maximum Transmission Unit) size to the maximum value of 9000 Bytes on my Mac. Apparently, Windows defaults to 62000 Bytes MTU on this peer to peer link type, and there is no UI option to change it. But that’s fine for now.

Enable Jumbo frame support on Mac

Let’s retest upload speed. Now we are talking. That’s 16.4 Gbps TCP from Mac to PC and 12.8 Gbps from PC to Mac. I am starting the file transfer.

12.8 Gbps TCP from PC to Mac with Jumbo frames enabled

We are not done yet.

Intel NUC and the Windows part

Windows sees this link as a peer to peer USB4 connection.

Connection status

The two machines negotiated a 20/20 Gbps link. Windows uses 62000 Bytes MTU by default with no obvious UI option to change it. Mac uses 9000 Bytes. MTU mismatch is bad and we should fix that.

20/20 Gbps USB4 P2P link
Adapter settings don’t offer MTU adjustment in the UI

Let’s deal with the MTU, and set it to 9000 Bytes on Windows. Same as the Mac.

Set MTU to 9000 Bytes on Windows 11 for this adapter

With matching MTU on both sides of the pipe, we get 15.1 Gbps TCP throughput from Mac to PC, and 13.6 Gbps from PC to Mac. Slightly more symmetrical in both directions.

Mac to PC
PC to Mac

Summary

I knew Thunderbolt 4 peer to peer connection was possible between 2 Macs but I’ve never tried connecting a Mac to a PC. It works.

Use a Thunderbolt 4 cable, not just a regular “USB-C to USB-C” cable. If there is a Mac involved, increase macOS MTU size to Jumbo 9000 Bytes and match MTU setting on both machines.

The outcome is a peer to peer 20/20 Gbps USB4 link with TCP throughput around 15 Gbps in either direction.