Fibocom FM350-GL Support

Hey. So ive been trying to get the FM350-GL modem working with openwrt for a while now. Ive been using the WG1608 router for this and ive been compiling images myself. Ive tried compiling with the testing kernel version (5.15), enabling all MHI related packages and all WWAN packages, compiling for x86 and running it on a mini pc with a NGFF to mPCIe adaptor and even going as far as compiling the newest modem manager v1.21.1 but still no luck. using lsusb it shows the the modem IS detected, but modem manager doesnt seem to see it. Its worth pointing out that when i tried using ROOter/ Golden Orb , it shows the modem is present but not connected and it cant open ttyUSB to talk to it. Im sure that the modem does work with openwrt (correct me if im wrong) as ive seen on other forums people mentioning theyre using it on linux based systems. Any help would be appreciated!

I would doubt that very highly. Nowhere that I can find mentions the FM350 and OpenWrt and only a page from IBM detailing how to make it work with Linux. That involved updating the kernel and updating a number of things using Docker. Then mmcli would work.

For ROOter I have patched the Option driver to recognize the modem, which even mainstream Linux doesn't have, so it has serial ports and you can run AT Commands. This modem has 2 different modes with different PIDs and different locations for the AT Command port. Both modes are RNDIS.

It will accept some of the AT Commands that other Fibocom modems do but not all of them. The big one it doesn't support is GTRNDIS which the other modems use to connect. Another is GTRAT so you can't find out if it is LTE, 5G NSA or 5G SA. Or set these modes.

Without knowing the command to make it connect you are lost. The only mention of an AT Command manual is from TechShip and must be bought. Nothing from Fibocom I could find. So at the moment is of no use in OpenWrt.

Here is a user manual for the fm350
https://fccid.io/ZMOFM350GL/User-Manual/FM350-GL-UserManual-5238786.pdf

I'm new at this but to me it looks like the commands for connecting the sim are on page "31"
and there also looks to be several other commands as well.

Thanks for the manual. But it is a hardware manual and not an AT Command manual.

The command you are looking at is one to turn SIM hot plugging on and off. This is for certain routers whose hardware design stops the reading of the SIM. It has nothing to do with connecting except you may need to turn this off to get the modem going.

Still looking.

Yes. It can't be enabled when adding usbid "0e8d 7126" or "0e8d 7127" to /sys/bus/usb/...../usb-serial/new-id manually on Linux/Openwrt/Ubuntu.There is an RNDIS interface before adding usbid. But it will crash and auto-reconnect repeatly so that we can't access to AT console.
Only AT console/Log/ADB/DEBUG can be accessed on WINDOWS through MTK drivers. Any suggestions here?

Hey guys, any luck with this? I managed to get AT interface, SIM recognised, seems to register with "O2 - UK" provider, I can also send SMS, but I can not get internet connectivity. Unsure how to use the RNDIS (virtual ethernet) to connect ...

Do you have it connected over USB? If this is the case, please show the output of
cat /sys/kernel/debug/usb/devices

Hey Andrew,

Yes it's over USB. I also finally got it to connect in the end. Here is what you've asked for and also my process of getting this to work:

OS: Arch Linux

# uname -r
6.6.1-zen1-1-zen

Output of "/sys/kernel/debug/usb/devices" filtered to the module:

T:  Bus=04 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#=  3 Spd=5000 MxCh= 0
D:  Ver= 3.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs=  1
P:  Vendor=0e8d ProdID=7127 Rev= 0.01
S:  Manufacturer=Fibocom Wireless Inc.
S:  Product=FM350-GL
C:* #Ifs=10 Cfg#= 1 Atr=a0 MxPwr=896mA
A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=ff Driver=rndis_host
E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=125us
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=(none)
E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=87(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=06(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=88(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=07(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=89(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=08(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
E:  Ad=8a(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=09(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms

Some extra info:

# lsusb
Bus 004 Device 004: ID 0e8d:7127 MediaTek Inc. FM350-GL

# lsusb -t
/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 10000M
    |__ Port 002: Dev 002, If 0, Class=Hub, Driver=hub/4p, 5000M
    |__ Port 003: Dev 004, If 0, Class=Communications, Driver=rndis_host, 5000M
    |__ Port 003: Dev 004, If 1, Class=CDC Data, Driver=rndis_host, 5000M
    |__ Port 003: Dev 004, If 2, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 3, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 4, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 5, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 6, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 7, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 8, Class=Vendor Specific Class, Driver=[none], 5000M
    |__ Port 003: Dev 004, If 9, Class=Vendor Specific Class, Driver=[none], 5000M

As so far nothing will work so here are the steps I took:

Let's add the AT console port manually:

# echo 0e8d 7127 > /sys/bus/usb-serial/drivers/generic/new_id

Then I get console:

# lsusb
Bus 004 Device 004: ID 0e8d:7127 MediaTek Inc. FM350-GL

# lsusb -t
/:  Bus 004.Port 001: Dev 001, Class=root_hub, Driver=xhci_hcd/4p, 10000M
    |__ Port 002: Dev 002, If 0, Class=Hub, Driver=hub/4p, 5000M
    |__ Port 003: Dev 004, If 0, Class=Communications, Driver=rndis_host, 5000M
    |__ Port 003: Dev 004, If 1, Class=CDC Data, Driver=rndis_host, 5000M
    |__ Port 003: Dev 004, If 2, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 3, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 4, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 5, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 6, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 7, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 8, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
    |__ Port 003: Dev 004, If 9, Class=Vendor Specific Class, Driver=usbserial_generic, 5000M
# cat /sys/kernel/debug/usb/devices
T:  Bus=04 Lev=01 Prnt=01 Port=02 Cnt=02 Dev#=  4 Spd=5000 MxCh= 0
D:  Ver= 3.00 Cls=ef(misc ) Sub=02 Prot=01 MxPS= 9 #Cfgs=  1
P:  Vendor=0e8d ProdID=7127 Rev= 0.01
S:  Manufacturer=Fibocom Wireless Inc.
S:  Product=FM350-GL
C:* #Ifs=10 Cfg#= 1 Atr=a0 MxPwr=896mA
A:  FirstIf#= 0 IfCount= 2 Cls=e0(wlcon) Sub=01 Prot=03
I:* If#= 0 Alt= 0 #EPs= 1 Cls=02(comm.) Sub=02 Prot=ff Driver=rndis_host
E:  Ad=82(I) Atr=03(Int.) MxPS=  64 Ivl=125us
I:* If#= 1 Alt= 0 #EPs= 2 Cls=0a(data ) Sub=00 Prot=00 Driver=rndis_host
E:  Ad=81(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=01(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=83(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 3 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=84(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=03(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 4 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=85(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=04(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 5 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=42 Prot=01 Driver=usbserial_generic
E:  Ad=86(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=05(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 6 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=87(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=06(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 7 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=88(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=07(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 8 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=89(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=08(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms
I:* If#= 9 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=00 Prot=00 Driver=usbserial_generic
E:  Ad=8a(I) Atr=02(Bulk) MxPS=1024 Ivl=0ms
E:  Ad=09(O) Atr=02(Bulk) MxPS=1024 Ivl=0ms

The AT console always seem to get attached to /dev/ttyUSB4. So I can attach using the following command:

# minicom -D /dev/ttyUSB4

Then connect using these AT commands:

AT+CGDCONT=1,"IP","mobile.o2.co.uk"
AT+CGACT=1,1

Then to get the IP address:

AT+CGPADDR=1

I then set the IP manually and the gateway to "x.x.x.1" with subnet of /24 and the connection works.

Please give it a try if you have the module and let me know how it works

Thank you for the information.
I suggest using option driver,
echo "0e8d 7127 ff" > /sys/bus/usb-serial/drivers/option1/new_id

Your AT command port should be If#= 6, in the absence of other tty's it will be mapped to ttyUSB4, but with properly patched driver it should be ttyUSB3, as currently you have your ADB interface (If#= 5) occupied by the serial driver as well.

Typically in such setup the gateway IP is not needed, as well as the correct netmask. You can use a device like wwan0 as your default gateway.

Can you confirm that DHCP does not work with this modem, so manual address configuration is the only option?

If you have a chance, please check:

AT+GTUSBMODE?
AT+GTUSBMODE=?

It should be 40 and 41, but who knows :wink:

option driver doesn't seem to work for my modem.

Here are AT command results:

AT+GTUSBMODE?
+GTUSBMODE: 41

OK
AT+GTUSBMODE=?
+GTUSBMODE: (40,41)
1 Like

Interested too in building a router with FM350-GL HP module using ROOter firmware. Is module recognised correctly or need some alternative configs?

You should ask in their (ROOter) forum.

Hi,
I found at commands and other documentation about fibocom FM350.
This is the link to download:

This is the file list:

fibocom_design_guide_rf_antenna_v1.1.0.pdf
fibocom_fm350_at_commands_v2.2.pdf
fibocom_fm350_usb_driver_install_user_guide_v1.0.2.pdf
fibocom_fm350gl_hardware_guide_for_lenovo_v1.0.1.pdf
fibocom_fm350gl_hardware_guide_generic_v1.0.8.pdf
Fibocom FM350 cheap 5g module _ Page 7 _ ISPreview UK Forum.pdf

if you're are using the module with x86_64 system on PCIe mode the device working perfectly. i manage to make the module working with Openwrt on PCIe line. The problem with the module its FCC lock. i couldn't get the AT port working on PCIe Line. To run the devices in openwrt you have to compile the MT7xx driver from linux kernel.

1 Like

So with a mini pc with Linux should work correctly? Maybe HP modules FCC unlocked yet...

Yes. In mini PC the module should work fine as long as the Openwrt Kernel 6.1 above with MT7xxand Modem Manager v1.20+. After that add this script to unlock FCC in modem manager. (https://gitlab.freedesktop.org/mobile-broadband/ModemManager/-/blob/main/data/dispatcher-fcc-unlock/14c3?ref_type=heads)

Can someone check if there is any response to the following AT command please
at@nvm:fix_cat_fcclock.fcclock_mode?

For me I just get an error with that command.

at@nvm:fix_cat_fcclock.fcclock_mode?
+CME ERROR: 100
1 Like

Thanks for checking.

2 posts were split to a new topic: Setting up Fibocom FM350-GL modem on my ZBT WG1608