Best USB Wifi dongle for Raspberry PI 4B?

I want to make a wifi router for both ethernet => wifi and wifi => wifi from my Raspberry 4 B.
I installed OpenWrt with success and it works, but for the latter case I need a second wifi port. So I purchased a TP-Link Archer T3U USB Wifi dongle and plugged it into a USB 2 port of the RPI.
But iti did not work and finding drivers (e.g. Realtek 8812BU) only leads to shady source code packages without a decent installation manual and no ready to use drivers. So I decided to return it to the shop.

Is there another Wifi USB dongle which works out of the box on a RPI 4B using OpenWrt OS ?
I have OpenWrt OS 22.03.
With 'out of the box' I mean at least with precompiled drivers ready to install.

1 Like

Tp-link UE300 seems widely recommended

Edit:
(for wired) that is indeed.
Intended use as additional wireless interface needs another one, Darksky posted a great link!

Fwiw, I got a spare 8821CE . Seems this is supported in the rtw88 package (at least), and I'll see if I can get it to compile for 22.3

2 Likes
1 Like

TP-link UE300 is a wired Ethernet adapter.
What I need is a USB Wifi dongle to add an extra wifi port to the Raspberry Pi with OpenWrt to use it as a wifi to wifi router with its own subnet.
The intended use is a travel router, so connecting the 'front end' of the RPI to the public wifi and the 'back end' is an isolated subnet.

1 Like

The claim is made on this page that the COMFAST CF-951AX works with the Raspberry Pi 4, but you have to connect it with a USB "angle adapter". Plugging it in straight will block other ports, and plugging it in with a USB extension cable won't work.

The chip is the mt7921au, which is supported in-kernel. :+1:

Is there a kernel module for the mt7921au in OpenWRT 22.03? No. But maybe there's one in OpenWRT 23.05.

I've seen this adapter for sale locally in the country where I am located. It's a mid-range price, for this market.

Have I tested this dongle myself in OpenWRT, or anywhere? No.

These are the plausible-sounding drivers that are available in OpenWRT 23.05, but I'm not sure if any of these provide support to the mt7921au chipset:

  • kmod-mt7921e
  • kmod-mt7921s
  • kmod-mt7921u

According to this post, the kmod-mt7921u module looks like it might work.

I have Comfast CF-953AX (which is same chipset as CF-951AX but different form factor), and just tested with my Linksys WRT1900ACv2 on 23.05.0, installed kmod-mt7921u and it works! Now there is an usable AX AP on my router (by the time I am typing this, I am also using this setup for video conference)

EDIT: Not sure if this is issue with Linksys or the Comfast dongle, when I run a speedtest with very high throughput on it my router hangs.

1 Like

I found that it's not the problem of my Linksys router, because trying with NanoPi R6S with mj2222's kernel 6.1 build I am having same problem, the AP mode started and then after getting a large amount of traffic on it the WiFi will crash with following kernel message:

[ 2318.064772] mt7921u 6-1:1.3: Message 00020002 (seq 6) timeout
[ 2318.284722] mt7921u 6-1:1.3: timed out waiting for pending tx
[ 2318.308533] ------------[ cut here ]------------
[ 2318.308941] WARNING: CPU: 6 PID: 9078 at kernel/kthread.c:659 kthread_park+0xac/0xc0
[ 2318.309625] Modules linked in: ath9k ath9k_common rtw89_8852ce rtw89_8852c rtw89_8852be rtw89_8852b rtw89_8852ae rtw89_8852a rtw88_8822cu rtw88_8822ce rtw88_8822c rtw88_8822bu rtw88_8822be rtw88_8822b rtw88_8821cu rtw88_8821ce rtw88_8821c rtw88_8723du rtw88_8723de rtw88_8723d rtl8821ae rtl_pci mt7921u mt7921e mt7921_common btcoexist ath9k_hw ath10k_pci ath10k_core ath wireguard rtw89_pci rtw89_core rtw88_usb rtw88_pci rtw88_core rtlwifi rtl8812au rndis_host pppoe nft_fib_inet nf_flow_table_inet mt792x_usb mt792x_lib mt7915e mt76x2u mt76x2_common mt76x02_usb mt76x02_lib mt76_usb mt76_connac_lib mt76 mac80211 libchacha20poly1305 l2tp_ppp ipt_REJECT chacha_neon cfg80211 cdc_ncm cdc_ether zstd xt_time xt_tcpudp xt_tcpmss xt_statistic xt_state xt_quota xt_pkttype xt_physdev xt_owner xt_nat xt_multiport xt_mark xt_mac xt_limit xt_length xt_hl xt_ecn xt_dscp xt_conntrack xt_comment xt_cgroup xt_addrtype xt_TCPMSS xt_REDIRECT xt_MASQUERADE xt_LOG xt_HL xt_DSCP xt_CLASSIFY usbnet usblp ums_usbat
[ 2318.309789]  ums_sddr55 ums_sddr09 ums_karma ums_jumpshot ums_isd200 ums_freecom ums_datafab ums_cypress ums_alauda ts_fsm ts_bm sch_cake rfcomm r8169 r8152 pptp pppox ppp_mppe ppp_async poly1305_neon nft_reject_ipv6 nft_reject_ipv4 nft_reject_inet nft_reject nft_redir nft_quota nft_objref nft_numgen nft_nat nft_masq nft_log nft_limit nft_hash nft_flow_offload nft_fib_ipv6 nft_fib_ipv4 nft_fib nft_ct nft_compat nft_chain_nat nf_tables nf_reject_ipv4 nf_nat_tftp nf_nat_snmp_basic nf_nat_sip nf_nat_pptp nf_nat_irc nf_nat_h323 nf_nat_ftp nf_nat_amanda nf_log_syslog nf_flow_table nf_conntrack_tftp nf_conntrack_snmp nf_conntrack_sip nf_conntrack_pptp nf_conntrack_netlink nf_conntrack_irc nf_conntrack_h323 nf_conntrack_ftp nf_conntrack_broadcast ts_kmp nf_conntrack_amanda macvlan lzo_rle lzo libcurve25519_generic libchacha iptable_nat iptable_mangle iptable_filter ipt_ECN ipheth ip_tables hidp hci_uart crc_ccitt compat btusb btrtl btmtk btintel br_netfilter bnep bluetooth asn1_decoder fuse
[ 2318.317489]  ntfs3 sch_tbf sch_ingress sch_htb sch_hfsc em_u32 cls_u32 cls_route cls_matchall cls_fw cls_flow cls_basic act_skbedit act_mirred act_gact configs pwm_fan gpio_fan cryptodev xt_set ip_set_list_set ip_set_hash_netportnet ip_set_hash_netport ip_set_hash_netnet ip_set_hash_netiface ip_set_hash_net ip_set_hash_mac ip_set_hash_ipportnet ip_set_hash_ipportip ip_set_hash_ipport ip_set_hash_ipmark ip_set_hash_ipmac ip_set_hash_ip ip_set_bitmap_port ip_set_bitmap_ipmac ip_set_bitmap_ip ip_set nfnetlink ip6table_nat nf_nat nf_conntrack nf_defrag_ipv6 nf_defrag_ipv4 ip6t_NPT ip6table_mangle ip6table_filter ip6_tables ip6t_REJECT x_tables nf_reject_ipv6 pppoatm ppp_generic slhc ip_gre gre ifb dummy l2tp_netlink l2tp_core oid_registry ip_tunnel veth tun xfrm_user xfrm_ipcomp af_key xfrm_algo hfsplus hfs cdrom autofs4 br2684 atm nls_utf8 nls_cp437 vxlan udp_tunnel ip6_udp_tunnel wp512 twofish_generic twofish_common tea serpent_generic khazad cast6_generic cast5_generic cast_common
[ 2318.325166]  camellia_generic blowfish_generic blowfish_common anubis ecdh_generic ecc xts crypto_user algif_skcipher algif_rng algif_hash algif_aead af_alg seqiv jitterentropy_rng drbg kpp hmac echainiv deflate cmac authencesn authenc arc4 crypto_acompress uas dwc2 fsl_mph_dr_of ehci_fsl sata_dwc_460ex gpio_button_hotplug xfs vfat fat exfat btrfs xor zstd_decompress zstd_compress zstd_common xor_neon raid6_pq lzo_decompress lzo_compress dm_mirror dm_region_hash dm_log dm_crypt dm_mod dax udc_core tpm encrypted_keys trusted
[ 2318.336769] CPU: 6 PID: 9078 Comm: kworker/u16:0 Not tainted 6.1.59 #0
[ 2318.337341] Hardware name: FriendlyElec NanoPi R6S (DT)
[ 2318.337797] Workqueue: mt76 mt7921_mac_reset_work [mt7921_common]
[ 2318.338342] pstate: 00400009 (nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
[ 2318.338951] pc : kthread_park+0xac/0xc0
[ 2318.339289] lr : mt76u_stop_tx+0x200/0x2b0 [mt76_usb]
[ 2318.339739] sp : ffff800014d4bc80
[ 2318.340030] x29: ffff800014d4bc80 x28: 0000000000000000 x27: 00000000fffffef7
[ 2318.340656] x26: ffff000109ca9cb0 x25: ffff00010216d880 x24: 0000000000000100
[ 2318.341282] x23: ffff000109ca20b8 x22: ffff000109ca2098 x21: ffff000109ca4860
[ 2318.341907] x20: ffff00010a1ca500 x19: ffff0001002d5400 x18: 0000000000000000
[ 2318.342532] x17: 000000040044ffff x16: 004000b2b5503510 x15: 0000000000000000
[ 2318.343157] x14: ffff00010024aa00 x13: ffff8001f6171000 x12: 00000000000003c5
[ 2318.343782] x11: 071c71c71c71c71c x10: 0000000000000980 x9 : ffff800014d4bba0
[ 2318.344408] x8 : ffff00010ca841e0 x7 : 0000000000000001 x6 : ffff8000091d6028
[ 2318.345032] x5 : ffff8000091d6028 x4 : 0000000000000000 x3 : 0000000000002800
[ 2318.345657] x2 : 0000000000000000 x1 : 0000000000001fe0 x0 : 0000000000000004
[ 2318.346282] Call trace:
[ 2318.346497]  kthread_park+0xac/0xc0
[ 2318.346804]  mt76u_stop_tx+0x200/0x2b0 [mt76_usb]
[ 2318.347224]  0xffff80000175354c
[ 2318.347502]  mt7921_mac_reset_work+0x84/0x154 [mt7921_common]
[ 2318.348013]  process_one_work+0x1d4/0x330
[ 2318.348367]  worker_thread+0x70/0x430
[ 2318.348691]  kthread+0x108/0x10c
[ 2318.348976]  ret_from_fork+0x10/0x20
[ 2318.349291] ---[ end trace 0000000000000000 ]---

The router itself doesn't hang because cable connectivity is still working great, I can restart WiFi manually, or I waited ~3mins then I observed the WiFi reloads.

1 Like

Thanks for that testing!!

1 Like

For my Raspberry PI 4 config I decided to not use a wifi dongle but bought a https://store.ui.com/us/en/products/u6-lite that allowed me to place the radio in a better location. Have been fast and extremely stable.

Apparently that U6 Lite is powered by POE. Did you have to also buy a POE hat for your RPi?

BTW: It's for sale in my market, but a little too pricey for me. None the less, thanks for the recommendation!

Another concern I have there is that the U6 Lite consumes at max, 12W. But only 5ish Watts can be delivered by an Rpi4. Is the power sufficient for the U6 Lite? Does it ever complain about undervolting, somehow?

The U6 Lite might not get all the juice it's wanting, without using, say, an RPi5, which can deliver considerably more Watts to peripherals with their new 37W power supply. Or maybe you just have a POE-capable switch.

In this Network Chuck video, he's using a cheap Mediatek RT5370-based USB dongle. That older dongle has 2.4GHz only (no 5GHz,) and has only 802.11n (not 802.11ac or above).

If I'm not mistaken, nobody on this forum has been able to reproduce his success with that kind of dongle on an RPi4, however.

These very generically-branded dongles are still on sale for super cheap in my market.

Has anyone had any stable performance out of Mediatek RT5370 dongles connected to an RPi4? You know, other than Network Chuck? :sweat_smile:

USB WLAN cards aren't great for this purpose to begin with, but do yourself a favour and skip rt2x00 based (old) chipsets with more contemporary mt76 based ones instead, hardware and drivers have made a huge leap forward, especially for the less common modes of operation (e.g. AP mode).

I'm still a strong proponent of outsourcing wireless to purpose-built hardware (cheap OpenWrt supported wireless routers/ APs) or at least Mediatek/ QCA PCIe cards (functionally fine, just rare, expensive and with rather high requirements on the host board <-- power consumption/ cooling), 15 bucks for an mt7621a+mt7915DBDC AP get you much further than any (set of) USB WLAN card(s).

1 Like

I don't have RT5370, but I do have a RT2800 which works (It's also 802.11n 2.4GHz only, I used this to serve as guest WiFi in the past)

1 Like

I bought the Netgear WAX206 to serve as AP, which is cheap and great.

1 Like

I have a comfast CF-951AX and only work stable when is connected to USB 2.0 ports, mt7921u have a temp sensor, I had observed when the adapter is connected to USB 3.0 ports temp rises about 75°C and crash.

What's the rough room temperature when that happens, on the hot side or does the chip heat itself up that much?

From a technical point of view, USB 2.0 is not sufficient to max out the performance of 802.11ax (and it probably won't deliver enough power either), so it's not surprising that the device (can) stay cooler, but it's made to be used with USB 3.0 to achieve full performance (but thermal design has to cope with that under full load).

I'm not at all surprised that these cards are 'running hot', but the devices just need to be designed in a way to cope with that - and not crash.

I was thinking about lower down the speed so I later picked a Samsung phone with only 802.11ac 2x2 support to test with it, the speed was around 600-700Mbps however after 2-3 rounds of speed test it simply crashes.

And right now the room temperature is ~20C which is not hot at all.

How did you find out the temperature? I can plug mine to USB 2.0 port and see if it's getting better.