1102554
Supplier number:
The Sierra Wireless MC7304 PCI Express Mini Card is a compact, lightweight, wireless LTE- and UMTS-based modem.
The MC7304 provides LTE, DC-HSPA+, HSDPA, HSUPA, WCDMA, GSM, GPRS, EDGE and GPS connectivity for networking and M2M applications over several radio frequency bands. The device also supports 2G/3G roaming.
This ZIP archive contains the Mobile Broadband Package for Linux, including the SDK, USB drivers, and the Software Integration and Development Guide.
Mobile Broadband Package for Linux - SDK binaries
Mobile Broadband Package for Linux - Driver binaries
Software Integration and Development Guide
Linux
How to step by step set up a data connection over QMI interface using qmicli and in-kernel driver qmi_wwan in Linux?
Several cellular modules based on Qualcomm chipsets implements the Qualcomm Qualcomm MSM (QMI) Interface.
There is a open source Linux in-kernel driver supporting this interface and it is called qmi_wwan. This driver can be used together with ModemManager and NetworkManager to automate connection establishment and as a connection manager.
The library libqmi which ModemManager uses can also be used to communicate in a more direct way with the cellular devices over the QMI interface and to step by step do necessary configurations and trigger the data connection over the cellular network.
A selection of cellular modules can be supported:
Using RAW IP kernel configuration:
Sierra Wireless MC74 series, EM74 series, EM75** series
Telit LM940, LM960
Telit LN94x series (requires USB mode switch)
Simcom SIM7500 series, SIM7600 series, SIM7600 -H series
(can be supported in qmi_wwan driver from kernel 4.18 or by applying the following one line qmi_wwan source code patch on previous kernel builds: qmi_wwan: apply SET_DTR quirk to the SIMCOM shared device ID)
Using 802.3 IP framing kernel configuration:
Simcom SIM7100 series
Sierra Wireless MC73**/EM73** series
ModemManager combined with NetworkManager will detect the cellular modules automatically in most cases, please refer to their respective documentations on how to establish a data connection using them.
Example on how to set up the data connection step by step manually with libqmi:
First install the libqmi Linux library e.g. by using your system package manager like apt or preferably latest version from source on the Freedesktop pages for libqmi project: https://www.freedesktop.org/wiki/Software/libqmi/
Verify that you have the Linux in-kernel qmi_wwan driver installed and attached for the cellular modules QMI interface over USB:
lsusb -t
Can look e.g. like this:
...
|__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
...
If the driver is not correctly loaded, please verify that the module is set to expose the correct USB endpoints configuration toward the host system and that you have followed the provided guides from the cellular module vendors, regarding how to implement the module in Linux.
Libqmi expose a command line interface that can be used to communication with the module over QMI interface.
The qmicli help will output information about all commands available:
qmicli --help-all
The cellular modules QMI control interface are usually named cdc-wdm* e.g.:
qmicli --device=/dev/cdc-wdm0
In order to allow parallel commands to be execute on the module over QMI interface, it is recommended to use the libqmi proxy function. This can be done by including the attribute -p or --device-open-proxy in every qmicli command.
If a SIM pin is required for the SIM card, use command bellow:
qmicli --device=/dev/cdc-wdm0 -p --dms-uim-verify-pin=PIN,1234
The name of the related network interface to QMI control channel can be acquired with the command:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --get-wwan-iface
The most recent Qualcomm based cellular modules only expose QMI interfaces that can support Raw-IP mode. Sierra Wireless EM/MC74 and EM75 series modules, Telit LM940 and LN940 series for example require this.
Check what IP-mode the host system is configured for:
qmicli --device=/dev/cdc-wdm0 --get-expected-data-format
Check what IP-mode the cellular module require:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wda-get-data-format
to change qmi_wwan driver to use Raw-IP.
Disable the network interfaces exposed by the cellular module:
ip link set dev wwan0 down
Trigger the Raw-IP support:
echo Y > /sys/class/net/wwan0/qmi/raw_ip
Enable the network interfaces again:
ip link set dev wwan0 up
Now the data connection in the cellular module can be activated e.g. with a IPv4 type configuration on the specified APN:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wds-start-network="ip-type=4,apn=data.tre.se" --client-no-release-cid
Once "Network started" is displayed, you can send a DHCP request on the network interface.
Please note that not all DHCP clients in Linux can support Raw-IP format, udhcpc however support this for IPv4 over Raw-IP.
udhcpc -q -f -n -i wwan0
Disconnect the data bearer and data connection over QMI by command bellow and providing the network handle and CID returned at connection activation:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --wds-stop-network=NETWORK_HANDLE --client-cid=CID
Additional useful commands:
Request module manufacturer:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-manufacturer
Get module model:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-model
Get firmware version:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-revision
Get module IDs (IMEI etc.):
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --dms-get-ids
Get SIM card status:
qmicli --device=/dev/cdc-wdm0 --device-open-proxy --uim-get-card-status
Recent cellular modules like Sierra Wireless EM7565 require at least libqmi V1.20. Check version with command:
qmicli --version
If the connection was successfully set up established, you now have data connectivity. A ping to a remote server using the cellular network interface can for example prove this:
ping -I wwan0 8.8.8.8
The ifconfig Linux tool can show the current details for the network interface:
ifconfig wwan0
libqmi is well integrated and supported in ModemManager tool for Linux. ModemManager again is well integrated and supported when using NetworkManager tool in Linux. Please note however that these two tools expect the cellular module interfaces to only be used by them so if you manually want to use the libqmi library or AT commands interfaces, please turn off/disable ModemManager and NetworkManager first.
The libqmi is a generic open source library for Linux systems and QMI protocol from Qualcomm, therefor there are commands only working on selected devices and not necessarily supported on the device you use, resulting in an error message.
What Linux kernel modules and configs are commonly used for communicating with cellular modules over their USB interface?
Most cellular modules can be supported in Linux by using som of the in-kernel drivers. The physical data interface to the host Linux system is usually done over USB which enumerates a set of different endpoints/interfaces. A set of serial interfaces for Modem/PPP, AT commands, NMEA location data and chipset debug information are almost always available in all configurations.
In addition some type of network endpoint/interface are also available and exposed. This can vary between manufacturers and chipset vendors and can also commonly be configurable by using USB configuration mode switching or through vendor specific AT commands.
Recommended kernel configurations to enable are listed bellow. Many cellular modules base their Linux support on these modules and drivers. Once included in the kernel build, the USB interfaces will be detected and bound correctly out-of-the-box or after applying source code patches to the driver modules.
Configs for USB serial drivers:
CONFIG_USB_SERIAL
CONFIG_USB_SERIAL_GENERIC
CONFIG_USB_SERIAL_WWAN
CONFIG_USB_SERIAL_OPTION
CONFIG_USB_SERIAL_QUALCOMM
CONFIG_USB_ACM
Configs for Modem/PPP support:
CONFIG_PPP
CONFIG_PPP_BSDCOMP
CONFIG_PPP_DEFLATE
CONFIG_PPP_FILTER
CONFIG_PPP_MPPE
CONFIG_PPP_MULTILINK
CONFIG_PPPOE
CONFIG_PPP_ASYNC
CONFIG_PPP_SYNC_TTY
Configs for USB network drivers:
CONFIG_USB_USBNET
CONFIG_USB_NET_QMI_WWAN
CONFIG_USB_NET_CDCETHER
CONFIG_USB_NET_RNDIS_HOST
CONFIG_USB_NET_CDC_NCM
CONFIG_USB_NET_HUAWEI_CDC_NCM
CONFIG_USB_NET_CDC_MBIM
Please relate to the Techship product specific web pages for vendor specific Linux integration guides.
Below is a selection of kernel commits relating to cellular module support in Linux kernels:
qmi_wwan: Add support for Fibocom NL678 series
qmi_wwan: Added support for Telit LN940 series
qmi_wwan: Added support for Fibocom NL668 series
USB: serial: option: add support for GosunCn ME3630 RNDIS mode
USB: serial: option: add support for Simcom SIM7500/SIM7600 RNDIS mode
USB: serial: option: add Simcom SIM7500/SIM7600 (MBIM mode)
USB: serial: option: add Fibocom NL678 series
USB: serial: option: add Telit LN940 series
USB: serial: option: add Fibocom NL668 series
USB: serial: option: add GosunCn ZTE WeLink ME3630
qmi_wwan: apply SET_DTR quirk to the SIMCOM shared device ID
If you use any of the listed cellular modules, drivers and specified USB modes in the commits above, ensure that your kernel version already include the patch or apply it to your build.
How can we establish data connection for cellular modules in Windows 8 and Windows 10 systems?
Microsoft Windows desktop versions starting from Windows 8 and newer have built in data connection manager for WWAN, Wifi etc. that can be used to configure, control and establish the data connection of cellular module that support MBIM interface, which most cellular modules do.
The connection managers settings and controls can be found and accessed on Windows desktop start menu through the network icon (see picture).
The Cellular tab can be found in Windows system settings and if needed the connection APN details can be manually entered through "Advanced options".
How to set up a simple data connection over Qualcomm QMI interface using libqmi and driver qmi_wwan in Linux?
Several cellular modules based on Qualcomm chipsets implements the Qualcomm MSM QMI RMNET Interface.
There is a open source Linux in-kernel driver supporting this interface called qmi_wwan. The helper library libqmi can be used to communicate with the cellular devices over the interface and do cellular module configurations to control and trigger the data connection over the cellular network.
Install the libqmi Linux library using e.g. your OS package manager like apt etc.
(Check out the official libqmi page here: https://www.freedesktop.org/wiki/Software/libqmi/)
Please be aware that libqmi is a 3rd party software not distributed by the chipset or module vendors. So full compatibility on all available commands should not be expected.
There are Qualcomm chipset standard QMI commands and in addition vendors specific custom QMI commands not supported by all manufacturers, but still available in libqmi. There are also new QMI commands not supported in older chipsets and vice versa, old QMI commands no longer supported in new chipset series.
Verify that you have the Linux in-kernel qmi_wwan driver installed and loaded for the cellular modules QMI interface endpoint over USB:
lsusb -t
Can look like this:
...
|__ Port 1: Dev 3, If 2, Class=Vendor Specific Class, Driver=qmi_wwan, 480M
...
If the driver is not loaded correctly, please verify that the cellular module is set to expose QMI RMNET network interface endpoint in its configuration. How to do so can often be found in AT commands guides, Linux implementation guides and similar from the cellular module vendors.
Libqmi library include a command line tool qmicli that can be used in a more convenient way communicate directly with the module over QMI interface for testing, scripting and troubleshooting.
The qmicli help will output information about all commands available:
qmicli --help-all
The qmi_wwan network control interfaces for modules are usually named like cdc-wdm# under /dev/ path.
Use the attribute --device or -d to specify it for qmicli in your command execution:
qmicli --device=/dev/cdc-wdm0
qmicli -d /dev/cdc-wdm0
In order to ease usage of the QMI interface and handle parallell command requests, libqmi include a proxy function to handle it correctly on the QMI interface, To use it, make sure to have the the attribute present in the qmicli command:
-p
--device-open-proxy
Example commands on how to communicate
Request module manufacturer:
qmicli -p -d /dev/cdc-wdm0 --dms-get-manufacturer
Get module model:
qmicli -p -d /dev/cdc-wdm0 --dms-get-model
Get firmware version:
qmicli -p -d /dev/cdc-wdm0 --dms-get-revision
Get module IDs (IMEI etc.):
qmicli -p -d /dev/cdc-wdm0 --dms-get-ids
Get SIM card status:
qmicli -p -d /dev/cdc-wdm0 --uim-get-card-status
The script qmi-network can be used to establish a simple data connection, it will automatically try to verify the IP framing type match them correctly between qmi_wwan driver and module (Raw-IP vs. 802.3 IP framing).
Create a config file containing your network operator APN details and if needed, the username and password.
Save it e.g. in the default location /etc/qmi-network.conf
The parameter --profile=[PATH] can be used to define the path to config when executing qmi-network.
Example config file content: APN details and enabling of proxy usage.
Add the username and password lines if it is needed for your APN:
APN=my-network-operators-apn
APN_USER=my-apn-username
APN_PASS=my-apn-password
PROXY=yes
Once the APN information is saved, you can start the network connection with the command:
qmi-network /dev/cdc-wdm0 start
The name of the related network interface in the Linux system can be acquired with the command:
qmicli -p -d /dev/cdc-wdm0 --get-wwan-iface
Once you see "Network started successfully" message, you can send a DHCP request on the network interface.
Please note that not all DHCP clients in Linux can handle Raw-IP format but udhcpc support it.
udhcpc -q -f -i wwan0
The IP information from the cellular network can also be acquired and set manually to the network interface by the user or scripting, the correct address details can be acquired from the cellular module over QMI with command:
qmicli -p -d /dev/cdc-wdm0 --wds-get-current-settings
If the connection was successfully set up and established, you now have a data connection. Ping request to a remote server using the cellular network interface can prove this:
ping -I wwan0 8.8.8.8
The ifconfig Linux tool can show the current details for the network interface:
ifconfig wwan0
To bring down and stop the cellular network connection, please use the stop command bellow:
qmi-network /dev/cdc-wdm0 stop
The ModemManager tool for Linux is based on libqmi. NetworkManager and ModemManager . Please note however that these two tools expect the cellular module interfaces to only be used by them so if you manually want to use the libqmi library or AT commands interfaces, please turn off/disable ModemManager and NetworkManager first.
The libqmi is a generic open source library for Linux systems and QMI protocol from Qualcomm, therefor there are several commands only working on selected devices and not necessarily on supported in the specific device you use, resulting in an error message.
How can I enable DC voltage output for active GPS/GNSS antennas on modules that support this feature?
The 3 volt DC Low Noise Amplifier voltage supply from the cellular module can be enabled according to AT commands bellow:
For Sierra Wireless EM/MC74 series:
AT!ENTERCND="A710"
AT+WANT=1
For Sierra Wireless MC73 series:
AT!ENTERCND="A710"
AT+WANTGNSSPWR=1
For Simcom SIM7100, SIM7500, SIM7600 and SIM7600 -H series:
AT+CVAUXV=3050
AT+CVAUXS=1
How do I set USB-interface modes on my Sierra Wireless module?
Sierra Wireless modules can expose different USB interfaces, like MBIM, MODEM, NMEA or RMNET. The different interfaces can be combined or used individually, depending on the specific need for your project.
Here is how to set the different USB interface configurations. (In this example we use a Sierra Wireless EM7421, but it will be similar for many other Sierra Wireless modules.)
Make sure you get an OK after every AT command sent.
We start by typing:
AT
To be able to view what we just sent to the module we type:
ATE1
Since this feature is password protected we need to type:
AT!ENTERCND=”A710”
To see what USB interface we are currently using, just type AT!USBCOMP? and you should receive something like this:
Config Index: 1
Config Type: 3 (Generic)
Interface bitmask: 0000010D (diag,nmea,modem,rmnet0)
OK
Config index is what the type applies to and should be set to 1.
The config type means what USB composition is used. For this module USBIF-MBIM (1), PCIE USBIF (2), Legacy Generic (3) or RNDIS (4) are available.
Interface bitmask is the part where we see what USB interface our module is set to.
Now, to see what our USB interface options are we need to type:
AT!USBCOMP=?
Here we can see that for this module we have the following options:
DIAG - 0x00000001
NMEA - 0x00000004
MODEM - 0x00000008
RMNET0 - 0x00000100
MBIM - 0x00001000
These values are hexadecimal. So, for an example, if we wanted to activate all the options (DIAG, NMEA, MODEM and MBIM) we just add these values together.
If we open the Windows Calculator in Programmer mode (and make sure you have “HEX” selected!) and add all the values together like this 1 + 4+ 8 +1000, we will get 100D. (Please note, RMNET0 and MBIM cannot be used simultaneous for this module. Refer to the manual of your specific module to when setting up the USB interface.)
If we then send the following AT command to the module, we will set it to DIAG, NMEA, MODEM and MBIM:
AT!USBCOMP=1,3,100D
Again, type AT!USBCOMP? to confirm we have the new settings selected, it should look like this:
Config Index: 1
Config Type: 3 (Generic)
Interface bitmask: 0000100D (diag,nmea,modem,mbim)
OK
For further information please take a look at the AT command user guide available on the product's specific page under "technical documentation", which is available for download once logged in.
How do I select specific bands on my Sierra Wireless module?
The AT command AT!BAND can be used to select what specific GSM and LTE bands that you want to be active on your module.
If you are experiencing poor DL or UL speeds, one solution may be to only select the bands that you know are available, which can increase the transfer speeds.
(Please note that the following examples are when using a Sierra Wireless EM7421)
First, see that you get an “OK” with command:
AT
Then, to make sure you can see what command has been sent, type:
ATE1
Since what we are about to do is password protected, we need to type:
AT!ENTERCND="A710"
When entering AT!BAND? it will return a reply looking like (for example):
AT!BAND?
Index, Name, GW Band Mask L Band Mask 1 TDS Band Mask L Band Mask 2 L Band Mask 3 L Band Mask 4
00, All Bands 000200000C400000 000007A0880800C5 0000000000000000 0000000000000000 0000000000000000 0000000000000000
OK
The "00" is referring to the selected preset, "All Bands" to the preset name, "000200000C400000" to GSM bands and "000007A0880800C5" to selected LTE bands in hexadecimal.
To get information on all available bands, we need to type:
AT!BAND=?
Starting at the GSM band (at chapter "AT!BAND - Select/return frequency band set" in the AT command reference manual) we can see that 000200000C400000 corresponds to “0002000000000000 - B8 (900) + 0000000008000000 - B6 (800) + 0000000004000000 - B5 (850) + 0000000000400000 - B1 (2100) = 000200000C400000 (All GSM Bands)”
Now for LTE, which is probably what is a little tricky to understand. Let’s start the Windows Calculator and change it to Programmer mode. If you copy the "000007A0880800C5" into the calculator window it should convert it to binary.
HEX: 0000 07A0 8808 00C5
BIN: 0111 1010 0000 1000 1000 0000 1000 0000 0000 1100 0101
If you look at the line of BIN above you can see what bands are active (1) and which are not (0). Looking from right to left, the first bit corresponds to B1, second bit to B2, third bit B3, and so on…
HEX: 0000 07A0 8808 00C5
BIN: 0111 1010 0000 1000 1000 0000 1000 0000 0000 1100 0101
Selected bands: B1+B3+B7+B8+B20+B28+B32+B38+B40+B41+B42+B43
So if I, for example, only want the GSM bands "GSM 900MHz + GSM 850MHz", and LTE bands "B3, B4, B7, B28" we enter the following:
AT!BAND= 11,"Custom User Preset",0002000004000000,000000000800004C
Now we have created a new preset slot “11”, a name for the preset “Custom User Preset” and selected bands for GSM “GSM 900MHz + GSM 850MHz” and also selected bands for LTE "B3, B4, B7, B28", see explanation below:
Bands: B3, B4, B7, B28
Binary: 1000 0000 0000 0000 0000 0100 1100
Hexadecimal: 800 004C
Now we want to make sure our newly created preset is selected, so we type:
AT!BAND=11
And finally to check that we have selected the preset we again type AT!BAND? and should get the following response:
Index, Name, GW Band Mask L Band Mask 1 TDS Band Mask L Band Mask 2 L Band Mask 3 L Band Mask 4
11, Custom User Preset 0002000004000000 000000000800004C 0000000000000000 0000000000000000 0000000000000000 000000000000000
OK
For further information please take a look at the AT command user guide available on the product's specific page under "technical documentation", which is available for download once logged in.
How-to change the cellular modulesUSB composition mode to Mobile Broadband Interface Model (MBIM) used by Windows 8 and 10 systems for controlling and establishing data connectivity through the built-in connection manager in Windows?
This is done by sending a set of AT commands to the cellular modules Modem or AT serial interface found in Windows Device Manager. Please see list below for associated AT commands.
(For additional details, refer to the product specific software, ports, and AT commands guides found on the Techship product web pages under technical documentation tab).
After the AT commands have been received by the module and has restarted, the USB interface endpoint composition should have changed to include MBIM interface as well.
You can find the correct Serial COM port number by checking Windows Device Manager, under the Modems drop down -> (right click and see properties for selected COM port info) or under the Ports (COM & LPT) drop down.
Vendor specific commands to use:
Sierra Wireless EM74x0, MC74x0 series module:
AT!ENTERCND=”A710”
AT!USBCOMP=1,1,100D
AT!RESET
(See test command AT!USBCOMP=? for full usage description)
Sierra Wireless EM75xx, EM74x1, MC74x1 series module:
AT!ENTERCND=”A710”
AT!USBCOMP=1,3,100D
AT!RESET
(See test command AT!USBCOMP=? for full usage description)
Sierra Wireless EM73xx, MC73xx series module:
AT!ENTERCND=”A710”
AT!UDUSBCOMP=8
AT!RESET
Simcom SIM7100, SIM7500 and SIM7600 series modules:
AT+CUSBPIDSWITCH=9003,1,1
AT+CRESET
ZTE Welink ME3630 series:
AT+ZSWITCH=8
AT+ZRST
Telit LE910C1 and LE910C4 series:
AT#USBCFG=2
AT#REBOOT
Telit LM940 and LM940A11:
AT#USBCFG=2
AT#REBOOT
Telit LM960 and LM960A18:
AT#USBCFG=2
AT#REBOOT
Telit LE910 V2 series:
AT#USBCFG=3
AT#REBOOT
On Huawei and Telit LN94x series modules the USB mode changing is done automatically by the modules Windows drivers based on current Windows version.
Please be aware that some USB mode configurations do not include any serial interfaces, making it impossible to revert the changes using AT commands.
How to collect initial diagnostics data for Sierra Wireless EM/MC73 series cellular modules when requesting technical support?
In order to troubleshoot and solve a technical problem, we ask you to please provide information about your system and logs from the related module when creating a technical support ticket.
Please provide a problem description of what exact problem is and in what precise situations it is present.
Describe the host system:
-Hardware (system board, peripherals...)
-Operating system and detailed versions (E.g. Windows, Linux dist, release, kernel...)
-Drivers and driver versions
Identify the precise details of cellular module found on label:
-Model
-SKU/BOM or P/N code
(For RMA returns the IMEI number is required also)
If you are running on a Linux based system, please capture the terminal logs bellow:
uname -a
lsusb
lsusb -t
ifconfig -a
ls -l /dev/serial/by-id
ls -l /sys/bus/usb-serial/devices
dmesg
The logs from module firmware can be acquired by accessing one of the USB enumerated serial (COM) interfaces accepting AT commands. (In Windows this is generally modem devices or AT commands serial interfaces). Send the following AT commands to module and capture the text output and include them when creating the the technical support ticket.
Sierra Wireless :
ATI
AT!ENTERCND="A710"
AT!PRIID?
AT!HWID?
AT+CPIN?
AT+CFUN?
AT+CREG?
AT+CGREG?
AT+CEREG?
AT+COPS?
AT!GSTATUS?
AT+CGDCONT?
AT$QCPDPP?
AT+CGCONTRDP
AT+CGPADDR
AT!GOBIIMPREF?
AT!IMAGE?
AT!CUSTOM?
AT!CUSTOM=?
AT!BAND?
AT!PCINFO?
AT!PCTEMP?
AT!PCVOLT?
AT!UDUSBCOMP?
AT!UDUSBCOMP=?
AT!ERR
AT!BCFWUPDATESTATUS
AT!SELRAT?
AT!SELRAT=?
The support ticket can be created after login at: https://techship.com/technical_support/
The Sierra Wireless MC7304 shows multiple connections in Windows. I only want to use one, is there a way to turn off the other?
Sending the following AT Commands to the modules AT COM interface will change the USB profile used and the second connection interface will be disabled.
1. AT!ENTERCND=”A710”
2. AT!UDUSBCOMP=6
3. AT!RESET
I want to use a specific network technique. Can I specify that with a Sierra Wireless module?
The AT command AT!SELRAT lets you specify what technique to use.
The parameters are:
00, Automatic
01, UMTS 3G Only
02, GSM 2G Only
03, Automatic
04, Automatic
05, GSM and UMTS Only
06, LTE Only
07, GSM, UMTS, LTE
11, UMTS and LTE Only
12, GSM and LTE Only