FN990A28 Setup and Notes - macclab-stevens/Tutorials GitHub Wiki
the Telit FN990A28 is a M.2 based 5G modem that can interface with a raspberry pi.
M.2 Pi HAT: https://www.waveshare.com/wiki/PCIe_TO_4G/5G_M.2_USB3.2_HAT+#FAQ
Telit FN990A28 Modem: https://www.telit.com/devices/fn990axx/

and from Open-Cells:
Telit FN990A28
M.2 all 41, 78 001/01 OAI/develop open5GS
open cells
work well with ModemManager. AT commands are not needed for establishing PDU sessions
modem manager: https://ubuntu.com/core/docs/modemmanager/gathering-modem-information
Another Modem manager How TO: https://techship.com/support/faq/how-to-guide-control-and-set-up-a-data-connection-in-linux-using-modemmanager-as-connection-manager/
Power via USB-C to Computer. (You can bypass the HAT -> PI All together if you want. Wait about 1 min for the Modem to boot Check that the modem is recognized on you linux machine:
eric@M70q:~$ lsusb
Bus 002 Device 004: ID 2500:0020 Ettus Research LLC USRP B210
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 013: ID 1dd2:2443 Leo Bodnar Electronics Ltd LBE-1420 GPS Locked Clock Source
Bus 001 Device 017: ID 1bc7:1070 Telit Wireless Solutions FN990 #<<<<< THIS GUY RIGHT HERE
Bus 001 Device 006: ID 8087:0aaa Intel Corp. Bluetooth 9460/9560 Jefferson Peak (JfP)
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Not sure why but running as sudo is required for either method.
With Minicom:

sudo minicom -D /dev/ttyUSB2
With Tio
eric@M70q:~$ sudo tio /dev/ttyUSB2
[tio 09:53:19] tio v1.32
[tio 09:53:19] Press ctrl-t q to quit
[tio 09:53:19] Connected
at
OK
I don't think CAPITOL commands matter. e.g. AT
is interpreted the same as at
- When no display text of what you are typing. Blindly put in:
ATE1#
and you should be able toAT
->OK
again. - Repeat Last command:
a/
- Read IMSI:
at+cimi
, if no sim is detect returns error:+CME ERROR: 10
- Query Sim:
at#qss?
returns#QSS: 0,0,1
- Cell Survey:
at#csurv
Takes a second or two to search everything
sudo apt install modemmanager
eric@M70q:~$ mmcli -L
/org/freedesktop/ModemManager1/Modem/7 [Telit] FN990A28
The sim here is in 7 so...
eric@M70q:~$ mmcli -m 7
-----------------------------
General | path: /org/freedesktop/ModemManager1/Modem/7
| device id: e2ba8a4d1fbb9ef05a702bd862431f1a04203dd3
-----------------------------
Hardware | manufacturer: Telit
| model: FN990A28
| firmware revision: M0R.000002
| carrier config: default
| h/w revision: 1.00
| supported: gsm-umts, lte, 5gnr
| current: gsm-umts, lte, 5gnr
| equipment id: 359918921163028
-----------------------------
Status | state: failed
| failed reason: sim-missing
| power state: on
-----------------------------
The SIM card slot isn't being read... hmmm...
set SIMINCFG
to read SIM card as HIGH
like srsRAN says in their notes: (Page ~522 in AT command guide)
From 4.5.17 AT#SIMINCFG - SIMIN Pin Configuration
AT#SIMINCFG=1,1
OK
AT#SIMINCFG=2,1
OK
AT#REBOOT
SIM card being read now:
eric@M70q:~$ mmcli -m 10
----------------------------------
General | path: /org/freedesktop/ModemManager1/Modem/10
| device id: e2ba8a4d1fbb9ef05a702bd862431f1a04203dd3
----------------------------------
Hardware | manufacturer: Telit
| model: FN990A28
| firmware revision: M0R.000002
| carrier config: default
| h/w revision: 1.00
| supported: gsm-umts, lte, 5gnr
| current: gsm-umts, lte, 5gnr
| equipment id: 359918921163028
----------------------------------
Status | lock: sim-pin2
| unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
| state: enabled
| power state: on
| signal quality: 0% (recent)
----------------------------------
So my UE is still not attaching to my B78 Cell. Perhaps the band configuration is not set:
at#bnd?
#BND: 0,22,A7E2BB0F38DF,42,1A0290800D7,7042,81A0290800D7,7442
#<GSM_band>,<UMTS_band>, <LTE_band>,<LTE_band_ext>,<NSA_NR5G_band_1_64>,<NSA_NR5G_band_65_128>,<SA_NR5G_band_1_64>,<SA_NR5G_band_65_128>
# 0, 22, A7E2BB0F38DF, 42, 1A0290800D7, 7042, 81A0290800D7, 7442
The band confirmation and allocation is certainly confusing as the SA_NR5G_band_1_64
is 7442
which is based on this:
So base on this 7000 = 1000 (n77) + 2000(n78) + 4000(n79) , so our band should be selected and "find able". Perhaps the cell selection just takes a long time here.
also apparently FW versions matter:

HOST FIRMWARE : A0R.000021 SLOT STATUS CARRIER VERSION TMCFG 1 Activated Generic M0R.000002 2071
OK
like the looks of "Generic" for carrier.
there are a lot of rules:
<img width="599" alt="image" src="https://github.com/user-attachments/assets/1998f912-59f3-4332-bc4a-9ccb46582c8d" />
## Lets control the 5G bands first: AT#5GCTL - Control the 5G bands
```bash
at#5gctl?
#5GCTL: 2

So I suppose we are doing the right thing. We want SA 5G FR1. So this is correct to be in mode 2.
Lets try to set the band to be just n78 and reboot the modem:
at#bnd=0,0,1,0,0,0,0,2000
OK
at#reboot
OK
# wait a bit for the modem to reboot.
at#bnd?
#BND: 0,0,1,0,0,0,0,2000
OH? We got SOME ACTIVITY!!!

and the AMF log:
02/16 12:18:41.752: [amf] INFO: InitialUEMessage (../src/amf/ngap-handler.c:435)
02/16 12:18:41.752: [amf] INFO: [Added] Number of gNB-UEs is now 1 (../src/amf/context.c:2698)
02/16 12:18:41.752: [amf] INFO: RAN_UE_NGAP_ID[0] AMF_UE_NGAP_ID[4] TAC[1] CellID[0x66c000] (../src/amf/ngap-handler.c:596)
02/16 12:18:41.752: [amf] INFO: [suci-0-001-01-0-0-0-0123456789] known UE by SUCI (../src/amf/context.c:1863)
02/16 12:18:41.752: [gmm] INFO: Registration request (../src/amf/gmm-sm.c:1224)
02/16 12:18:41.752: [gmm] INFO: [suci-0-001-01-0-0-0-0123456789] SUCI (../src/amf/gmm-handler.c:174)
02/16 12:18:41.755: [sbi] WARNING: [AUSF] (SCP-discover) NF has already been added [49353378-e761-41ef-9b70-0b901bc3b1d3] (../lib/sbi/path.c:217)
02/16 12:18:41.755: [sbi] WARNING: [49353378-e761-41ef-9b70-0b901bc3b1d3] NF Instance updated [type:AUSF validity:0s] (../lib/sbi/path.c:227)
02/16 12:18:41.755: [sbi] INFO: [49353378-e761-41ef-9b70-0b901bc3b1d3] NF Instance setup [type:AUSF validity:0s] (../lib/sbi/path.c:227)
02/16 12:18:41.755: [amf] WARNING: NF EndPoint(addr) updated [127.0.0.11:7777] (../src/amf/nausf-handler.c:130)
02/16 12:18:41.755: [amf] INFO: NF EndPoint(addr) setup [127.0.0.11:7777] (../src/amf/nausf-handler.c:130)
02/16 12:18:41.834: [sbi] WARNING: [UDM] (SCP-discover) NF has already been added [493580ee-e761-41ef-b96f-9d1d317607db] (../lib/sbi/path.c:217)
02/16 12:18:41.834: [sbi] WARNING: [493580ee-e761-41ef-b96f-9d1d317607db] NF Instance updated [type:UDM validity:0s] (../lib/sbi/path.c:227)
02/16 12:18:41.834: [sbi] INFO: [493580ee-e761-41ef-b96f-9d1d317607db] NF Instance setup [type:UDM validity:0s] (../lib/sbi/path.c:227)
02/16 12:18:41.835: [sbi] WARNING: [UDM] (SCP-discover) NF has already been added [493580ee-e761-41ef-b96f-9d1d317607db] (../lib/sbi/path.c:217)
02/16 12:18:41.835: [sbi] WARNING: [493580ee-e761-41ef-b96f-9d1d317607db] NF Instance updated [type:UDM validity:0s] (../lib/sbi/path.c:227)
02/16 12:18:41.835: [sbi] INFO: [493580ee-e761-41ef-b96f-9d1d317607db] NF Instance setup [type:UDM validity:0s] (../lib/sbi/path.c:227)
02/16 12:18:41.837: [amf] WARNING: NF EndPoint(addr) updated [127.0.0.13:7777] (../src/amf/nudm-handler.c:355)
02/16 12:18:41.837: [amf] INFO: NF EndPoint(addr) setup [127.0.0.12:7777] (../src/amf/nudm-handler.c:355)
02/16 12:18:41.839: [amf] WARNING: NF EndPoint(addr) updated [127.0.0.12:7777] (../src/amf/npcf-handler.c:143)
02/16 12:18:41.839: [amf] INFO: NF EndPoint(addr) setup [127.0.0.13:7777] (../src/amf/npcf-handler.c:143)
02/16 12:18:42.028: [gmm] INFO: [imsi-001010123456789] Registration complete (../src/amf/gmm-sm.c:2411)
02/16 12:18:42.028: [amf] INFO: [imsi-001010123456789] Configuration update command (../src/amf/nas-path.c:607)
02/16 12:18:42.028: [gmm] INFO: UTC [2025-02-16T17:18:42] Timezone[0]/DST[0] (../src/amf/gmm-build.c:551)
02/16 12:18:42.028: [gmm] INFO: LOCAL [2025-02-16T12:18:42] Timezone[-18000]/DST[0] (../src/amf/gmm-build.c:556)
02/16 12:18:44.788: [amf] INFO: UE Context Release [Action:2] (../src/amf/ngap-handler.c:1731)
02/16 12:18:44.788: [amf] INFO: RAN_UE_NGAP_ID[0] AMF_UE_NGAP_ID[4] (../src/amf/ngap-handler.c:1732)
02/16 12:18:44.788: [amf] INFO: SUCI[suci-0-001-01-0-0-0-0123456789] (../src/amf/ngap-handler.c:1736)
02/16 12:18:44.788: [amf] INFO: [Removed] Number of gNB-UEs is now 0 (../src/amf/context.c:2705)
and in modem manager:
eric@M70q:~$ mmcli -L
/org/freedesktop/ModemManager1/Modem/13 [Telit] FN990A28
eric@M70q:~$ mmcli -m 13
----------------------------------
General | path: /org/freedesktop/ModemManager1/Modem/13
| device id: e2ba8a4d1fbb9ef05a702bd862431f1a04203dd3
----------------------------------
Hardware | manufacturer: Telit
| model: FN990A28
| firmware revision: M0R.000002
| carrier config: default
| h/w revision: 1.00
| supported: gsm-umts, lte, 5gnr
| current: gsm-umts, lte, 5gnr
| equipment id: 359918921163028
----------------------------------
Status | lock: sim-pin2
| unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10)
| state: registered
| power state: on
| access tech: 5gnr
| signal quality: 50% (recent)
we are "REGISTERED!"
open5GS Settings:

eric@M70q:~$ mmcli -L
/org/freedesktop/ModemManager1/Modem/15 [Telit] FN990A28
eric@M70q:~$ sudo mmcli -m 15 --simple-connect='apn=internet,ip-type=ipv4v6'
successfully connected the modem

eric@M70q:~$ mmcli -m 15
----------------------------------
Bearer | paths: /org/freedesktop/ModemManager1/Bearer/2
eric@M70q:~$ sudo mmcli -m 15 -b 2
------------------------------------
General | path: /org/freedesktop/ModemManager1/Bearer/2
| type: default
------------------------------------
Status | connected: yes
| suspended: no
| multiplexed: no
| interface: wwan0
| ip timeout: 20
------------------------------------
Properties | apn: internet
| roaming: allowed
| ip type: ipv4v6
------------------------------------
IPv4 configuration | method: static
| address: 10.45.0.5
| prefix: 30
| gateway: 10.45.0.6
| dns: 8.8.8.8, 8.8.4.4
| mtu: 1400
------------------------------------
Statistics | start date: 2025-02-16T17:41:42Z
| duration: 570
| bytes rx: 420
| attempts: 1
| total-duration: 570
| total-bytes rx: 420
But still can't ping.... hmmm.....
AT#ENADB=1
you should be able to see the modem in devices:
eric@M70q:~$ adb devices
List of devices attached
17ebc604 no permissions (user in plugdev group; are your udev rules wrong?); see [http://developer.android.com/tools/device.html]
looks like there is something here to fix...
found this: https://atoma.spb.ru/sites/default/files/documents/telit_appzone_linux_user_guide.pdf

eric@M70q:~$ adb kill-server
eric@M70q:~$ adb root
* daemon not running; starting now at tcp:5037
* daemon started successfully
adbd is already running as root
eric@M70q:~$ adb devices
List of devices attached
17ebc604 device
eric@M70q:~$ adb shell
sdxlemur login:
this seemed to do the trick
appears you can't log in.. but this is a meant for the Telit IoT Zone. where using their app you can make android applications that run and show the outputs to the user. So for now you can't actually get into the ads part of the phone and run apps, but you might be able to run them from here.
The FN990A series uses a MHF4 adapter for the RF connections, this is different than u.FL see this picture: