The Alfa Network’s AHPI7292S was claimed to be the world’s first IEEE 802.11ah sub 1 GHz WiFi Raspberry Pi HAT when it was introduced in 2021. It is based on the first generation Newracom NRC7292 SoC and is still readily available today from various distributors such as
While more expensive than some other alternatives, the readily available aspect makes it still an option for evaluating 802.11ah Halow Sub GHz WiFi, especially the Newracom ecosystem.
However, support is a little lacking. On-line reviews show a common frustration with documentation and source-code being years out of date.
Alfa Network has a pre-built image on their getting started guide that is a valid option for getting the AHPI7292S running quickly. However, it is based on a rather old 2022.04.04 Bulleye image of Raspbian OS (and is using Linux Kernel v5.15.32-v7l+). It also uses an old Newracom 01.03.04 rev02 driver version that was released on the 2022.01.19. Since then, another 17 versions have been released with the latest version being v1.5.2.
The board data file also appears to be broken – or non-existent.
Below are instructions for building the driver on the latest version of Raspberry Pi OS – Debian Trixie 64bit with Kernel 6.18 released on 18th June 2026. This was tested on a Raspberry Pi 4B. The instructions closely follow the detailed NRC7292 Evaluation Kit User Guide (Raspberry Pi Setup) based on Linux 5.10.17 and should be used as a reference.
Raspberry Pi OS Image
Prepare and boot a Raspberry Pi OS. I normally use the Raspberry Pi Imager as it finds, downloads and customises (hostname, credentials, localisation, WiFi SSID etc) the image for you.

Install any prerequisites:
sudo apt-get install iptables hostapd dhcpcd5 dnsmasq
By default the SPI interface is not enabled. Use raspi-config to enable the SPI Interface:
sudo raspi-config
Select 3. Interface Options :

And I4 SPI:

And yes when asked if you would like the SPI interface to be enabled:

While we are in raspi-config, set your WLAN Country to prevent any future Wi-Fi is currently blocked by rfkill error messages. Select 5. Localisation Options :

Select L4 WLAN Country :

And select your country :


Newracom 802.11ah WiFi driver
The official Newracom repository for the NRC7292 Software Package is https://github.com/newracom/nrc7292_sw_pkg. However, this repo is lacking support for newer kernels and scripts expect the user to be pi with hard-coded references to /home/pi.
I have forked this repo and patched it for newer kernels and newer build tools. Older build tools were more lenient towards missing function prototypes but now treat these as errors. While you can add switches to ignore these errors, it is better in the long run just to fix the issues.
The repo also has a board data file suitable for the AHPI7292S.
Open a shell on your Pi and clone the patched repo:
cd ~ git clone https://github.com/craigpeacock/nrc7292_sw_pkg
Change your directory to the kernel module source code and make the kernel module:
cd nrc7292_sw_pkg/package/src/nrc make
With the kernel module now built, copy the binary (nrc.ko) into the evk/sw_pkg/nrc_pkg/sw/driver folder. (Note that there is an evk/binary folder with a kernel module, but this is not copied over to the package).
Then prepare the package (run update.sh). This will create a folder in your home directory called nrc_pkg
cp nrc.ko ../../evk/sw_pkg/nrc_pkg/sw/driver cd ~/nrc7292_sw_pkg/package/evk/sw_pkg/ ./update.sh
Device Tree
A device tree overlay is required to setup the SPI interface and GPIO. Newracom provide a sample in /nrc7292_sw_pkg/dts/ and it appears Alfa Network has chosen the same IO assignment on their hat. There is no need to edit it.
Build the device tree and copy it into /boot/overlays :
cd ~/nrc7292_sw_pkg/dts/ dtc -I dts -O dtb -o newracom.dtbo newracom_for_5.16_or_later.dts sudo cp newracom.dtbo /boot/overlays
The new compiled overlay needs to be called from the /boot/firmware/config.txt file. Edit the file and add the following:
dtoverlay=disable-bt dtoverlay=disable-wifi dtoverlay=newracom

Finally, edit /etc/modules and add mac80211 to the bottom of the file.

At this stage, setup is complete. Reboot your pi.
Starting
Newracom provide shell scripts to start and stop the 802.11ah WiFi interface. These can be found in nrc_pkg/script. There should be a start.py and stop.py python script to start and stop the Sub GHz WiFi.
The start.py script has the following options:
pi@newracom:~/nrc_pkg/script $ ./start.py Done. Done. Usage: start.py [sta_type] [security_mode] [country] [channel] [sniffer_mode] start.py [sta_type] [security_mode] [country] [mesh_mode] [mesh_peering] [mesh_ip] Argument: sta_type [0:STA | 1:AP | 2:SNIFFER | 3:RELAY | 4:MESH] security_mode [0:Open | 1:WPA2-PSK | 2:WPA3-OWE | 3:WPA3-SAE | 4:WPS-PBC] country [US:USA | JP:Japan | TW:Taiwan | EU:EURO | CN:China | AU:Australia | NZ:New Zealand | K1:Korea-USN | K2:Korea-MIC] ----------------------------------------------------------- channel [S1G Channel Number] * Only for Sniffer & AP sniffer_mode [0:Local | 1:Remote] * Only for Sniffer mesh_mode [0:MPP | 1:MP | 2:MAP] * Only for Mesh mesh_peering [Peer MAC address] * Only for Mesh mesh_ip [Static IP address] * Only for Mesh Example: OPEN mode STA for US : ./start.py 0 0 US Security mode AP for US : ./start.py 1 1 US Local Sniffer mode on CH 40 for Japan : ./start.py 2 0 JP 40 0 SAE mode Mesh AP for US : ./start.py 4 3 US 2 Mesh Point with static ip : ./start.py 4 3 US 1 192.168.222.1 Mesh Point with manual peering : ./start.py 4 3 US 1 8c:0f:fa:00:29:46 Mesh Point with manual peering & ip : ./start.py 4 3 US 1 8c:0f:fa:00:29:46 192.168.222.1 Note: sniffer_mode should be set as '1' when running sniffer on remote terminal MPP, MP mode support only Open, WPA3-SAE security mode
The SSID, passphrase and key management options can be found in configuration files in the conf/[country] folders.
For example, to start the access point with no security (open), execute the following substituting AU with your two digit country code.
./start.py 1 0 AU
If successful, you should get a output similar to the following:
pi@newracom:~/nrc_pkg/script $ ./start.py 1 0 AU
Done.
Done.
------------------------------
Model : 7292
STA Type : AP
Country : AU
Security Mode : OPEN
BD Name : nrc7292_bd.dat
AMPDU : AUTO
Download FW : uni_s1g.bin
MAX TX Power : 24 dBm
BSS MAX IDLE : 1800
------------------------------
NRC AP setting for HaLow...
[*] Set Max CPU Clock on RPi
[sudo] password for pi:
1400000
1400000
1400000
1400000
Done
[0] Clear
[1] Copy and Set Module Parameters
total 688
drwxr-xr-x 2 pi pi 4096 Jun 20 10:03 .
drwxr-xr-x 4 pi pi 4096 Jun 20 00:57 ..
-rwxrwxrwx 1 pi pi 271 Jun 20 00:57 copy
-rw-r--r-- 1 pi pi 2128 Jun 20 01:15 nrc7292_bd.dat
-rwxr-xr-x 1 pi pi 342732 Jun 20 00:57 nrc7292_cspi.bin
-rwxr-xr-x 1 root root 342732 Jun 20 12:37 uni_s1g.bin
-rwxr-xr-x 1 root root 342732 Jun 20 12:37 /lib/firmware/uni_s1g.bin
====================================
AP INTERFACE : wlan0
AP STATIC IP : 192.168.200.1
NET MASK NUM : 24
====================================
Config for AP is done!
IP and DHCP config done
[2] Set Initial Country
[3] Loading module
sudo insmod /home/pi/nrc_pkg/sw/driver/nrc.ko fw_name=uni_s1g.bin bss_max_idle=1800 ndp_preq=1 listen_interval=1000 debug_level_all=1 bd_name=nrc7292_bd.dat
[4] Set Maximum TX Power
Type : limit Tx power : 24
OK
[*] Transmission Power Control(TPC) is activated
[5] Set guard interval: auto
[*] Start DHCPCD and DNSMASQ
[*] Self configuration off
[6] Start hostapd on wlan0
[*] configure file copied from: /home/pi/nrc_pkg/script/conf/AU/ap_halow_open.conf
wlan0: interface state UNINITIALIZED->COUNTRY_UPDATE
wlan0: interface state COUNTRY_UPDATE->ENABLED
wlan0: AP-ENABLED
[7] Start NAT
[8] ifconfig
eth0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether dc:a6:32:4d:72:59 txqueuelen 1000 (Ethernet)
RX packets 1828 bytes 1785331 (1.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 885 bytes 99569 (97.2 KiB)
TX errors 0 dropped 9 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 16 bytes 2645 (2.5 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 16 bytes 2645 (2.5 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.200.1 netmask 255.255.255.0 broadcast 192.168.200.255
inet6 fe80::25a8:ebd5:c94a:993e prefixlen 64 scopeid 0x20<link>
ether 00:c0:ca:b4:64:c0 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 22 bytes 3881 (3.7 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
HaLow AP ready
--------------------------------------------------------------------
Done.
pi@newracom:~/nrc_pkg/script $ wlan0: STA 02:00:6e:06:23:da IEEE 802.11: authenticated
wlan0: STA 02:00:6e:06:23:da IEEE 802.11: associated (aid 1)
wlan0: AP-STA-CONNECTED 02:00:6e:06:23:da
wlan0: STA 02:00:6e:06:23:da RADIUS: starting accounting session 8EB39CDDCBD81624
wlan0: AP-STA-DISCONNECTED 02:00:6e:06:23:da
Troubleshooting
SIOCSIFFLAGS: Operation not permitted
This is a common error and usually indicates that the kernel module failed to load.

Check your kernel messages (dmesg).
If you need a more verbose output, edit your start.py python script and change driver_debug to 1. Then retry.

If you need to compare it against a working install, various output files can be found here.
Unknown symbol in module
If you return insmod: ERROR: could not insert module [path]/nrc_pkg/sw/driver/nrc.ko: Unknown symbol in module, run dmesg.
If you get a lot of Unknown symbol ieee80211_xx, ensure the mac80211 is loaded. If you have added mac80211 to /etc/modules, you may need a reboot for the module to be loaded.
cli_app
I am unable to execute the cli_app. It reports
bash: ./cli_app: Permission denied
It is likely the app is compiled for the wrong architecture. Run uname -m to get the architecture. Your platform should be 64 bit (aarch64). If you need a 32-bit version, try rebuilding the app.

Be the first to comment