I am trying to integrate MC7455 for an embedded platform that is using free rtos running on Cortex M7. All the drivers that are available for this modem supports only linux or windows platform. I understand that this device only supports QMI interface. This intend of using the GSM modem is to transfer data to and from a server. Can someone help me out in pointing out which driver should I use to integrate this device ?
Nobody can answer your question until you describe (in short, of course) networking capabilities of that Free RTOS : what can we choose from?
Does it support, e.g., CDC, NDIS, MBIM or similar? What kinds of network adapters are supported, if any?
Thanks for the reply.
The FreeRtos just provides basic scheduling functionality. It doesn’t have any network stack as such. So I am using a LWIP for networking functionalities.
Protocols: IP, ICMP, UDP, TCP, IGMP, ARP, PPPoS, PPPoE
- DHCP client, DNS client, AutoIP/APIPA (Zeroconf), SNMP agent (private MIB support)
- APIs: specialized APIs for enhanced performance, optional Berkeley-alike socket API
- Extended features: IP forwarding over multiple network interfaces, TCP congestion control, RTT estimation and fast recovery/fast retransmit
- Addon applications: HTTP server, SNTP client, SMTP client, ping, NetBIOS nameserver
It doesn’t have any of the mobile broadband data network stack. As USB is the physical medium between Cortex M3 and the MC7455, I am planning to use the SMX provided USB host stack for interfacing this device. It supports, ACM (Modem), Serial (Windows Mobile 5 Device, CDC/ACM-like), Serial Converter FTDI FT232B/LC/R, USB to Ethernet Adapter, Sierra Wireless Dongle and Huawei K4510 3G Wireless Dongle as Communication Class Drivers
If “USB to Ethernet Adapter” means a CDC ECM driver, then you have most of what you need to make a QMI driver. Take a look at GobiNet for the rest.
a QMI/RMNET function is basically a CDC ECM function with the control and data interfaces combined into a single interface, and using standard CDC SEND_ENCAPSULATED_COMMAND/GET_ENCAPSULATED_RESPONSE messages to transport QMI.
Thanks for you reply. In the datasheet of MC7455, it lists both QMI or MBIM as software interface. QMI is quite proprietary and the vendor says to sign a non disclosure agreement to get access to the protocol. MBIM seems to be pretty open standard. What is the difference w.r.t using either of these protocols
MBIM depends on aggregate framing of IP packets, and supports multiplexing of multiple IP sessions and/or “device service stream” sessions. You do of course not need to implement all the gory details, but you cannot avoid the more complex framing with a NTH header and a NDP datagram index with specific alignment constraints. ECM is much simpler, wrapping a single ethernet packet in each USB bulk transmission and no additional framing. Except maybe a final dummy byte to avoid ending up on a USB packet boundary.
But when I said that, I rememered the raw-ip constraint of MC7455… Which really makes everything easier. But it also means that the QMI driver for MC7455 isn’t completely identical to a CDC ECM driver. The MC7455 QMI/RMNET functions transmit plain IP packets with no additional headers, not even ethernet (ignoring the optional QMI QoS header). One IP packet per USB bulk transmission. Can’t get any simpler than that. As I said: Take a look at Sierra’s GobiNet Linux driver. The code will explain all this.
Yes, QMI is Qualcomm proprietary and docs are not public. MBIM is standard and open, but extremely limited in comparison. Except that the Sierra MC7455 exports QMI access as an MBIM service, which means that you have the full power of QMI in MBIM too. Which protocol to choose depends on your priorities. I’d go for QMI personally if I were to write a driver from scratch, due to the very simple framing.
Got into another doubt when trying out the Gobi Drivers today. When I connect the modem to my Ubuntu Linux PC, both the GobiNet and GobiSerial drivers gets loaded. It exposes couple of devices and when I tried connecting to internet by clicking on the Enable Broadband Modem option, all the network traffic was getting routed through the /dev/ttyUSB2 device. I then tried removing the GobiNet driver by blacklisting that and use only GobiSerial and found that it still works. The OS opens up a PPP connection and transfers all the data through that. So without GobiNet the set up still is able to connect to the network.
But when I use the sample application given in the SDK from Sierra Wireless(especially the Connection Manager) , the system doesnt connect the network by creating PPP connection, instead uses eth0 and eth1 interfaces for the data transfer.
So it looks like there are two different ways to connect thru this device. As I already have drivers for the first mentioned approach, it would be easier for me to set this up in freeRtos. Do you see any issue in that approach ?