Version 2 (modified by 8 days ago) ( diff ) | ,
---|
-
Flexible Socket Architecture (FSA)
- GW82xx Baseboard
-
GW16FE0 FSA M.2 E-Key Adapter
- Card: Intel 9260 M.2 E-Key WiFi5 (802.11ac) / BT5.1
- Card: LAIRD 453-00048 LWB5+ M.2 E-Key (SDIO/UART) WiFi5 (802.11ac) / BT5.2
- Card: Silex SDMAX M.2 E-Key SDIO/UART WiFi6 / BT5.3
- Card: ublox MAYA-W2 M.2 E-Key SDIO/UART/PCM/SPI tri-radio WiFi6 / …
- Card: ublox JODY M.2 E-Key PCIe/UART/PCM dual-radio WiFi6 / BT 5.3 combo
- Card: AzureWave AW-CM276MA M.2 E-Key PCIE-UART WiFi5 / BT 5.3 combo
- Card: Silex SX-PCEAX PCI/USB WiFi6E / BT 5.2 combo card
- GW16FB0 FSA M.2 B-Key Adapter
- GW16FM0 FSA to M.2 M-Key Adapter
- GW16FP0 FSA to Mini-PCIe Adapter
Flexible Socket Architecture (FSA)
Flexible Socket Architecture is a custom connector form-factor present on the Gateworks 'Venice-Flex' product line currently consisting of the following boards:
- GW82xx
The goal of the FSA socket is to bridge the gap between the various socket formats:
- MiniPCIe
- M.2 E-Key
- M.2 B-Key
- M.2 M-Key
The 'FSA Header' on the VeniceFLEX SBC can connect to several different adapters, including the following:
- GW16FE0 - FSA to M.2 A-E Key (WiFi)
- GW16FB0 - FSA to M.2 B Key (Modems)
- GW16FM0 - FSA to M.2 M Key (NVME)
- GW16FP0 - FSA to Mini-PCIe (WiFi / Cellular / Etc)
These adapters and various radios are detailed below.
GW82xx Baseboard
The GW82xx has two FSA sockets:
- FSA1 (J29): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), SPI, Power Enable
- FSA2 (J30): USB2.0, USB3.0, PCIE3.0 (2x 1x lanes), PCM, UART (4-wire), SPI, SDIO (1.8V), GPIO (3x), Power Enable
GW16FE0 FSA M.2 E-Key Adapter
The GW16FE0 E-Key Adapter provides an M.2 E-Key socket with the following:
- I2C (1.8V CLK/SDA/ALERT#)
- USB2.0
- PCIE3.0 (with PERST# 3.3V)
- PCM (1.8V)
- UART (1.8V 4-wire)
- SPI (1.8V 1 chip-select)
- GPIO1 (W_DISALBE1# 3.3V)
- GPIO2 (W_DISABLE2# 3.3V)
- GPIO4 (ALERT# 1.8V)
- LED1# (OD Yellow)
- LED2# (OD Yellow)
- Power Enable (baseboard GPIO)
Pinout (from baseboard perspective):
pin | signal | signal | pin |
---|---|---|---|
1 | GND | 3.3V | 2 |
3 | USB_DP | 3.3V | 4 |
5 | USB_DN | LED1#(OD) | 6 |
7 | GND | PCM_CLK(I/O)(1.8V) | 8 |
9 | SDIO_CLK(O)(1.8V) | PCM_SYNC(I/O)(1.8V) | 10 |
11 | SDIO_CMD(O)(1.8V) | PCM_IN(I)(1.8V) | 12 |
13 | SDIO_D0(O)(1.8V) | PCM_OUT(O)(1.8V) | 14 |
15 | SDIO_D1(O)(1.8V) | LED2#(OD) | 16 |
17 | SDIO_D2(O)(1.8V) | GND | 18 |
19 | SDIO_D3(O)(1.8V) | NC | 20 |
21 | NC | UART_RXD(I)(1.8V) | 22 |
23 | SDIO_RST#(O)(1.8V) | KEY | 24 |
25 | KEY | KEY | 26 |
27 | KEY | KEY | 28 |
29 | KEY | KEY | 30 |
31 | KEY | UART_TXD(O)(1.8V) | 32 |
33 | GND | UART_CTS(I)(1.8V) | 34 |
35 | PCIE_TXP | UART_RTS(O)(1.8V) | 36 |
37 | PCIE_TXN | SPI_MOSI(O)(1.8V)2 | 38 |
39 | GND | SPI_MISO(I)(1.8V)2 | 40 |
41 | PCIE_RXP | SPI_CLK(O)(1.8V)2 | 42 |
43 | PCIE_RXN | COEX11 | 44 |
45 | GND | COEX21 | 46 |
47 | PCIE_CKP | COEX31 | 48 |
49 | PCIE_CKN | NC | 50 |
51 | GND | PERST#(O)(3.3V) | 52 |
53 | NC | W_DISABLE2(O)(3.3V) | 54 |
55 | NC | W_DISABLE1(O)(3.3V) | 56 |
57 | GND | I2C_SDA(I/O)(1.8V) | 58 |
59 | NC | I2C_CLK(O)(1.8V) | 60 |
61 | NC | ALERT#(I)(1.8V) | 62 |
63 | GND | SPI_SS0(O)(1.8V)2 | 64 |
65 | NC | NC | 66 |
67 | NC | NC | 68 |
69 | GND | NC | 70 |
71 | NC | 3.3V | 72 |
73 | NC | 3.3V | 74 |
75 | GND |
- The COEX[1..3] signals are ganged to each FSA socket on the baseboard
- There are no SPI pins defined in the M.2 specification; MOSI/MSIO/CLK above are defined as 'VENDOR SPECIFIED', SPI_SS0 (pin 64) is defined as RESERVED in v1-v3 of the M.2 specification and as VIO 1.8V in the v4 specification, and ALERT# is defined as an I2C interrupt which can also be used as a SPI interrupt.
Card: Intel 9260 M.2 E-Key WiFi5 (802.11ac) / BT5.1
The Intel 9260 M.2 E-Key combo card uses PCI for WiFi and USB2.0 for Bluetooth
Pin Details:
- W_DISABLE1# WLAN_EN (drive high to enable WiFi RF; low to disable)
- W_DISABLE2# BT_EN (drive high to enable USB/BT)
WiFi details:
- WiFi5 802.11ac
- PCIe 0x8086:0x2526
- supported by iwlwifi; drivers/net/wireless/intel/iwlwifi CONFIG_IWLWIFI
- registers 6 MSI interrupts
- Example usage:
- driver
[ 8.222036] iwlwifi 0000:07:00.0: enabling device (0000 -> 0002) [ 8.287908] iwlwifi 0000:07:00.0: Detected crf-id 0x2816, cnv-id 0x1000200 wfpm id 0x80000000 [ 8.287937] iwlwifi 0000:07:00.0: PCI dev 2526/0014, rev=0x321, rfid=0x105110 [ 8.288081] iwlwifi 0000:07:00.0: _request_firmware iwlwifi-9260-th-b0-jf-b0-46.ucode [ 8.308533] iwlwifi 0000:07:00.0: Loaded FW: iwlwifi-9260-th-b0-jf-b0-46.ucode, sha256: 05f4c12514fddfd56fea660b3d2eb6b6e6f 4a87a324d5d40464050312ddca911 [ 8.308682] iwlwifi 0000:07:00.0: WRT: Overriding region id 0 [ 8.308693] iwlwifi 0000:07:00.0: WRT: Overriding region id 1 [ 8.308701] iwlwifi 0000:07:00.0: WRT: Overriding region id 2 [ 8.308706] iwlwifi 0000:07:00.0: WRT: Overriding region id 3 [ 8.308711] iwlwifi 0000:07:00.0: WRT: Overriding region id 4 [ 8.308717] iwlwifi 0000:07:00.0: WRT: Overriding region id 6 [ 8.308722] iwlwifi 0000:07:00.0: WRT: Overriding region id 8 [ 8.308728] iwlwifi 0000:07:00.0: WRT: Overriding region id 9 [ 8.308733] iwlwifi 0000:07:00.0: WRT: Overriding region id 10 [ 8.308738] iwlwifi 0000:07:00.0: WRT: Overriding region id 11 [ 8.308744] iwlwifi 0000:07:00.0: WRT: Overriding region id 15 [ 8.308750] iwlwifi 0000:07:00.0: WRT: Overriding region id 16 [ 8.308755] iwlwifi 0000:07:00.0: WRT: Overriding region id 18 [ 8.308761] iwlwifi 0000:07:00.0: WRT: Overriding region id 19 [ 8.308766] iwlwifi 0000:07:00.0: WRT: Overriding region id 20 [ 8.308772] iwlwifi 0000:07:00.0: WRT: Overriding region id 21 [ 8.308778] iwlwifi 0000:07:00.0: WRT: Overriding region id 28 [ 8.309979] iwlwifi 0000:07:00.0: _request_firmware iwl-debug-yoyo.bin [ 8.310663] iwlwifi 0000:07:00.0: loaded firmware version 46.7e3e4b69.0 9260-th-b0-jf-b0-46.ucode op_mode iwlmvm [ 8.732849] iwlwifi 0000:07:00.0: Detected Intel(R) Wireless-AC 9260 160MHz, REV=0x321 [ 8.890083] iwlwifi 0000:07:00.0: reporting RF_KILL (radio disabled) [ 8.945928] iwlwifi 0000:07:00.0: base HW address: d8:3b:bf:ba:5e:a5, OTP minor version: 0x4 root@noble-venice:~# ls -l /sys/class/net/wlan0 lrwxrwxrwx 1 root root 0 Oct 28 19:49 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00 .0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan0
- driver
Bluetooth details:
- Bluetooth 5.1
- USB2.0: 0x8087:0x0025 (needs W_DISABLE2# BT_EN asserted high)
- supported by btusb; drivers/bluetooth/btusb.c CONFIG_BT_HCIBTUSB
Card: LAIRD 453-00048 LWB5+ M.2 E-Key (SDIO/UART) WiFi5 (802.11ac) / BT5.2
The LAIRD 453-00048 LWB5+ M.2 E-Key combo radio uses SDIO for WiFi and UART for Bluetooth and is based on the LAIRD 453-00047 module. The module on this board is resistor strapped to select the 1.8V SDIO for WiFi and USB for Bluetooth.
See:
Pin Considerations:
- W_DISABLE1# WLAN_EN (needs to be asserted high for WiFi)
- W_DISABLE2# BT_EN (needs to be asserted high for Bluetooth)
A device-tree overlay is required to bind the proper wifi and bluetooth drivers:
&usdhc1 { wifi@0 { compatible = "cypress,cyw4373-fmac", "brcm,bcm4329-fmac"; reg = <0>; }; }; &uart3 { bluetooth { compatible = "brcm,bcm4330-bt"; }; };
WiFi Details:
- WiFi5 802.11ac
- SDIO 0x02d0:0x4373 SDR104
# cat /sys/bus/mmc/devices/mmc0\:0001/{vendor,device} 0x02d0 0x4373 # dmesg | grep mmc0 [ 1.012822] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA [ 1.041288] mmc_sdio_init_card mmc0 quirks=0x0 ocr_card=0x300000 (1.8v=1) [ 1.048092] mmc_sdio_init_card mmc0 setting voltage to 1.8V [ 1.208613] mmc0: new ultra high speed SDR104 SDIO card at address 0001 # cat /sys/kernel/debug/mmc0/ios clock: 25000000 Hz actual clock: 25000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)
- firmware: https://www.ezurio.com/support/faqs/what-are-all-these-firmware-files-sterling-lwb5
- have to symlink the generic brcmfmac4373-sdio.bin firmware to your board specific firmware? (brcmfmac4373-sdio.gateworks,imx8mp-gw82xx-2x.bin)
- supported by brcmfmac driver; ./drivers/net/wireless/broadcom/brcm80211/brcmfmac CONFIG_BRCMFMAC
Bluetooth Details:
- Bluetooth 5.2
- supported by hci_bcm driver; drivers/bluetooth/hci_bcm.c CONFIG_BT_BCM
Card: Silex SDMAX M.2 E-Key SDIO/UART WiFi6 / BT5.3
The Silex SDMAX Wifi6+BT5.3 802.11ax M.2 E-Key combo radio is based on the NXP IW611 chip using SDIO for wifi and UART for bluetooth:
- https://www.silextechnology.com/connectivity-solutions/embedded-wireless/sx-sdmax
- https://www.silextechnology.com/productspecs/sx-sdmax-product-specification
Pin Details:
- W_DISABLE1# PDn (drive low to power down)
- W_DISABLE2# BT_RESET (drive low to reset BT)
!Wifi details:
- Wifi6 802.11ax
- SDIO 0x0471:0x0204 SDR104
# dmesg | grep mmc0 [ 1.007858] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA [ 1.119413] mmc0: new ultra high speed SDR104 SDIO card at address 0001 # cat /sys/bus/mmc/devices/mmc0\:0001/{vendor,device} 0x0471 0x0204 # cat /sys/kernel/debug/mmc0/ios clock: 25000000 Hz actual clock: 25000000 Hz vdd: 21 (3.3 ~ 3.4 V) bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)
- supported by the mwifiex driver
- as of Linux 6.6 at least you need the out-of-tree mwifiex driver; the out-of-tree mwifiex driver has support for 5.4, 5.10, 5.15, 6.1, 6.6 (based on NXP bsp branch naming)
# get firmware (out-of-tree mwifiex requires a conf file) git clone https://github.com/nxp-imx/imx-firmware.git cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_IW612_SD/* /lib/firmware/nxp/ # build driver git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0 make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src # load driver insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf [ 86.896141] wlan: Loading MWLAN driver [ 86.900322] wlan: Register to Bus Driver... [ 86.904773] vendor=0x0471 device=0x0205 class=0 function=1 [ 86.910432] Attach moal handle ops, card interface type: 0x109 [ 86.916324] rps set to 0 from module param [ 86.920471] wlan_sdio mmc0:0001:1: _request_firmware nxp/wifi_mod_para.conf [ 86.931066] wlan_sdio mmc0:0001:1: Loaded FW: nxp/wifi_mod_para.conf, sha256: 8ab3a368b9a8b8003de96c94b27847d9cfc6a428248af35b2a9d4e3f53460993 [ 86.943911] SDIW612: init module param from usr cfg [ 86.948864] card_type: SDIW612, config block: 0 [ 86.953430] cfg80211_wext=0xf [ 86.956408] max_vir_bss=1 [ 86.959099] cal_data_cfg=none [ 86.962116] ps_mode = 1 [ 86.964589] auto_ds = 1 [ 86.967051] host_mlme=enable [ 86.969946] fw_name=nxp/sduart_nw61x_v1.bin.se [ 86.974434] SDIO: max_segs=128 max_seg_size=65535 [ 86.979160] rx_work=1 cpu_num=4 [ 86.982319] Enable moal_recv_amsdu_packet [ 86.986376] Attach mlan adapter operations.card_type is 0x109. [ 86.992806] wlan: Enable TX SG mode [ 86.996337] wlan: Enable RX SG mode [ 87.003840] Request firmware: nxp/sduart_nw61x_v1.bin.se [ 87.009193] wlan_sdio mmc0:0001:1: _request_firmware nxp/sduart_nw61x_v1.bin.se [ 87.027218] wlan_sdio mmc0:0001:1: Loaded FW: nxp/sduart_nw61x_v1.bin.se, sha256: 3a863f0a2f457ecb1fb838c66fff074fa967545b78397a1ef14b2289e85c24fd [ 87.326643] Wlan: FW download over, firmwarelen=1004248 downloaded 916048 [ 87.731821] WLAN FW is active [ 87.734802] on_time is 87519080591 [ 87.757772] VDLL image: len=88200 [ 87.761457] fw_cap_info=0x487cff03, dev_cap_mask=0xffffffff [ 87.767086] uuid: af55156e818b5e64a916b21032b7c73b [ 87.771916] max_p2p_conn = 8, max_sta_conn = 16 [ 87.797069] Register NXP 802.11 Adapter mlan0 [ 87.801642] wlan: uap%d set max_mtu 2000 [ 87.807759] Register NXP 802.11 Adapter uap0 [ 87.823977] Register NXP 802.11 Adapter wfd0 [ 87.829691] wlan: version = SDIW612---18.99.2.p66.17-MM6X18437.p3-GPL-(FP92) [ 87.844678] wlan: Register to Bus Driver Done [ 87.849116] wlan: Driver loaded successfully root@noble-venice:~# ls /sys/class/net/ can0 can1 eth0 eth1 lo mlan0 uap0 wfd0
- as of Linux 6.6 at least you need the out-of-tree mwifiex driver; the out-of-tree mwifiex driver has support for 5.4, 5.10, 5.15, 6.1, 6.6 (based on NXP bsp branch naming)
Bluetooth details:
- Bluetooth 5.3 BR/EDR/LE
- the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/uartspi_n61x_v1.bin.se) for bluetooth operation
- supported by hciuart driver; drivers/bluetooth/hci_* CONFIG_BT_HCIUART* (must start at 115200bd then can switch to 3000000bd using hci vendor command)
# start out at 115200 bd root@noble-venice:~# hciattach /dev/ttymxc2 any 115200 flow [ 319.957921] Bluetooth: Core ver 2.22 [ 319.961601] NET: Registered PF_BLUETOOTH protocol family [ 319.966938] Bluetooth: HCI device and connection manager initialized [ 319.973321] Bluetooth: HCI socket layer initialized [ 319.978216] Bluetooth: L2CAP socket layer initialized [ 319.983296] Bluetooth: SCO socket layer initialized [ 320.034524] Bluetooth: HCI UART driver ver 2.3 [ 320.039019] Bluetooth: HCI UART protocol H4 registered [ 320.044176] Bluetooth: HCI UART protocol BCSP registered [ 320.049592] Bluetooth: HCI UART protocol LL registered [ 320.054756] Bluetooth: HCI UART protocol ATH3K registered [ 320.060276] Bluetooth: HCI UART protocol Three-wire (H5) registered [ 320.066807] Bluetooth: HCI UART protocol Intel registered [ 320.072441] Bluetooth: HCI UART protocol Broadcom registered [ 320.078188] Bluetooth: HCI UART protocol QCA registered [ 320.083442] Bluetooth: HCI UART protocol AG6XX registered [ 320.088905] Bluetooth: HCI UART protocol Marvell registered Device setup complete [ 320.310779] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 320.316127] Bluetooth: BNEP filters: protocol multicast [ 320.321436] Bluetooth: BNEP socket layer initialized [ 320.332546] Bluetooth: MGMT ver 1.22 root@noble-venice:~# hciconfig hci0: Type: Primary Bus: UART BD Address: 1C:BC:EC:13:D0:25 ACL MTU: 1021:7 SCO MTU: 120:6 UP RUNNING RX bytes:860 acl:0 sco:0 events:60 errors:0 TX bytes:2780 acl:0 sco:0 commands:60 errors:0 root@noble-venice:~# hciconfig hci0 up root@noble-venice:~# hciconfig hci0 hci0: Type: Primary Bus: UART BD Address: 1C:BC:EC:13:D0:25 ACL MTU: 1021:7 SCO MTU: 120:6 UP RUNNING RX bytes:860 acl:0 sco:0 events:60 errors:0 TX bytes:2780 acl:0 sco:0 commands:60 errors:0 root@noble-venice:~# hcitool -i hci0 scan Scanning ... Scanning ... 0C:C4:13:19:C4:64 Pixel 6 # now lets switch to 3mbd root@noble-venice:~# hcitool -i hci0 cmd 0x3f 0x0009 0xc0 0xc6 0x2d 0x00 < HCI Command: ogf 0x3f, ocf 0x0009, plen 4 C0 C6 2D 00 > HCI Event: 0x0e plen 4 01 09 FC 00 root@noble-venice:~# killall hciattach [ 392.862476] Bluetooth: hci0: sending frame failed (-49) [ 392.867770] Bluetooth: hci0: Opcode 0x0c03 failed: -49 root@noble-venice:~# hciattach /dev/ttymxc2 any -s 3000000 3000000 flow Device setup complete [ 399.083288] Bluetooth: MGMT ver 1.22 hciconfig hci0 up root@noble-venice:~# hciconfig hci0 hci0: Type: Primary Bus: UART BD Address: 1C:BC:EC:13:D0:25 ACL MTU: 1021:7 SCO MTU: 120:6 UP RUNNING RX bytes:825 acl:0 sco:0 events:55 errors:0 TX bytes:1795 acl:0 sco:0 commands:55 errors:0 root@noble-venice:~# hcitool -i hci0 scan Scanning ... 0C:C4:13:19:C4:64 Pixel 6
- also supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART (make sure to not load the driver until mwifiex has loaded the firmware)
# modprobe btnxpuart [ 137.086491] Bluetooth: Core ver 2.22 [ 137.090174] NET: Registered PF_BLUETOOTH protocol family [ 137.095519] Bluetooth: HCI device and connection manager initialized [ 137.101909] Bluetooth: HCI socket layer initialized [ 137.106805] Bluetooth: L2CAP socket layer initialized [ 137.111891] Bluetooth: SCO socket layer initialized [ 137.337842] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 137.343186] Bluetooth: BNEP filters: protocol multicast [ 137.348445] Bluetooth: BNEP socket layer initialized [ 137.348448] Bluetooth: MGMT ver 1.22^^^ works # hciconfig hci0 up && hcitool -i hci0 scan
- note the btnxpuart driver will load the nxp/uartspi_n61x_v1.bin.se, firmware via hci if mwifiex has not been loaded and wifi is not being used
- btnxpuart initial baudrate must be 115200bd until firmware is loaded at which point it will automatically switch to 3000000bd
- btnxpuart requires a device-tree node (see below)
device-tree for GW8201-A+GW7020+GW16FE0-A revision:
/* FSA1 */ &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; /* reparent clock for up to 4mbd support */ assigned-clocks = <&clk IMX8MP_CLK_UART3>; assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>; cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; status = "okay"; /* if using btnxpuart this is needed; if hci_uart do not define this */ bluetooth { compatible = "nxp,88w8987-bt"; fw-init-baudrate = <115200>; /* Note this is the default if the prop is omitted */ }; }; &iomuxc { pinctrl_uart3: uart3grp { fsl,pins = < MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX 0x140 MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX 0x140 MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08 0x140 /* cts */ MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x140 /* rts */ >; }; };
Card: ublox MAYA-W2 M.2 E-Key SDIO/UART/PCM/SPI tri-radio WiFi6 / BT5.4 / 802.15.4 combo
The ublox MAYA M.2 E-Key tri-radio combo card is based on the NXP IW612 chip using SDIO for WiFi, UART/PCM for Bluetooth, and SPI for 802.15.4 Thread.
See also:
- MAYA-W2_SIM_UBX-22011459.pdf
Pin details:
- W_DISABLE1# FSA_GPIO1 PDn (assert high to power card)
- W_DISABLE2# FSA_GPIO2 BT_RESET (assert high to take BT out of reset)
- LED1/LED2 unused
WiFi details:
- WiFi6 802.11ax dual-band
- SDIO 0x471:0x0204
# dmesg | grep mmc0 [ 1.007660] mmc0: SDHCI controller on 30b40000.mmc [30b40000.mmc] using ADMA [ 1.034751] mmc_sdio_init_card mmc0 quirks=0x0 ocr_card=0x300000 (1.8v=1) [ 1.044515] mmc_sdio_init_card mmc0 setting voltage to 1.8V [ 1.193261] mmc0: new ultra high speed SDR104 SDIO card at address 0001 # cat /sys/bus/mmc/devices/mmc0:0001/{vendor,device} 0x0471 0x0204 # cat /sys/kernel/debug/mmc0/ios clock: 208000000 Hz vdd: 21 (3.3 ~ 3.4 V)[ 55.900039] mlan: module verification failed: signature and/or required key missing - tai nting kernel bus mode: 2 (push-pull) chip select: 0 (don't care) power mode: 2 (on) bus width: 2 (4 bits) timing spec: 6 (sd uhs SDR104) signal voltage: 1 (1.80 V) driver type: 0 (driver type B)
- supported by the mwifiex driver (as of Linux 6.6 at least you need the out-of-tree mwifiex driver)
# get firmware (out-of-tree mwifiex requires a conf file) git clone https://github.com/nxp-imx/imx-firmware.git cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_IW612_SD/* /lib/firmware/nxp/ # build driver git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0 make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src # load driver insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf [ 146.092851] wlan: Loading MWLAN driver [ 146.096939] wlan: Register to Bus Driver... [ 146.101327] vendor=0x0471 device=0x0205 class=0 function=1 [ 146.107030] Attach moal handle ops, card interface type: 0x109 [ 146.112890] rps set to 0 from module param [ 146.117032] wlan_sdio mmc0:0001:1: _request_firmware nxp/wifi_mod_para.conf [ 146.124214] wlan_sdio mmc0:0001:1: Loaded FW: nxp/wifi_mod_para.conf, sha256: f846d679de6e3c32db51cb28df05fac588018d34073e19a255ab45901c9 4f6e7 [ 146.137040] SDIW612: init module param from usr cfg [ 146.141937] card_type: SDIW612, config block: 0 [ 146.146486] cfg80211_wext=0xf [ 146.149462] max_vir_bss=1 [ 146.152100] cal_data_cfg=none [ 146.155097] ps_mode = 1 [ 146.157552] auto_ds = 1 [ 146.160025] host_mlme=enable [ 146.162928] fw_name=nxp/sduart_nw61x_v1.bin.se [ 146.167415] SDIO: max_segs=128 max_seg_size=65535 [ 146.172144] rx_work=1 cpu_num=4 [ 146.175307] Enable moal_recv_amsdu_packet [ 146.179358] Attach mlan adapter operations.card_type is 0x109. [ 146.185634] wlan: Enable TX SG mode [ 146.189150] wlan: Enable RX SG mode [ 146.194044] Request firmware: nxp/sduart_nw61x_v1.bin.se [ 146.199379] wlan_sdio mmc0:0001:1: _request_firmware nxp/sduart_nw61x_v1.bin.se [ 146.218147] wlan_sdio mmc0:0001:1: Loaded FW: nxp/sduart_nw61x_v1.bin.se, sha256: 3a863f0a2f457ecb1fb838c66fff074fa967545b78397a1ef14b228 9e85c24fd [ 146.522473] Wlan: FW download over, firmwarelen=1004248 downloaded 916048 [ 146.926002] WLAN FW is active [ 146.928984] on_time is 146755067377 [ 146.953100] VDLL image: len=88200 [ 146.956808] fw_cap_info=0x487cff03, dev_cap_mask=0xffffffff [ 146.962416] uuid: a559bd0eabc155d9a2ebd1624c432f5c [ 146.967245] max_p2p_conn = 8, max_sta_conn = 16 [ 146.993650] Register NXP 802.11 Adapter mlan0 [ 146.998191] wlan: uap%d set max_mtu 2000 [ 147.004930] Register NXP 802.11 Adapter uap0 [ 147.017128] Register NXP 802.11 Adapter wfd0 [ 147.024401] wlan: version = SDIW612---18.99.2.p66.17-MM6X18437.p3-GPL-(FP92) [ 147.037465] wlan: Register to Bus Driver Done [ 147.041938] wlan: Driver loaded successfully
- see MAYA-W2_SIM_UBX-22011459.pdf for details
- uartspi_n61x_v1.bin.se is the wifi standalone firmware for download via wifi driver
- sduart_nw61x_v1.bin.se is the combo firmware for wifi/bt downloaded via wifi driver
Bluetooth details:
- Bluetooth 5.4 BLE/LE
- the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/uartspi_n61x_v1.bin.se) for bluetooth operation (so you probably want to blacklist this from loading automatically)
- supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART:
# modprobe btnxpuart [ 147.136762] Bluetooth: Core ver 2.22 [ 147.140455] NET: Registered PF_BLUETOOTH protocol family [ 147.145863] Bluetooth: HCI device and connection manager initialized [ 147.152449] Bluetooth: HCI socket layer initialized [ 147.157415] Bluetooth: L2CAP socket layer initialized [ 147.162537] Bluetooth: SCO socket layer initialized [ 147.348601] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 147.353949] Bluetooth: BNEP filters: protocol multicast [ 147.359207] Bluetooth: BNEP socket layer initialized [ 148.324754] Bluetooth: MGMT ver 1.22 # hciconfig hci0 up && hcitool -i hci0 scan hci0: Type: Primary Bus: UART BD Address: 6C:1D:EB:9B:D6:0C ACL MTU: 1021:7 SCO MTU: 120:6 UP RUNNING RX bytes:860 acl:0 sco:0 events:60 errors:0 TX bytes:2295 acl:0 sco:0 commands:60 errors:0 Scanning ... 28:39:5E:5B:0B:BF n/a
Thread details:
- spidev using Open Thread Border Router which is part of the NXP Matter implementation
- the M.2 card has an on-board I/O expander with an output that enables the SPI transmit buffer; you must drive this high for SPI to respond (likely defaulted low for compatibility as these are vendor-defined pins):
- openthread:
# install build tools apt update apt install -y build-essential git # clone repo git clone https://github.com/openthread/openthread cd openthread # build the spi-hdlc-adapter tool gcc tools/spi-hdlc-adapter/spi-hdlc-adapter.c -o spi-hdlc-adapter ./spi-hdlc-adapter -v /dev/spidev1.2 # FSA1_GPIO2 (GPIO4_24) is W_DISABLE2# used as BT_18_4_RST # FSA1_ALERT (GPIO4_4) is SPI_INT echo 120 > /sys/class/gpio/export echo 100 > /sys/class/gpio/export ./spi-hdlc-adapter --gpio-res=/sys/class/gpio/gpio120 --gpio-int=/sys/class/gpio/gpio100 --spi-align-allowance=16 -v /dev/spidev1.2 Cntl-C echo 120 > /sys/class/gpio/unexport echo 100 > /sys/class/gpio/unexport # build oc-cli apt-get --no-install-recommends install -y g++ lsb-release cmake ninja-build shellcheck # build POSIX CLI ./script/cmake-build posix -DOT_POSIX_RCP_SPI_BUS=ON # FSA1_GPIO2 (GPIO4_24) is W_DISABLE2# used as BT_18_4_RST # FSA1_ALERT (GPIO4_4) is SPI_INT ./build/posix/src/posix/ot-cli -v -d3 'spinel+spi:///dev/spidev1.2?gpio-reset-device=/dev/gpiochip3&gpio-reset-line=24&gpio-int-device=/dev/gpiochip3&gpio-int-line=4&spi-mode=0&spi-speed=1000000&spi-reset-delay=0&spi-align-allowance=16'
device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:
/* Bluetooth */ &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; /* reparent clock for up to 4mbd support */ assigned-clocks = <&clk IMX8MP_CLK_UART3>; assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>; cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; status = "okay"; bluetooth { compatible = "nxp,88w8987-bt"; fw-init-baudrate = <3000000>; }; }; /* Thread */ &ecspi2 { /* ublox MAYA in FSA1 (CS2) */ spidev@2 { reg = <2>; compatible = "lwn,bk4"; spi-max-frequency = <1000000>; }; } /* I2C port expander */ &fsa1_i2c { gpio@21 { compatible = "nxp,pcal9554b"; reg = <0x21>; gpio-controller; #gpio-cells = <2>; gpio-line-names = "spien", "thread_rst#", "wake_wlan", "wake_btthread", "btthread_reset_in", "", "", "", ""; spien_hog { gpio-hog; output-high; gpios = <0 GPIO_ACTIVE_HIGH>; line-name = "spien"; }; threadrst_hog { gpio-hog; output-high; gpios = <1 GPIO_ACTIVE_HIGH>; line-name = "thread_rst#"; }; wlanwake_hog { gpio-hog; output-low; gpios = <2 GPIO_ACTIVE_HIGH>; line-name = "wlan_wake#"; }; threadwake_hog { gpio-hog; output-low; gpios = <3 GPIO_ACTIVE_HIGH>; line-name = "thread_wake#"; }; threadrstin_hog { gpio-hog; input; gpios = <4 GPIO_ACTIVE_HIGH>; line-name = "threadrstin"; }; }; }; &iomuxc { pinctrl_uart3: uart3grp { fsl,pins = < MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX 0x140 MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX 0x140 MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08 0x140 /* cts */ MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x140 /* rts */ >; }; };
- note the default baudrate is 3000000 baud after the firmware is loaded (by the mwifiex driver)
- note the on-board port expander P0 needs to be driven high to enable the on-board SPI buffer
Card: ublox JODY M.2 E-Key PCIe/UART/PCM dual-radio WiFi6 / BT 5.3 combo
The ublox JODY-W3 M.2 E-Key dual-radio combo card is based on the NXP 88W9098 chip using PCIe/SDIO for WiFi, and UART/PCM for Bluetooth.
See also:
- M2-JODY-W3_DataSheet_UBX-21000485.pdf
- JODY-W3 Series DataSheet_UBX-19010615.pdf
- JODY-W2_JODY-W3-Linux_Bluetooth-Audio_AppNote_UBX-20029333.pdf
By default the M2-JODY-W3 card is configured to use PCIe for WiFi but a resistor strapping option on the card exists to use SDIO for WiFi (see M2-JODY-W3 datasheet). Additionally a resistor strapping option can change VIO from the default 1.8V to 3.3V for the W_DISABLE1#, W_DISABLE2# and UART_WAKE# signals.
Pin details:
- W_DISABLE1# FSA_GPIO1 PDn (assert high to power card)
- W_DISABLE2# FSA_GPIO2 BT_RESET (assert high to take BT out of reset)
- LED1/LED2 unused
WiFi details:
- WiFi6 802.11ax dual-band
- PCIe 0x1b4b:0x2b43 (function 1) and 0x1b4b:0x2b44 (function 2)
- supported by the mwifiex driver (as of Linux 6.6 at least you need the out-of-tree mwifiex driver)
# get firmware (out-of-tree mwifiex requires a conf file) git clone https://github.com/nxp-imx/imx-firmware.git cp imx-firmware/nxp/wifi_mod_para.conf imx-firmware/nxp/FwImage_9098_PCIE/* /lib/firmware/nxp/ # build driver git clone https://github.com/nxp-imx/mwifiex.git -b lf-6.6.3_1.0.0 make -C /lib/modules/$(uname -r)/build M=$PWD/mwifiex/mxm_wifiex/wlan_src # load driver insmod mwifiex/mxm_wifiex/wlan_src/mlan.ko insmod mwifiex/mxm_wifiex/wlan_src/moal.ko mod_para=nxp/wifi_mod_para.conf [ 88.049771] wlan: Loading MWLAN driver [ 88.053927] wlan: Register to Bus Driver... [ 88.058461] PCI memory map Virt0: 00000000a73ddc41 PCI memory map Virt2: 00000000e0878cd5 [ 88.066707] Attach moal handle ops, card interface type: 0x206 [ 88.072575] rps set to 0 from module param [ 88.078267] PCIE9098: init module param from usr cfg [ 88.083316] card_type: PCIE9098, config block: 0 [ 88.087975] cfg80211_wext=0xf [ 88.090980] max_vir_bss=1 [ 88.093614] cal_data_cfg=none [ 88.096610] ps_mode = 1 [ 88.099084] auto_ds = 1 [ 88.101543] host_mlme=enable [ 88.104450] fw_name=nxp/pcieuart9098_combo_v1.bin [ 88.109204] rx_work=1 cpu_num=4 [ 88.115019] Request firmware: nxp/pcieuart9098_combo_v1.bin [ 88.674795] WLAN FW is active [ 88.677775] on_time is 88463011256 [ 88.713355] Register NXP 802.11 Adapter mlan0 [ 88.718062] wlan: uap%d set max_mtu 2000 [ 88.726907] Register NXP 802.11 Adapter uap0 [ 88.750747] Register NXP 802.11 Adapter wfd0 [ 88.756708] wlan: version = PCIE9098--17.92.1.p149.131-MM6X17437.p3-GPL-(FP92) [ 88.765023] PCI memory map Virt0: 00000000ea6851b2 PCI memory map Virt2: 00000000e8001719 [ 88.775806] Attach moal handle ops, card interface type: 0x206 [ 88.781820] rps set to 0 from module param [ 88.791183] PCIE9098: init module param from usr cfg [ 88.796258] card_type: PCIE9098, config block: 1 [ 88.800994] cfg80211_wext=0xf [ 88.804003] max_vir_bss=1 [ 88.808088] cal_data_cfg=none [ 88.811100] ps_mode = 1 [ 88.813553] auto_ds = 1 [ 88.816070] host_mlme=enable [ 88.822850] fw_name=nxp/pcieuart9098_combo_v1.bin [ 88.830099] rx_work=1 cpu_num=4 [ 88.848531] Request firmware: nxp/pcieuart9098_combo_v1.bin [ 88.856748] WLAN FW is active [ 88.859755] on_time is 88644991126 [ 88.884288] Register NXP 802.11 Adapter mmlan0 [ 88.889110] wlan: muap%d set max_mtu 2000 [ 88.894440] Register NXP 802.11 Adapter muap0 [ 88.916583] Register NXP 802.11 Adapter mwfd0 [ 88.921118] wlan: version = PCIE9098--17.92.1.p149.131-MM6X17437.p3-GPL-(FP92) [ 88.929262] wlan: Register to Bus Driver Done [ 88.933703] wlan: Driver loaded successfully root@noble-venice:~# ls /sys/class/net can0 can1 eth0 eth1 lo mlan0 mmlan0 muap0 mwfd0 uap0 wfd0
Bluetooth details:
- Bluetooth 5.3 BR/EDR/LE
- the mwifiex wifi driver must be loaded first configured to load the combo firmware (nxp/pcieuart9098_combo_v1.bin,) for bluetooth operation (so you probably want to blacklist this from loading automatically)
- supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART:
# modprobe btnxpuart [ 147.136762] Bluetooth: Core ver 2.22 [ 147.140455] NET: Registered PF_BLUETOOTH protocol family [ 147.145863] Bluetooth: HCI device and connection manager initialized [ 147.152449] Bluetooth: HCI socket layer initialized [ 147.157415] Bluetooth: L2CAP socket layer initialized [ 147.162537] Bluetooth: SCO socket layer initialized [ 147.348601] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 147.353949] Bluetooth: BNEP filters: protocol multicast [ 147.359207] Bluetooth: BNEP socket layer initialized [ 148.324754] Bluetooth: MGMT ver 1.22 # hciconfig hci0 up && hcitool -i hci0 scan hci0: Type: Primary Bus: UART BD Address: 6C:1D:EB:9B:D6:0C ACL MTU: 1021:7 SCO MTU: 120:6 UP RUNNING RX bytes:860 acl:0 sco:0 events:60 errors:0 TX bytes:2295 acl:0 sco:0 commands:60 errors:0 Scanning ... 28:39:5E:5B:0B:BF n/a
device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:
/* Bluetooth */ &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; /* reparent clock for up to 4mbd support */ assigned-clocks = <&clk IMX8MP_CLK_UART3>; assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>; cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; status = "okay"; bluetooth { compatible = "nxp,88w8987-bt"; fw-init-baudrate = <3000000>; }; }; &iomuxc { pinctrl_uart3: uart3grp { fsl,pins = < MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX 0x140 MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX 0x140 MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08 0x140 /* cts */ MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x140 /* rts */ >; }; };
- note the default baudrate is 3000000 baud after the firmware is loaded (by the mwifiex driver)
- note the on-board port expander P0 needs to be driven high to enable the on-board SPI buffer
Card: AzureWave AW-CM276MA M.2 E-Key PCIE-UART WiFi5 / BT 5.3 combo
The AzureWave AW-CM276MA Wifi5+BT5.3 M.2 E-Key combo radio based on the NXP 88W8997 chipset uses PCIe and UART for BT:
WiFi details:
- WiFi5 802.11ac
- PCIe: 0x1b4b:0x2b42
- supported by in-kernel 6.6 mwifiex driver (loads mrvl/pcieuart8997_combo_v4.bin combo firmware reuqired for pcie/bluetooth)
- supported by out-of-tree mwifiex driver as well with firmware nxp/pcieuart8997_combo_v4.bin from imx-firmware
[ 32.919130] wlan: Loading MWLAN driver [ 32.923299] wlan: Register to Bus Driver... [ 32.927735] wlan_pcie 0000:03:00.0: enabling device (0000 -> 0002)[ 32.934062] PCI memory map Virt0: 0000000078035496 PCI memory map Virt2: 00000000dc1c2bc9 [ 32.942283] Attach moal handle ops, card interface type: 0x204 [ 32.948144] rps set to 0 from module param [ 32.952266] wlan_pcie 0000:03:00.0: _request_firmware nxp/wifi_mod_awcm276ma.conf [ 32.963086] wlan_pcie 0000:03:00.0: Loaded FW: nxp/wifi_mod_awcm276ma.conf, sha256: b6e2dbc1bdfdc60ceda5674c7a95425ce9056328af3ab9ec6b1f0 c02d916a71d [ 32.976426] PCIE8997: init module param from usr cfg [ 32.981414] card_type: PCIE8997, config block: 0 [ 32.986057] cfg80211_wext=0xf [ 32.989046] max_vir_bss=1 [ 32.991696] cal_data_cfg=none [ 32.994691] ps_mode = 1 [ 32.997144] auto_ds = 1 [ 32.999613] host_mlme=enable [ 33.002515] fw_name=nxp/pcieuart8997_combo_v4.bin [ 33.007263] rx_work=1 cpu_num=4 [ 33.010430] Enable moal_recv_amsdu_packet [ 33.014487] Attach mlan adapter operations.card_type is 0x204. [ 33.022569] Request firmware: nxp/pcieuart8997_combo_v4.bin [ 33.028166] wlan_pcie 0000:03:00.0: _request_firmware nxp/pcieuart8997_combo_v4.bin [ 33.043994] wlan_pcie 0000:03:00.0: Loaded FW: nxp/pcieuart8997_combo_v4.bin, sha256: 5d08062fe8dd7d2b7f3e26646cfb42288f0de111fc70c86a03f bafbc37050b9f [ 33.661253] FW download over, size 621276 bytes [ 34.382556] WLAN FW is active [ 34.385539] on_time is 34479014993 [ 34.431874] VDLL image: len=8652 [ 34.435158] FW country code WW does not match with US [ 34.440399] fw_cap_info=0x587c6fa3, dev_cap_mask=0xffffffff [ 34.446025] max_p2p_conn = 8, max_sta_conn = 8 [ 34.474292] Register NXP 802.11 Adapter mlan0 [ 34.478819] wlan: uap%d set max_mtu 2000 [ 34.484964] Register NXP 802.11 Adapter uap0 [ 34.496213] Register NXP 802.11 Adapter wfd0 [ 34.500799] wlan: version = PCIE8997--16.92.21.p119.2-MM6X16437.p3-GPL-(FP92) [ 34.508656] wlan: Register to Bus Driver Done [ 34.513081] wlan: Driver loaded successfully
Bluetooth details:
- Bluetooth 5.3
- the mwifiex wifi driver must be loaded first configured to load the combo firmware for bluetooth operation (so you probably want to blacklist this from loading automatically)
- supported by btnxpuart driver; drivers/bluetooth/btnxpuart.c CONFIG_BT_NXPUART
device-tree for GW8201-A+GW7020+GW16FE0-A revision in FSA1 socket:
/* Bluetooth */ &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_uart3>; /* reparent clock for up to 4mbd support */ assigned-clocks = <&clk IMX8MP_CLK_UART3>; assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_80M>; cts-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; rts-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>; status = "okay"; bluetooth { compatible = "nxp,88w8987-bt"; }; }; &iomuxc { pinctrl_uart3: uart3grp { fsl,pins = < MX8MP_IOMUXC_UART3_TXD__UART3_DCE_TX 0x140 MX8MP_IOMUXC_UART3_RXD__UART3_DCE_RX 0x140 MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08 0x140 /* cts */ MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x140 /* rts */ >; }; };
- no fw-init-baudrate = <300000> (not sure why I had to drop this low)
Card: Silex SX-PCEAX PCI/USB WiFi6E / BT 5.2 combo card
The Silex SX-PCEAX combo card uses the QCA2066 chipset with PCI for wifi and USB for bluetooth:
- https://www.qualcomm.com/products/technology/wi-fi/qca206x
- Silex recommends using Qualcomm's LEA driver with their patches (requires license agreement with Silex)
Pin Details:
- M2.54 W_DISABLE2# input; BT_EN active high to enable USB/bluetooth
- M2.56 W_DISABLE1# N/C (datasheet rev AX Sept 2022 shows this as not used)
- M2.6 LED1# N/C (datasheet rev AX Sept 2022 shows this as not used)
- M2.16 LED2# N/C (datasheet rev AX Sept 2022 shows this as not used)
WiFi details:
- Wifi6E 802.11ax
- PCIe 3.0 0x17cb:0x1103
- supported by the ath11k driver but needs a board-2.bin and regdb from Silex:
# firmware unzip ath11k_board-data_regdb_GF_SEC.zip (documentation says it was tested with 5.17.0) cp ath11k_board-data_regdb_GF_SEC/board-2_US_EU_JP.bin /lib/firmware/ath11k/WCN6855/hw2.1/board-2.bin cp ath11k_board-data_regdb_GF_SEC/regdb.bin /lib/firmware/ath11k/WCN6855/hw2.1/regdb.bin rm /lib/firmware/ath11k/WCN6855/hw2.1/regdb.bin.zst # reboot [ 8.346705] ath11k_pci 0000:03:00.0: BAR 0: assigned [mem 0x18200000-0x183fffff 64bit] [ 8.346761] ath11k_pci 0000:03:00.0: enabling device (0000 -> 0002) [ 8.352980] ath11k_pci 0000:03:00.0: MSI vectors: 1 [ 8.353012] ath11k_pci 0000:03:00.0: wcn6855 hw2.1 [ 8.605970] mhi mhi0: _request_firmware ath11k/WCN6855/hw2.1/amss.bin [ 8.703674] mhi mhi0: Loaded FW: ath11k/WCN6855/hw2.1/amss.bin, sha256: 8f10357b53b40238333f0b055b4829fc8dd87994aa2476ae3fa 92234d8f31065 [ 9.423579] ath11k_pci 0000:03:00.0: chip_id 0x12 chip_family 0xb board_id 0xff soc_id 0x400c1211 [ 9.423603] ath11k_pci 0000:03:00.0: fw_version 0x1106196e fw_build_timestamp 2024-01-12 11:30 fw_build_id WLAN.HSP.1.1-031 25-QCAHSPSWPL_V1_V2_SILICONZ_LITE-3.6510.37 [ 9.423620] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin [ 9.438310] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2 3c92c730241139779d55b9b2f25cce3 [ 9.438452] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin [ 9.442371] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2 3c92c730241139779d55b9b2f25cce3 [ 9.442532] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/regdb.bin [ 9.445073] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/regdb.bin, sha256: 0c8ae0f1224c240ba41df6407492d6f7b61 2d761c01391e969fbdec4c443d889 [ 9.453593] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/board-2.bin [ 9.457116] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/board-2.bin, sha256: 365c275d820bc493f6788e6859a813dd2 3c92c730241139779d55b9b2f25cce3 [ 9.483549] ath11k_pci 0000:03:00.0: _request_firmware ath11k/WCN6855/hw2.1/m3.bin [ 9.488994] ath11k_pci 0000:03:00.0: Loaded FW: ath11k/WCN6855/hw2.1/m3.bin, sha256: 9b9b226abf8ce0e005209e53c0c9a4443abaf7 b3def7fefe7e5c5676255c7bdc [ 9.533962] ath11k_pci 0000:03:00.0: leaving PCI ASPM disabled to avoid MHI M2 problems # interface root@noble-venice:~# ls -l /sys/class/net/wlan0 lrwxrwxrwx 1 root root 0 Oct 28 19:02 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00 .0/0000:01:00.0/0000:02:01.0/0000:03:00.0/net/wlan0
Bluetooth Details:
- Bluetooth 5.2 BR/EDR/LE
- USB2.0 0x0cf3:0xe600
- supported by the btusb driver; drivers/bluetooth/btusb.c CONFIG_BT_HCIBTUSB:
root@noble-venice:~# dmesg | grep Bluetooth [ 8.188778] Bluetooth: Core ver 2.22 [ 8.188899] Bluetooth: HCI device and connection manager initialized [ 8.189878] Bluetooth: HCI socket layer initialized [ 8.189901] Bluetooth: L2CAP socket layer initialized [ 8.189932] Bluetooth: SCO socket layer initialized [ 8.340707] Bluetooth: hci0: using rampatch file: qca/rampatch_usb_00130201.bin [ 8.340712] Bluetooth: hci0: QCA: patch rome 0x130201 build 0x65e2, firmware rome 0x130201 build 0x38e6 [ 8.910493] Bluetooth: hci0: using NVM file: qca/nvm_usb_00130201_gf.bin [ 9.047564] Bluetooth: hci0: HCI Enhanced Setup Synchronous Connection command is advertised, but not supported. [ 9.316899] Bluetooth: BNEP (Ethernet Emulation) ver 1.3 [ 9.316916] Bluetooth: BNEP filters: protocol multicast [ 9.316929] Bluetooth: BNEP socket layer initialized [ 9.323882] Bluetooth: MGMT ver 1.22 root@noble-venice:~# hciconfig hci0 hci0: Type: Primary Bus: USB BD Address: 1C:BC:EC:01:43:B5 ACL MTU: 1024:7 SCO MTU: 240:8 UP RUNNING RX bytes:954 acl:0 sco:0 events:75 errors:0 TX bytes:2870 acl:0 sco:0 commands:75 errors:0 root@noble-venice:~# hcitool -i hci0 scan Scanning ...
GW16FB0 FSA M.2 B-Key Adapter
The GW16FB0 B-Key Adapter provides an M.2 B-Key socket with the following:
- GPIO5 (drive-high; drive-low; high-Z 1.8V)
- GPIO6 (drive-high; drive-low; high-Z 1.8V)
- DPR (drive-high or drive-low 1.8V)
- WP# (OD; high-Z or drive-low)
- W_DISALBE1# (OD|drive-high|drive-low @1.8V or 3.3V)
- W_DISABLE2# (OD|drive-high|drive-low @1.8V or 3.3V)
- RESET# (OD|drive-high|drive-low @1.8V or 3.3V)
- CRDPWROFF# (OD|drive-high|drive-low @1.8V or 3.3V)
- CONFIG[0-3]
- COEX[0-2]
- SIM1
- SIM2
- USB2.0
- PCIE3.0 (with PERST# 3.3V)
- LED1# (OD Yellow)
Pinout (from baseboard perspective):
pin | signal | signal | pin |
---|---|---|---|
1 | CONFIG3(I)(3.3V pu) | 3.3V | 2 |
3 | GND | 3.3V | 4 |
5 | GND | CRDPWROFF#(O/OD) | 6 |
7 | USB_DP | W_DISABLE1#(O/OD) | 8 |
9 | USB_DM | LED1#(OD) | 10 |
11 | GND | KEY | 12 |
13 | KEY | KEY | 14 |
15 | KEY | KEY | 16 |
17 | KEY | KEY | 18 |
19 | KEY | GPIO5(O/OD) | 20 |
21 | CONFIG0(I)(3.3V pu) | GPIO6(O/OD) | 22 |
23 | NC | NC | 24 |
25 | DPR | W_DISABLE2#(O/OD) | 26 |
27 | GND | NC | 28 |
29 | USB_RXN | SIM1_RST3 | 30 |
31 | USB_RXP | SIM1_CLK3 | 32 |
33 | GND | SIM1_DAT3 | 34 |
35 | USB_TXN | SIM1_PWR3 | 36 |
37 | USB_TXP | NC | 38 |
39 | GND | SIM2_DET3 | 40 |
41 | PCIE_RXN | SIM2_DAT3 | 42 |
43 | PCIE_RXP | SIM2_CLK3 | 44 |
45 | GND | SIM2_RST3 | 46 |
47 | PCIE_TXN | SIM2_PWR3 | 48 |
49 | PCIE_TXP | PERST#(O)(3.3V) | 50 |
51 | GND | NC | 52 |
53 | PCIE_CKN | NC | 54 |
55 | PCIE_CKP | NC | 56 |
57 | GND | NC | 58 |
59 | NC | COEX31 | 60 |
61 | NC | COEX21 | 62 |
63 | NC | COEX11 | 64 |
65 | NC | SIM1_DET3 | 66 |
67 | RESET#(O/OD) | WP#(O/OD) | 68 |
69 | CONFIG1(I)(3.3V pu) | 3.3V | 70 |
71 | GND | 3.3V | 72 |
73 | GND | 3.3V | 74 |
75 | CONFIG2(I)(3.3V pu) |
- The COEX[1..3] signals are ganged to each FSA socket on the baseboard
- CONFIG[0..3] are inputs to the port expander with onboard pullups
- The SIM signals do not connect to the baseboard SoC and go directly to the on-board SIM connector
The following GPIO's are highly customizable via a dip-switch and I/O port expander:
- W_DISALBLE1#: output level is fsa_wdisable1# gpio
- CRDPWROFF#: output level is fsa_crdpwroff# gpio
- RESET#: output level is fsa_reset# gpio
- W_DISABLE2#: output level is fsa_wdisable1# gpio
- GPIO5:
- GPIO6:
Card: Compex WLTB7002E25 M.2 B-Key/M-Key WiFi7 radio
The Compex WLTB7002 is a Wifi7 802.11be M.2 B-Key PCIE based radio using a Qualcomm chipset and supported by the ath12k driver. Note that the early product naming was WLTM which was changed to WLTB (the card we have says WLTM).
Pin Details:
- PERST# has a pu to 3.3V on card
- CONFIG[0..3]=1111
- DIP[1..10]=1101011111 (W_DISABLE1# OD)
- M2.8 W_DISABLE1# OD
WiFi details:
- WiFi7 802.11be
- PCIe 0x17cb 0x1109
- ath12:
- firmware: ath12k/QCN9274/hw2.0
- board-2.bin and firmware-2.bin (from https://git.codelinaro.org/clo/ath-firmware/ath12k-firmware; several options for firmware-2.bin all which work accept for QCN9274/hw2.0/testing/1.4.1/WLAN.WBE.1.4.1-00103-QCAHKSWPL_SILICONZ-1/firmware-2.bin)
- regdb.bin and board.bin (not publicly available and are provided by Compex :sales@…)
- driver:
root@noble-venice:~# cat /proc/cmdline console=ttymxc1,115200 root=/dev/mmcblk2p1 rootwait net.ifnames=0 cma=196M root@noble-venice:~# dmesg | grep ath12 [ 9.439459] ath12k_pci 0000:07:00.0: BAR 0 [mem 0x18200000-0x183fffff 64bit]: assigned [ 9.439514] ath12k_pci 0000:07:00.0: enabling device (0000 -> 0002) [ 9.440236] ath12k_pci 0000:07:00.0: MSI vectors: 16 [ 9.440262] ath12k_pci 0000:07:00.0: Hardware name: qcn9274 hw2.0 [ 9.651582] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/firmware-2.bin, sha256: 6d2330c27a55b5a64a303bfcf6a05b dfe8a8e32f61fccff0b7ac980eee71a019 [ 10.430023] ath12k_pci 0000:07:00.0: memory type 10 not supported [ 10.435234] ath12k_pci 0000:07:00.0: chip_id 0x0 chip_family 0xb board_id 0x101a soc_id 0x401a2200 [ 10.435258] ath12k_pci 0000:07:00.0: fw_version 0x111300d6 fw_build_timestamp 2024-08-06 08:43 fw_build_id QC_IMAGE_VERSION _STRING=WLAN.WBE.1.1.1-00214-QCAHKSWPL_SILICONZ-1 [ 10.439493] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629 8f5e5c5a4235bb2a061d6138233e2e5 [ 10.440555] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629 8f5e5c5a4235bb2a061d6138233e2e5 [ 10.441504] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/regdb.bin, sha256: a36fbe1cdaa83c8ae6792614bfa0e3b9fa2 f1a0d01b07fdafad3ace46d34bc9a [ 10.449868] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629 8f5e5c5a4235bb2a061d6138233e2e5 [ 10.450680] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board-2.bin, sha256: c75e2f2a343d171ff2796d6b5f2d9a629 8f5e5c5a4235bb2a061d6138233e2e5 [ 10.452542] ath12k_pci 0000:07:00.0: Loaded FW: ath12k/QCN9274/hw2.0/board.bin, sha256: cc31d22d444fe3e574891ad0470bf64092b 75ece32dd229c27fbd60835ef61a3 [ 13.055026] ath12k_pci 0000:07:00.0: Invalid module id 2 [ 13.055062] ath12k_pci 0000:07:00.0: failed to parse tlv -22 root@noble-venice:~# ls -l /sys/class/net/wlan* lrwxrwxrwx 1 root root 0 Apr 19 2024 /sys/class/net/wlan0 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00 .0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan0 lrwxrwxrwx 1 root root 0 Apr 19 2024 /sys/class/net/wlan1 -> ../../devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00 .0/0000:01:00.0/0000:02:05.0/0000:07:00.0/net/wlan1
- firmware: ath12k/QCN9274/hw2.0
- There is a patch posted (not accepted yet) which fixes the 'Invalid module id2' 'failed to parse tlv -22' issue (https://patchwork.kernel.org/project/linux-wireless/patch/20231030222700.18914-2-quic_rajkbhag@quicinc.com/)
- Note that additional cma is needed (cma=196M) for this card
- Note that Linux 6.9 or newer is likely required (tested 6.9, 6.10, 6.11, 6.12-rc6; 6.6 is too old, not sure about 6.7, 6.8)
- iperf3 showed TX/RX rate of 503/499 mbps
Card: Quectel EM06 M.2 B-Key Modem
The Quectel EM06 B-Key Modem is a USB2.0 Category 6 LTE modem with dual-sim and GNSS support.
Pin Details:
- DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
- CONFIG[0..3]=0011
- GPIO5 and GPIO6 are used for PCM CLK and DAT input
- W_DISABLE1# Disable Modem
- W_DISABLE2# Disable GPS
- WWAN_LED# RF Status
- dual-sim
Modem Details:
- DIP[1..10]=1101011100 (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD, GPIO5 and GPIO6 driven low at power-up until U-Boot drives the OE's high)
- CONFIG[0..3]=1111
- USB2.0 2c7c:0306
- drivers: option/USB_SERIAL_OPTION, cdc_mbim/USB_NET_CDC_MBIM
root@noble-venice:~# mmcli -m 0 ----------------------------------- General | path: /org/freedesktop/ModemManager1/Modem/0 | device id: 3a44c51e195b25f52092cb3bf35d5c7102a7b6fc ----------------------------------- Hardware | manufacturer: Quectel | model: EM06-A | firmware revision: EM06ALAR03A05M4G | carrier config: ROW_Generic_3GPP | carrier config revision: 06010821 | h/w revision: EM06-A | supported: gsm-umts, lte | current: gsm-umts, lte | equipment id: 861364040064220 ----------------------------------- System | device: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb3/3-1/3-1.2 | physdev: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb3/3-1/3-1.2 | drivers: option, cdc_mbim | plugin: quectel | primary port: cdc-wdm0 | ports: cdc-wdm0 (mbim), ttyUSB0 (ignored), ttyUSB1 (gps), | ttyUSB2 (at), ttyUSB3 (at), wwan0 (net) ----------------------------------- Status | lock: sim-pin2 | unlock retries: sim-pin2 (3) | state: disabled | power state: on ----------------------------------- Modes | supported: allowed: 3g; preferred: none | allowed: 4g; preferred: none | allowed: 3g, 4g; preferred: 4g | allowed: 3g, 4g; preferred: 3g | current: allowed: 3g, 4g; preferred: 4g ----------------------------------- Bands | supported: utran-4, utran-5, utran-2, eutran-2, eutran-4, eutran-5, | eutran-7, eutran-12, eutran-13, eutran-25, eutran-26, eutran-29, | eutran-30, eutran-41, eutran-66 | current: utran-4, utran-5, utran-2, eutran-2, eutran-4, eutran-5, | eutran-7, eutran-12, eutran-13, eutran-25, eutran-26, eutran-29, | eutran-30, eutran-41, eutran-66 ----------------------------------- IP | supported: ipv4, ipv6, ipv4v6 ----------------------------------- 3GPP | imei: 861364040064220 | enabled locks: fixed-dialing ----------------------------------- 3GPP EPS | ue mode of operation: csps-2 ----------------------------------- SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0 root@noble-venice:~# mmcli -m 0 --sim 0 ------------------------------- General | path: /org/freedesktop/ModemManager1/SIM/0 ------------------------------- Properties | active: yes | imsi: 234500007828248 | iccid: 8944501109208282487 | operator id: 23450 | operator name: Hologram | gid1: FFFFFFFF | gid2: FFFFFFFF
Card: Sierra Wireless EM9191 B-Key Modem
Pin Details:
- Full_Card_Power_Off# —Active-low input from the host—Low turns the module off, high turns the module on.
- W_DISABLE1# pu W_DISABLE#—Active low input from the host—Low disables the main RF radio or triggers a ‘Dying Gasp’ SMS, depending on configuration.
- W_DISABLE2# pu GPS_DISABLE#—Active low input from the host—Low disables the GNSS radio receiver.
- RESET#—Active low input from the host—Low resets the module.
- Dynamic power control (DPR)—Signal used to adjust Tx power to meet FCC SAR requirements. For details, see
- GPIO5/GPIO6 drive high for USB3.0 or drive low for PCIe
- LED# blinks on 0.5s every 5 seconds or so
Modem Details:
- DIP[1..10]=1101011100 (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD, GPIO5 and GPIO6 driven low at power-up until U-Boot drives the OE's high)
- CONFIG[0..3]=0011
- USB3.0 1199:90d3
- drivers: option/USB_SERIAL_OPTION, cdc_mbim/USB_NET_CDC_MBIM
root@noble-venice:~# dmesg | egrep option\|mbim [ 0.000000] earlycon: ec_imx6q0 at MMIO 0x0000000030890000 (options '115200') [ 7.866598] usbcore: registered new interface driver option [ 7.871271] option 2-1:1.3: GSM modem (1-port) converter detected [ 7.873704] option 2-1:1.4: GSM modem (1-port) converter detected [ 7.988211] cdc_mbim 2-1:1.0: setting rx_max = 16384 [ 8.046418] cdc_mbim 2-1:1.0: cdc-wdm0: USB WDM device [ 8.123786] cdc_mbim 2-1:1.0 wwan0: register 'cdc_mbim' at usb-xhci-hcd.0.auto-1, CDC MBIM, 6a:f5:5b:cf:07:fd [ 8.123962] usbcore: registered new interface driver cdc_mbim
- modemmanager:
root@noble-venice:~# mmcli -m 0 ---------------------------------- General | path: /org/freedesktop/ModemManager1/Modem/0 | device id: 54d8f189055cd3252fc067e8f4e7e41fe9f4831f ---------------------------------- Hardware | manufacturer: Sierra Wireless, Incorporated | model: Sierra Wireless EM9191 | firmware revision: 01.07.19.00_GENERI_016.010_000 | carrier config: default | h/w revision: EM9191 | supported: gsm-umts, lte, 5gnr | current: gsm-umts, lte, 5gnr | equipment id: 355890340103204 ---------------------------------- System | device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1 | physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1 | drivers: option, cdc_mbim | plugin: sierra | primary port: cdc-wdm0 | ports: cdc-wdm0 (mbim), ttyUSB0 (at), wwan0 (net) ---------------------------------- Status | lock: sim-pin2 | unlock retries: sim-pin2 (3) | state: disabled | power state: on ---------------------------------- Modes | supported: allowed: 3g; preferred: none | allowed: 4g; preferred: none | allowed: 3g, 4g; preferred: 4g | allowed: 3g, 4g; preferred: 3g | allowed: 5g; preferred: none | allowed: 4g, 5g; preferred: 5g | allowed: 4g, 5g; preferred: 4g | allowed: 3g, 5g; preferred: 5g | allowed: 3g, 5g; preferred: 3g | allowed: 3g, 4g, 5g; preferred: 5g | allowed: 3g, 4g, 5g; preferred: 4g | allowed: 3g, 4g, 5g; preferred: 3g | current: allowed: 3g, 4g, 5g; preferred: 4g ---------------------------------- Bands | supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, | eutran-40, eutran-41, eutran-42, eutran-46, eutran-48, eutran-66, | eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, ngran-28, | ngran-41, ngran-66, ngran-71, ngran-77, ngran-78, ngran-79 | current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, | eutran-40, eutran-41, eutran-42, eutran-46, eutran-48, eutran-66, | eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, ngran-28, | ngran-41, ngran-66, ngran-71, ngran-77, ngran-78, ngran-79 ---------------------------------- IP | supported: ipv4, ipv6, ipv4v6 ---------------------------------- 3GPP | imei: 355890340103204 | enabled locks: fixed-dialing ---------------------------------- 3GPP EPS | ue mode of operation: csps-2 | initial bearer apn: psntneofin | initial bearer ip type: ipv4v6 ---------------------------------- SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0 | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active)
Card: Sierra Wireless EM7455 B-Key Modem
The Sierra Wireless EM7455 B-Key Modem is a USB3.0 Category 6 LTE modem with dual-sim and GNSS support.
Pin Details:
- DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
- CONFIG[0..3]=0011
- W_DISABLE1# Disable Modem
- W_DISABLE2# Disable GPS
- LED# WWAN Radio On indicator
- GPIO5 and GPIO6 are N/C
- dual-sim
Modem Details:
- USB3.0 1199:9079
- drivers: cdc_mbim/USB_NET_CDC_MBIM
root@noble-venice:~# dmesg | egrep mbim [ 15.407976] cdc_mbim 2-1:1.12: cdc-wdm0: USB WDM device [ 15.408552] cdc_mbim 2-1:1.12 wwan0: register 'cdc_mbim' at usb-xhci-hcd.0.auto-1, CDC MBIM, 52:79:74:f9:6c:a9 [ 15.408712] usbcore: registered new interface driver cdc_mbim
- modemmanager:
root@noble-venice:~# mmcli --version mmcli 1.23.4 Copyright (2011 - 2023) Aleksander Morgado License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. root@noble-venice:~# mmcli -m 0 -------------------------------- General | path: /org/freedesktop/ModemManager1/Modem/0 | device id: ec2f88be52b588f89e0f12a21c4c5bb5cf5387a2 -------------------------------- Hardware | manufacturer: Sierra Wireless, Incorporated | model: Sierra Wireless EM7455 Qualcomm Snapdragon X7 LTE-A | firmware revision: SWI9X30C_02.08.02.00 | carrier config: default | h/w revision: EM7455 | supported: gsm-umts, lte | current: gsm-umts, lte | equipment id: 014582002248145 -------------------------------- System | device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1 | physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1 | drivers: cdc_mbim, qcserial | plugin: sierra | primary port: cdc-wdm0 | ports: cdc-wdm0 (mbim), ttyUSB0 (ignored), ttyUSB1 (gps), | ttyUSB2 (at), wwan0 (net) -------------------------------- Status | lock: sim-pin2 | unlock retries: sim-pin2 (3) | state: disabled | power state: low -------------------------------- Modes | supported: allowed: 3g; preferred: none | allowed: 4g; preferred: none | allowed: 3g, 4g; preferred: 4g | allowed: 3g, 4g; preferred: 3g | current: allowed: 3g, 4g; preferred: 4g -------------------------------- Bands | supported: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2, | eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, | eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41 | current: utran-1, utran-3, utran-4, utran-5, utran-8, utran-2, | eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, | eutran-12, eutran-13, eutran-20, eutran-25, eutran-26, eutran-41 -------------------------------- IP | supported: ipv4, ipv6, ipv4v6 -------------------------------- 3GPP | imei: 014582002248145 | enabled locks: fixed-dialing -------------------------------- 3GPP EPS | ue mode of operation: csps-2 -------------------------------- SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0 | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active) | slot 2: /org/freedesktop/ModemManager1/SIM/1
- drivers: cdc_mbim/USB_NET_CDC_MBIM
Card: Telit FN980 B-Key Modem
The Telit FN980 B-Key Modem is a USB3.0/PCIe based modem. The early hardware v1.0 uses AT commands to select between PCI and USB interfaces.
Modem Details:
- bus selection
- v1.2 hw pin20 GPIO5 low enables PCIe mode
- v1.0 (what we have) requires an AT command to switch back and forth. Note that when in PCI mode a device still enumerates on USB 3.0 as well (but its not used)
DEVICE=/dev/ttyUSB3 stty -F $DEVICE ignbrk -brkint -icrnl -opost -onlcr -isig -icanon -iexten -echo -echoe -echok -echoctl -echoke # config tty cat $DEVICE & # background process to read TTY responses at() { echo -n -e "$1\r" > $DEVICE; } # script for at cmds at "ATI" # identify modem at "AT#USBPCISWITCH?" # read switch at "AT#USBPCISWITCH=0" # set USB at "AT#USBPCISWITCH=1,5,0" # set PCI at "AT#REBOOT" # reboot modem
- PCIe mode:
- 0x17cb:0x0306
- drivers: mhi_net, mhi-pci-generic
[ 8.764392] mhi-pci-generic 0000:03:00.0: MHI PCI device found: telit-fn980-hwv1 [ 8.764420] mhi-pci-generic 0000:03:00.0: BAR 0: assigned [mem 0x18100000-0x18100fff 64bit] [ 8.764465] mhi-pci-generic 0000:03:00.0: enabling device (0000 -> 0002) [ 8.778878] mhi mhi0: Requested to power ON [ 8.778922] mhi mhi0: Power on setup success
- modemmanager:
root@noble-venice:~# mmcli -m 0 ---------------------------------- General | path: /org/freedesktop/ModemManager1/Modem/0 | device id: b9bb1ca601e8da746a588c18447cb5390535b85b ---------------------------------- Hardware | manufacturer: Telit | model: FN980m | firmware revision: M0H.020002-B009 | carrier config: default | h/w revision: 1.00 | supported: gsm-umts, lte, 5gnr, tds | cdma-evdo, lte, 5gnr, tds | lte, 5gnr, tds | cdma-evdo, gsm-umts, lte, 5gnr, tds | current: gsm-umts, lte, 5gnr, tds | equipment id: 350313452002366 ---------------------------------- System | device: /sys/devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:01 .0/0000:03:00.0 | physdev: /sys/devices/platform/soc@0/33800000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/0000:02:01 .0/0000:03:00.0 | drivers: mhi_net, mhi-pci-generic | plugin: telit | primary port: wwan0qmi0 | ports: mhi_hwip0 (net), wwan0qmi0 (qmi) ---------------------------------- Status | lock: sim-pin2 | unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10) | state: disabled | power state: on ---------------------------------- Modes | supported: allowed: 2g; preferred: none | allowed: 3g; preferred: none | allowed: 2g, 3g; preferred: 3g | allowed: 2g, 3g; preferred: 2g | allowed: 2g, 4g; preferred: 4g | allowed: 2g, 4g; preferred: 2g | allowed: 3g, 4g; preferred: 4g | allowed: 3g, 4g; preferred: 3g | allowed: 2g, 3g, 4g; preferred: 4g | allowed: 2g, 3g, 4g; preferred: 3g | allowed: 2g, 3g, 4g; preferred: 2g | allowed: 2g, 5g; preferred: 5g | allowed: 2g, 5g; preferred: 2g | allowed: 3g, 5g; preferred: 5g | allowed: 3g, 5g; preferred: 3g | allowed: 2g, 3g, 5g; preferred: 5g | allowed: 2g, 3g, 5g; preferred: 3g | allowed: 2g, 3g, 5g; preferred: 2g | allowed: 2g, 4g, 5g; preferred: 5g | allowed: 2g, 4g, 5g; preferred: 4g | allowed: 2g, 4g, 5g; preferred: 2g | allowed: 3g, 4g, 5g; preferred: 5g | allowed: 3g, 4g, 5g; preferred: 4g | allowed: 3g, 4g, 5g; preferred: 3g | allowed: 2g, 3g, 4g, 5g; preferred: 5g | allowed: 2g, 3g, 4g, 5g; preferred: 4g | allowed: 2g, 3g, 4g, 5g; preferred: 3g | allowed: 2g, 3g, 4g, 5g; preferred: 2g | current: allowed: 3g; preferred: none ---------------------------------- Bands | supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, | eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, | eutran-66, eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, | ngran-7, ngran-8, ngran-12, ngran-20, ngran-25, ngran-28, ngran-38, | ngran-40, ngran-41, ngran-48, ngran-66, ngran-71, ngran-77, ngran-78, | ngran-79 | current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, | eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, | eutran-66, eutran-71, utran-19 ---------------------------------- IP | supported: ipv4, ipv6, ipv4v6 ---------------------------------- 3GPP | imei: 350313452002366 | enabled locks: fixed-dialing ---------------------------------- 3GPP EPS | initial bearer ip type: ipv4v6 ---------------------------------- SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0 | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active) | slot 2: none
- USB3.0 mode:
- USB3.0 1bc7:1050
- drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
- modemmanager:
root@noble-venice:~# mmcli -m 0 ---------------------------------- General | path: /org/freedesktop/ModemManager1/Modem/0 | device id: c04a4fdf1b3d082ea319157f172714fef001f97f ---------------------------------- Hardware | manufacturer: Telit | model: FN980m | firmware revision: M0H.020002-B009 | carrier config: default | h/w revision: 1.00 | supported: gsm-umts, lte, 5gnr, tds | cdma-evdo, lte, 5gnr, tds | lte, 5gnr, tds | cdma-evdo, gsm-umts, lte, 5gnr, tds | current: gsm-umts, lte, 5gnr, tds | equipment id: 350313452002366 ---------------------------------- System | device: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb4/4-1/4-1.2 | physdev: /sys/devices/platform/soc@0/32f10108.usb/38200000.usb/xhci-hcd.1.auto/usb4/4-1/4-1.2 | drivers: option, qmi_wwan | plugin: telit | primary port: cdc-wdm0 | ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (ignored), | ttyUSB2 (at), ttyUSB3 (at), ttyUSB4 (ignored), wwan0 (net) ---------------------------------- Status | lock: sim-pin2 | unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10) | state: disabled | power state: on ---------------------------------- Modes | supported: allowed: 2g; preferred: none | allowed: 3g; preferred: none | allowed: 2g, 3g; preferred: 3g | allowed: 2g, 3g; preferred: 2g | allowed: 2g, 4g; preferred: 4g | allowed: 2g, 4g; preferred: 2g | allowed: 3g, 4g; preferred: 4g | allowed: 3g, 4g; preferred: 3g | allowed: 2g, 3g, 4g; preferred: 4g | allowed: 2g, 3g, 4g; preferred: 3g | allowed: 2g, 3g, 4g; preferred: 2g | allowed: 2g, 5g; preferred: 5g | allowed: 2g, 5g; preferred: 2g | allowed: 3g, 5g; preferred: 5g | allowed: 3g, 5g; preferred: 3g | allowed: 2g, 3g, 5g; preferred: 5g | allowed: 2g, 3g, 5g; preferred: 3g | allowed: 2g, 3g, 5g; preferred: 2g | allowed: 2g, 4g, 5g; preferred: 5g | allowed: 2g, 4g, 5g; preferred: 4g | allowed: 2g, 4g, 5g; preferred: 2g | allowed: 3g, 4g, 5g; preferred: 5g | allowed: 3g, 4g, 5g; preferred: 4g | allowed: 3g, 4g, 5g; preferred: 3g | allowed: 2g, 3g, 4g, 5g; preferred: 5g | allowed: 2g, 3g, 4g, 5g; preferred: 4g | allowed: 2g, 3g, 4g, 5g; preferred: 3g | allowed: 2g, 3g, 4g, 5g; preferred: 2g | current: allowed: 3g; preferred: none ---------------------------------- Bands | supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, | eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, | eutran-66, eutran-71, utran-19, ngran-1, ngran-2, ngran-3, ngran-5, | ngran-7, ngran-8, ngran-12, ngran-20, ngran-25, ngran-28, ngran-38, | ngran-40, ngran-41, ngran-48, ngran-66, ngran-71, ngran-77, ngran-78, | ngran-79 | current: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-32, eutran-34, eutran-38, eutran-39, | eutran-40, eutran-41, eutran-42, eutran-43, eutran-46, eutran-48, | eutran-66, eutran-71, utran-19 ---------------------------------- IP | supported: ipv4, ipv6, ipv4v6 ---------------------------------- 3GPP | imei: 350313452002366 | enabled locks: fixed-dialing ---------------------------------- 3GPP EPS | ue mode of operation: csps-2 | initial bearer ip type: ipv4v6 ---------------------------------- SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0 | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active) | slot 2: none
Card: Telit LN920 B-Key Modem
The https://www.telit.com/devices/ln920-series/ Telit LN920 B-Key modem is a USB3.0 Category 6 LTE modem with dual-sim and GNSS support.
Pin Details:
- W_DISABLE1# Disable Modem
- W_DISABLE2# Disable GPS
- GPIO5 and GPIO6 are used for 1.8V I2S_CLK and I2S_DAT inputs
- LED illuminates when the modem is enumerated in Linux
- DIP[1..10]=1x01011xxx (W_DISABLE1 OD, CARD_POWER_OFF driven@1.8V, RESET# driven@1.8V, W_DISABLE2 OD)
- CONFIG[0..3]=0011
- dual-sim support
Modem Details:
- USB3.0 1bc7:1060
- drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
root@noble-venice:~# dmesg | egrep GSM\|wdm [ 19.499182] usbcore: registered new interface driver cdc_wdm [ 19.507831] usbserial: USB Serial support registered for GSM modem (1-port) [ 19.508079] option 2-1:1.0: GSM modem (1-port) converter detected [ 19.508409] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB0 [ 19.508719] option 2-1:1.3: GSM modem (1-port) converter detected [ 19.509063] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB1 [ 19.509255] option 2-1:1.4: GSM modem (1-port) converter detected [ 19.509574] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB2 [ 19.509774] option 2-1:1.5: GSM modem (1-port) converter detected [ 19.510059] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB3 [ 19.510208] option 2-1:1.6: GSM modem (1-port) converter detected [ 19.510417] usb 2-1: GSM modem (1-port) converter now attached to ttyUSB4 [ 19.528989] qmi_wwan 2-1:1.2: cdc-wdm0: USB WDM device
- modemmanager:
root@noble-venice:~# mmcli --version mmcli 1.23.4 Copyright (2011 - 2023) Aleksander Morgado License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl-2.0.html> This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. root@noble-venice:~# mmcli -m 0 ---------------------------------- General | path: /org/freedesktop/ModemManager1/Modem/0 | device id: e58cc432de177ace69c862b52587b449f1954cbc ---------------------------------- Hardware | manufacturer: Telit | model: LN920A12-WW | firmware revision: M0L.000002 | carrier config: default | h/w revision: 1.10 | supported: gsm-umts, lte | current: gsm-umts, lte | equipment id: 354175753093121 ---------------------------------- System | device: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1 | physdev: /sys/devices/platform/soc@0/32f10100.usb/38100000.usb/xhci-hcd.0.auto/usb2/2-1 | drivers: option, qmi_wwan | plugin: telit | primary port: cdc-wdm0 | ports: cdc-wdm0 (qmi), ttyUSB0 (ignored), ttyUSB1 (gps), | ttyUSB2 (at), ttyUSB3 (at), ttyUSB4 (ignored), wwan0 (net) ---------------------------------- Status | lock: sim-pin2 | unlock retries: sim-pin (3), sim-puk (10), sim-pin2 (3), sim-puk2 (10) | state: disabled | power state: on ---------------------------------- Modes | supported: allowed: 3g; preferred: none | allowed: 4g; preferred: none | allowed: 3g, 4g; preferred: 4g | allowed: 3g, 4g; preferred: 3g | current: allowed: 3g, 4g; preferred: 4g ---------------------------------- Bands | supported: utran-1, utran-3, utran-4, utran-6, utran-5, utran-8, | utran-9, utran-2, eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, | eutran-7, eutran-8, eutran-12, eutran-13, eutran-14, eutran-17, | eutran-18, eutran-19, eutran-20, eutran-25, eutran-26, eutran-28, | eutran-29, eutran-30, eutran-38, eutran-39, eutran-40, eutran-41, | eutran-42, eutran-43, eutran-48, eutran-66, eutran-71, utran-19 | current: utran-1, utran-4, utran-5, utran-8, utran-9, utran-2, | eutran-1, eutran-2, eutran-3, eutran-4, eutran-5, eutran-7, eutran-8, | eutran-12, eutran-13, eutran-14, eutran-17, eutran-18, eutran-19, | eutran-20, eutran-25, eutran-26, eutran-28, eutran-29, eutran-30, | eutran-38, eutran-39, eutran-40, eutran-41, eutran-42, eutran-43, | eutran-48, eutran-66, eutran-71, utran-19 ---------------------------------- IP | supported: ipv4, ipv6, ipv4v6 ---------------------------------- 3GPP | imei: 354175753093121 | enabled locks: fixed-dialing ---------------------------------- 3GPP EPS | ue mode of operation: csps-2 | initial bearer ip type: ipv4v6 ---------------------------------- SIM | primary sim path: /org/freedesktop/ModemManager1/SIM/0 | sim slot paths: slot 1: /org/freedesktop/ModemManager1/SIM/0 (active) | slot 2: /org/freedesktop/ModemManager1/SIM/1
- drivers: option/USB_SERIAL_OPTION qmi_wwan/USB_NET_QMI_WWAN
GW16FM0 FSA to M.2 M-Key Adapter
This adapter allows M.2 M-Key cards to be plugged into a VeniceFLEX SBC.
This is primarily focused around NVMe storage drives that run over PCIe.
GW16FP0 FSA to Mini-PCIe Adapter
This adapter allows standard Mini-PCIe wireless cards and modems to be plugged into a VeniceFLEX SBC.
This adapter exposes a Mini-PCIe slot that adheres to the generic Mini-PCIe specification, primarily with PCIe and USB signals.