TECHSHIP IS A GLOBAL SUPPLIER OF WIRELESS COMPONENTS
Interface board / translation board (TLB) which can be used with SIMCom EVB Board for rapid development.
This TLB includes a SIM7500A module.
SIMCom EVB Board bought separately 10513, SIMCom EVB kit
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:
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:
The cellular modules QMI control interface are usually named cdc-wdm* e.g.:
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:
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 126.96.36.199
The ifconfig Linux tool can show the current details for the network interface:
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:
Configs for Modem/PPP support:
Configs for USB network drivers:
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 to collect initial diagnostics data and logs for Simcom cellular modules, needed when requesting Techship technical support?
In order to troubleshoot and solve a technical problem, we ask you to please provide information about your host system and logs from the related Simcom module when creating a technical support ticket.
Detailed problem description and in what situations it present or can be reproduced.
Describe the host system:
-Hardware (system board, peripherals...)
-Operating system and detailed versions (E.g. Windows, Linux release, kernel...)
-Drivers and driver versions
Identify the precise details of cellular module found on label:
-SKU/BOM or P/N code
(For RMA returns the IMEI number is mandatory)
If you are running on a Linux based system, please capture the terminal logs bellow:
ls -l /dev/serial/by-id
ls -l /sys/bus/usb-serial/devices
The logs from the cellular module firmware can be acquired by accessing the USB enumerated serial (COM) interfaces accepting AT commands. They can be named modem, AT, PC UI etc. (In Windows device manager, found under modem or serial interfaces). Send the following AT commands bellow to module and capture the output and include them when creating the the technical support ticket.
Test that you get a reply with command:
Command echo enabled:
Basic module info:
Detailed module version info:
Verbose error reporting:
Last error report:
USB endpoint configuration:
List current configuration:
Request UE system info:
Preferred network mode:
Preferred band selection:
Preferred acquisition order:
List network operator info:
Network registration status:
Network EPS registration status:
Packet domain attach status
List APN details/PDP profiles:
PDP profiles attach status:
Show PDP IP address:
RM network interface status:
The support ticket can be created after login at: https://techship.com/technical_support/
How do we configure the Simcom SIM7100, SIM7500 and SIM7600 series cellular modules for usage in Windows 8 and 10 systems and support Windows built-in connection manager?
The Simcom modules are by default set in a USB configuration used most often by Linux and Windows 7 systems. If you want to use the module in Windows 8, 8.1, 10 systems with the Windows integrated connection manager you have to once configure and set the module to expose Mobile Broadband Interface Model (MBIM) interface as bellow:
Start by installing the latest Simcom series Windows drivers (instructions included in download package). They can be found on on our dedicated product web pages.
In Windows device manager you can now find a serial interface called e.g."SimTech HS-USB AT Port 9001 (COM5)" Memorize the COM* interface number in your system.
Open a command prompt with admin rights (right click Windows icon in bottom left corner). Copy and paste the command bellow, edit port number to match the one in your system and hit enter. The command will then be sent to module overt the serial interface.
ECHO AT+CUSBPIDSWITCH=9003,1,1 >\\.\COM5
If the command is received successfully by module, a restart of the cellular module will be performed and it appears with the new USB endpoints supporting Windows 8 systems and later.
Make sure that all Simcom module end points are correctly loaded in Windows device manager, a system restart might be necessary also.
By clicking the Windows network connection symbol in the start bar or navigating to the "Cellular" topic in Windows system settings you can now activate the connection and configure APN details and enter PIN code if it is necessary for the cellular connection and subscription you have.
How can we integrate the Simcom SIM7500/SIM7600 Series Linux NDIS driver in Linux kernel without rebuilding it?
The Simcom SIM7500/SIM7600 series Linux NDIS network driver can be built and installed without rebuilding the complete Linux kernel your OS distribution uses. Please see steps and pre-requirements bellow and download the attached "Simcom SIM7500 and SIM7600 Series Linux Network NDIS driver installation files and guide (without kernel rebuild)" archive to get started.
Should you instead want to include the NDIS driver into your customized Linux kernel build, please relate to "SIMCom SIM7500 - SIM7600 series modules Linux NDIS driver and system integration guide V2.01" attached to the FAQ.
All commands are supposed to be executed with elevated system privileges/as root user.
Ensure that your original kernel was built with the following config options enabled, this will allow the option and usbnet driver pre-requirments to be included in kernel. (usually already included in larger distributions)
Build-tools and Linux header files for your kernel version are also required, these can be installed e.g. through your OS distributions package manager, on Debian/Ubuntu systems:
apt-get install build-essential make gcc
apt-get install linux-headers-`uname -r`
The in-kernel qmi_wwan driver should be blacklisted and prevented from loading as it will block the Simcom wwan driver, this is how it can be done e.g. in Ubuntu systems:
grep -q -F 'blacklist qmi_wwan' /etc/modprobe.d/blacklist-modem.conf || echo 'blacklist qmi_wwan' >> /etc/modprobe.d/blacklist-modem.conf
Build and install the driver:
Unzip the archive and copy the folder sim7600 to your selected working directory.
Navigate to it, e.g.:
Build and install the drivers:
Some warnings might appear, but verify that no errors are reported.
Restarting the host system should now result in the correct network drivers being loaded for the cellular module once the USB device is detected in the system.
It can be verified by finding lsusb -t listing "Driver=simcom_wwan" for a USB endpoint:
Bus 001 Device 005: ID 1e0e:9001 Qualcomm / Option
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/8p, 480M
|__ Port 4: Dev 5, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 4: Dev 5, If 1, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 4: Dev 5, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 4: Dev 5, If 3, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 4: Dev 5, If 4, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 4: Dev 5, If 5, Class=Vendor Specific Class, Driver=simcom_wwan, 480M
dmesg | grep 'simcom_wwan'
simcom_wwan 1-4:1.5 wwan0: register 'simcom_wwan' at usb-0000:00:15.0-4, SIMCOM wwan/QMI device, 8a:d8:ff:c2:87:11
Additional make options and information:
If you've built the driver previously already, first clean out any old builds with:
If you only want to build the driver but not install it into /lib/modules/`uname -r`/kernel/drivers/net/usb/, use make without install parameter:
Testing of the cellular connection can easily be done by first performing the necessary initiation AT commands to the cellular module over Modem/AT commands serial interface normally located on /dev/ttyUSB2. Use e.g. minicom tool to communicate with it.
Can be installed e.g. through the distributions package manager:
apt-get install minicom
Access the serial interface:
minicom -D /dev/ttyUSB2
Please relate to AT commands guide for full details on what commands are supported.
Issue AT and check that you get OK as reply.
Enable echo on characters sent to module:
Request general info about module:
Enter the SIM pin code (if necessary for SIM card)
Enter your operators APN details:
Enter APN authentication details (if necessary) further details found in the AT commands guide.
Check network registration:
Activate and connect the cellular data connection to the network interface installed in Linux system:
When you get the reply $QCRMCALL: 1, V4 from cellular module it means that the data connection to your network operator is fully established and you can now exit the minicom tool (CTRL+A followed by Z key and Q key and select yes to exit).
Once here you can now perform a DHCP request on the cellular network interface in the Linux system by using your favorite DHCP client in Linux e.g. dhclient or udhc e.g.:
dhclient -v wwan0
The cellular network interfaces are normally named starting from wwan0 but might get renamed by some Linux distributions automatically. All available network interfaces can be listed with command:
ip link show
The network interface can be tested e.g. by sending ping requests to a remote server over the selected network interface:
ping -I wwan0 188.8.131.52
PING 184.108.40.206 (220.127.116.11) from 10.163.183.209 wwan0: 56(84) bytes of data.
64 bytes from 18.104.22.168: icmp_seq=1 ttl=120 time=191 ms
64 bytes from 22.214.171.124: icmp_seq=2 ttl=120 time=46.1 ms
64 bytes from 126.96.36.199: icmp_seq=3 ttl=120 time=52.8 ms
64 bytes from 188.8.131.52: icmp_seq=4 ttl=120 time=43.3 ms
--- 184.108.40.206 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 43.350/83.407/191.281/62.376 ms