How can I quickly get up and running with my Wi-Fi device using the Network Manager tool in Linux?
Using Network Manager to setup a wifi connection is quick and automatic once the configuration is in place. Install the Wi-Fi card and make sure the device shows up in your Linux system with:
lspci
*******************
00:1e.0 SD Host controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SDIO Controller (rev 0d)
00:1f.0 ISA bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface (rev 0d)
00:1f.1 SMBus: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller (rev 0d)
01:00.0 Network controller: Qualcomm Atheros QCA986x/988x 802.11ac Wireless Network Adapter
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
03:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15)
*******************
The Qualcomm device we have plugged in here shows up as expected. If that is not the case, make sure that the card is properly seated, pin-compatible and that the host system has correct drivers installed!
What drivers are being utilized can be found using the index in the previous code snippet:
sudo find /sys | grep drivers.*01:00.0
/sys/bus/pci/drivers/ath10k_pci/0000:01:00.0
Here we see that the device is using the kernel built-in wifi driver ath10k which is compatible with the device used here.
Next step is to check that NM finds the device:
sudo nmcli
wlp1s0: unavailable
"Qualcomm Atheros QCA986x/988x"
wifi (ath10k_pci), 04:F3:21:4F:0A:A2, sw disabled, hw, mtu 1500
Here it is found by NM but in disabled state, activate it using:
sudo nmcli radio wifi on //activate wifi
wlp1s0: disconnected
"Qualcomm Atheros QCA986x/988x"
0 connections available
wifi (ath10k_pci), 04:F3:21:4F:0A:A2, hw, mtu 1500
sudo nmcli dev wifi //lists available wifi access points
sudo nmcli dev wifi connect 'SSID' password 'password' //connect to a network/access point
To setup an automatic connection instead of manual direct-connect follow the below steps:
nmcli con add con-name 'wifi' ifname 'wlp1s0' type wifi ssid 'SSID'
nmcli con modify 'wifi' wifi-sec.key-mgmt 'wpa-psk' //Add security layer matching the access point
nmcli con modify 'wifi' wifi-sec.psk 'password' //Add the access point password to the connection
nmcli con up 'wifi'//Activate the connection
nmcli dev set 'wlp1s0' autoconnect yes //Set connection to autoconnect
There are also a number of different settings that can be changed to your liking. Below you can see an example of how to set which band an existing connection should use:
nmcli connection edit wifi
goto wifi //Access general wifi settings
goto band //Access band settings
set a //Sets the band to 5GHz
save //Persistent save
quit //Quit the interactive terminal
sudo systemctl restart network-manager //Restart to apply settings
More information available at: https://wiki.archlinux.org/title/NetworkManager#nmcli_examples
Note: Tested on Ubuntu 22.04 kernel 5.19
Example on how to control a Techship PC201 adapter via GPIO signals when it is assembled as a hat on a Raspberry PI4.
Example on how to control a Techship PC201 adapter via GPIO signals when it is assembled as a hat on a Raspberry PI4.
Hardware:
Assemble the PC201 adapter as a hat for the Raspberry PI4 unit and Assemble a 40-pin riser header between the PCBs.
To use signals from the GPIO socket to control the PC201 adapter, place jumper links on the PC201's pin headers mentioned below, depending on the function you want be able to control by GPIO.
Host system OS / software:
In this example we are running Raspberry Pi OS and using the raspi-gpio tool to configure and control the Raspberry PIs GPIO signals.
Configure the Raspberry Pi's GPIO 26,27 for output functionality with pull down and GPIO 16 for output functionality with no pull down.
sudo raspi-gpio set 26,27 op pd
sudo raspi-gpio set 16 op pn
GPIO 27 - Controlling the MC201 adapters power IC enable signal
(Ensure J7 have a jumper link between pin 2-3 on PC201 PCB)
Enable signal on:
sudo raspi-gpio set 27 dh
Enable signal Off:
sudo raspi-gpio set 27 dl
Some modems will not boot up after power supply is enabled if not the wireless disable signal is also set to high/normal mode state.
GPIO 16 - Controlling the miniPCIe sockets Wireless Disable signal
(Ensure J4 have a jumper link on PC201 PCB)
Wireless disable Off: (normal operational mode)
sudo raspi-gpio set 16 dh
Wireless disable on: (wireless disabled mode)
sudo raspi-gpio set 16 dl
GPIO 26 Controlling the miniPCIe sockets Hardware Reset signal
(Ensure J8 have a jumper link on PC201 PCB)
Activate reset signal:
sudo raspi-gpio set 26 dh
Release reset signal:
sudo raspi-gpio set 26 dl
For detailed information of the GPIO control signals routing please refer to the Techship PC201 adapter hardware guide.
For details about cellular modem behaviour to control signals, timings, etc. please refer to the modem manufacturers hardware guide.
How do you configure a wifi network using IW and IP utilities with wpa_supplicant in Linux?
IW is a configuration utility for wireless devices and supports most if not all drivers implemented officially in the Linux kernel. It can be used to setup and connect to wifi networks as well as configure access points/hotspots on supported modems. It replaces the older iwconfig utility which is not recommended for use.
The IP utility is a routing tool that is used to configure network interfaces on your linux host and to configure bridges between devices.
To list all wireless devices the command iw dev or /sbin/iw dev can be used and the response could look something like this:
phy#0
Interface wlp1s0
ifindex 4
wdev 0x1
addr 04:f0:21:3f:0a:a3
type managed
txpower 23.00 dBm
multicast TXQ:
qsz-byt qsz-pkt flows drops marks overlmt hashcol tx-bytes tx-packets
0 0 0 0 0 0 0 0 0
To make sure that the device is up and running issue:
ip link show wlp1s0
In this case, the wireless device is wlp1s0 and for which command return the following:
4: wlp1s0: UP> mtu 1500 qdisc noqueue state DOWN mode DORMANT group default qlen 1000
link/ether 04:f2:24:3d:2b:d9 brd ff:ff:ff:ff:ff:ff
If the device is not active and 'UP' it can be set active using:
sudo ip link set wlp1s0 up
To see if the device is connected to a network or not, issue:
iw wlp1s0 link
Connected to b3:fa:d4:32:64:12 (on wlp1s0)
SSID: Techship
freq: 5200
RX: 4602636 bytes (28600 packets)
TX: 17664 bytes (150 packets)
signal: -53 dBm
rx bitrate: 360.0 MBit/s VHT-MCS 8 40MHz short GI VHT-NSS 2
tx bitrate: 6.0 MBit/s
bss flags: short-slot-time
dtim period: 3
beacon int: 100
If not, it simply returns 'Not connected'
To see available wifi networks in range use the scan function of the modem:
iw wlp1s0 scan
********************SNIPPET*******************
BSS d0:21:f9:32:64:bb(on wlp1s0)
last seen: 7092.798s [boottime]
TSF: 1755910453320 usec (20d, 07:45:10)
freq: 5220
beacon interval: 100 TUs
capability: ESS Privacy SpectrumMgmt ShortSlotTime RadioMeasure (0x1511)
signal: -71.00 dBm
last seen: 1704 ms ago
Information elements from Probe Response frame:
SSID: Techship
Supported rates: 6.0* 9.0 12.0* 18.0 24.0* 36.0 48.0 54.0
DS Parameter set: channel 44
Country: SE Environment: Indoor/Outdoor
Channels [36 - 36] @ 23 dBm
Channels [40 - 40] @ 23 dBm
Channels [44 - 44] @ 23 dBm
Channels [48 - 48] @ 23 dBm
Channels [52 - 52] @ 23 dBm
Channels [56 - 56] @ 23 dBm
Channels [60 - 60] @ 23 dBm
Channels [64 - 64] @ 23 dBm
Channels [100 - 100] @ 30 dBm
Channels [104 - 104] @ 30 dBm
Channels [108 - 108] @ 30 dBm
Channels [112 - 112] @ 30 dBm
Channels [116 - 116] @ 30 dBm
Channels [120 - 120] @ 30 dBm
Channels [124 - 124] @ 30 dBm
Channels [128 - 128] @ 30 dBm
Channels [132 - 132] @ 30 dBm
Channels [136 - 136] @ 30 dBm
Channels [140 - 140] @ 30 dBm
RSN: * Version: 1
* Group cipher: CCMP
* Pairwise ciphers: CCMP
* Authentication suites: PSK
* Capabilities: 1-PTKSA-RC 1-GTKSA-RC (0x0000)
BSS Load:
* station count: 4
* channel utilisation: 19/255
available admission capacity: 31250 [32us]
********************SNIPPET*******************
Make sure that the country parameter is correct, if not you can set the country code with the following:
sudo iw reg set SE
This ensures that the modem follows country-specific frequency regulations!
To connect to a password protected network (e.g. WPA version 1,2 or 3) a configuration file called wpa_supplicant.conf that handles the security protocol is needed:
wpa_passphrase SSID >> /etc/wpa_supplicant.conf
enter wifi password and hit enter
The generated output would look something like this:
network={
ssid="Techship"
#psk="password"
psk=5abc7d89f8e9d8c7aa6b8c7d223e520d26a13e932bf0acb1d4580461d6d2ba8d
}
If sudo privileges aren't enough; login as root with: sudo -s and issue the above again.
When the file has been created it can be run in the background using:
sudo wpa_supplicant -B -D wext -i wlan0 -c /etc/wpa_supplicant.conf
Then check once more if the connection was successful with:
iw wlp1s0 link
The last step is to request an IP adress from the host server via DHCP client:
dhclient wlp1s0
Issue ip addr show wlp1s0 to check assigned ip address and
if you have recieved one you are ready to surf!
For further information and features see:
en:users:documentation:iw [Linux Wireless] (kernel.org)
wpa_supplicant - ArchWiki (archlinux.org)
networking:iproute2 [Wiki] (linuxfoundation.org)
P.S.
For basic applications the use of Network Manager is simpler, mostly automatic and included in most common distributions of Linux, see the below FAQ for more info!
https://techship.com/faq/wifi-linux-network-manager-quick-start-guide/
Note: Tested on Ubuntu 22.04 kernel 5.19
Example on how to control a Techship MC201 adapter via GPIO signals when it is assembled as a hat on a Raspberry PI4.
Example on how to control a Techship MC201 adapter via GPIO signals when it is assembled as a hat on a Raspberry PI4.
Hardware:
Assemble the MC201 adapter as a hat for the Raspberry PI4 unit and Assemble a 40-pin riser header between the PCBs.
To use signals from the GPIO socket to control the MC201 adapter, place jumper links on the MC201's pin headers mentioned below, depending on the function you want be able to control by GPIO.
Host system OS / software:
In this example we are running Raspberry Pi OS and using the raspi-gpio tool to configure and control the Raspberry PIs GPIO signals.
Configure the Raspberry Pi's GPIO pins 16,22,26,27 for output functionality with no pull down.
sudo raspi-gpio set 16,22,26,27 op pn
GPIO 27 - Controlling the MC201 adapters power IC enable signal
(Ensure J7 have a jumper link between pin 2-3 on MC201 PCB)
Enable signal on:
sudo raspi-gpio set 27 dh
Enable signal Off:
sudo raspi-gpio set 27 dl
GPIO 22 - Controlling the M.2 sockets Full Card Power Off signal
(Ensure J2 have a jumper link between pin 1-2 on MC201 PCB)
Power on card:
sudo raspi-gpio set 22 dh
Power off card:
sudo raspi-gpio set 22 dl
GPIO 16 - Controlling the M.2 sockets Wireless Disable signal
(Ensure J4 have a jumper link between pin 1-2 on MC201 PCB)
Wireless disable Off:
sudo raspi-gpio set 16 dh
Wireless disable on:
sudo raspi-gpio set 16 dl
GPIO 26 Controlling the M.2 sockets Hardware Reset signal
(Ensure J8 have a jumper link on MC201 PCB)
Activate reset signal:
sudo raspi-gpio set 26 dh
Release reset signal:
sudo raspi-gpio set 26 dl
For detailed information of the GPIO control signals routing please refer to the Techship MC201 adapter hardware guide.
For details about cellular modem behaviour to control signals, timings, etc. please refer to the modem manufacturers hardware guide.
How is the active antenna feature enabled on the Sierra Wireless EM7590 module?
The active GNSS antenna feature on the Sierra Wireless EM7590 module sets 3.3V on the GNSS antenna port.
First, make sure that the GNSS feature is enabled. This can be checked by using the following command:
AT!CUSTOM?
If GNSS is enabled, the return of this command will contain:
"GPSENABLE" 0x01
If GNSS isn't enabled, it can be enabled with the following commands:
AT!ENTERCND="A710"
AT!CUSTOM="GPSENABLE",1
The EM7590 also supports configuring the GNSS receiver path to the AUX antenna port. However, the active antenna feature is only available on the dedicated GNSS antenna port so make sure the receiver path is set to the dedicated GNSS port if you wish to utilize the active GNSS antenna feature. This setting also be checked with the same command as before:
AT!CUSTOM?
If the return doesn't contain:
"GPSSEL" 0x01
Then the GNSS receiver path is set to the dedicated GNSS antenna port.
If the above criteria is met, the active GNSS antenna feature can be enabled by sending the following command:
AT+WANT=1
Please refer to the EM7590 AT Command Guide for more details about the commands mentioned in this FAQ,
How can we send an SMS with AT commands?
Sending an SMS with AT commands is a relatively simple procedure and requires only two commands.
First, you want to set the module to text mode using the following command:
AT+CMGF=1
After that, you want to set the number that will receive your SMS. This is done with the following command:
AT+CMGS="+46#########"
Then you will be greeted by an ">" marker. This is where you write your SMS. When you are done with your SMS, hit ctrl+Z simultaneously and your SMS will be sent!
The status LED on my adapter doesn't show any activity when the Telit FN990 module is powered on, why?
By default, the blink functionality of the status LED pin (M.2 pin 10) is set to off. However, this functionality can be enabled by using the following AT command:
AT#WWANLED=
Here, the
0 : Low power mode
1 : Offline
2 : No service
3 : In Service, Roaming
4 : Data Active
This command can only be used to configure the status LED functionality for one particular state at a time.
The
The
Please refer to the FN990 Family AT Commands Reference Guide for further information about this command.
The SIM card isn't detected on the FN990 module when it is inserted in the primary SIM card slot on the MU201 adapter. How can this issue be resolved?
The SIM detect signal on the FN990 module series is active low while the SIM slot on the MU201 adapter pulls this signal high when a SIM card is inserted. Therefore the polarity of the SIM detect signal on the FN990 module has to be changed in order to detect the SIM card.
The command sequence below can be used to configure the FN990 module to detect SIM cards inserted in the primary SIM card slot on the MU201 adapter.
AT#SIMDET=0
AT#HSEN=0,0
AT#SIMINCFG=1,1
AT#REBOOT
Please refer to the FN990 Family HW Design Guide, the FN990 Family AT Commands Reference Guide and the M.2 key B to USB3 Adapter Series Hardware Guide for further information.
If you are still experiencing SIM detection issues after following this guide, please submit a support ticket. A support ticket can be created by clicking the following link: https://techship.com/support/new/
How to configure and save a "User Profile" using AT-commands on selected Telit modems.
Sometimes you might want to store some settings to be automatically loaded on startup, without having to configure your modem or make a script.
Fortunately Telit has made it easy to do this, by creating a "User Profile", and this FAQ will guide you through on how to set this up.
For this example, we'll make some configurations to the GPS settings of the module, but you can choose whichever settings you like.
First, send the AT command:
AT&V0?
You will get a long list with info, but the one I want you to check is the last one:
DEFAULT PROFILE : &Y0=user profile 1
Make note of the "Y0" - This might be different on your setup, but don't worry, we'll change this in the next step.
Send the following AT command:
AT&P0
This sets the modem to a custom user profile. (There are 2 user profiles available, "0" and "1". We are using "0" here.)
Now check that we have updated the profile with the AT command:
AT&V0?
And now it should say at the bottom:
DEFAULT PROFILE : &P0=user profile 1
Great! Now we're editing our user profile, so go ahead and type your settings:
AT$GPSP=1
AT$GPSANTPORT=3
AT$GPSACP
AT$GPSNMUN=1
AT$GPSNMUN=1,1,1,1,1,1,1
AT$GPSSAV
To save these settings, it's not enough to only type "AT$GPSSAV", we need to save some of the settings to our profile!
Type the following AT command to do a "save profile":
AT&W
Now do a reboot with:
AT#REBOOT
And when it's up and running again type:
AT$GPSNMUN?
And it should say:
$GPSNMUN: 1,1,1,1,1,1,1
More info regarding the different modes and settings can be found in the AT Command Guide here.
How to collect initial diagnostics data and logs for Fibocom cellular modules needed when requesting Techship technical support?
In order to ease the troubleshooting of technical problems and understand your end-product or application and its usage scenario we ask you to please provide the following information when creating a technical support ticket at: techship.com/technical_support/
Please give a detailed problem description and in what precise circumstances it is present.
Describe the host system:
-Hardware (system board, processor architecture, other peripheral devices...)
-Operating system with detailed versions (E.g. Windows version and build, Linux distribution, kernel version)
-Drivers used and versions (Linux: out-of-tree vendor drivers or in-kernel drivers?)
Details from the cellular module label:
-Model
-SKU/BOM or P/N code
IMEI number
For Linux systems, capture terminal logs from commands:
uname -a
lsusb
lsusb -t
ifconfig -a
ls -l /dev/serial/by-id
ls -l /sys/bus/usb-serial/devices
dmesg
The cellular module logs can be acquired by accessing one of the USB enumerated serial (COM) interfaces or physical UART serial interfaces accepting AT commands. In Windows device manager they are generally found as modem infterface or serial and ports interface types).
Send AT commands to module and capture the text output:
Test that you get a OK reply:
AT
Enable AT command echo:
ATE1
Verbose error reporting:
AT+CMEE=2
Module model:
AT+CGMM
Firmware version:
AT+CGMR
IMEI Code:
AT+CGSN
USB endpoint configuration:
AT+GTUSBMODE?
Serial port configuration:
AT+GTUSBMODE=?
Operational mode:
AT+CFUN?
Selected network access techniques:
AT+WS46?
List network operator info:
AT+COPS?
Network registration status:
AT+CREG?
AT+CGREG?
AT+CEREG?
Signal strength:
AT+CSQ
Signal quality parameters:
AT+CESQ
List APN details:
AT+CGDCONT?
List Packet switch enable/disable status:
AT+CGATT?
List PDP profiles status:
AT+CGACT?
List bearers and IP addresses:
AT+CGCONTRDP=
AT+CGPADDR=
Check Temperaure:
AT+MTSM?
Check SIM status:
AT+GTUSIM?
Selected radio access technology:
AT+GTRAT?
Selected RAT and active frequency band(s):
AT+GTACT
For modems supporting 5G
List CA information:
AT+GTCAINFO?