DirectIP + MC7710 : unstable connectivity

Hello,

I am using a MC7710 modem in with LTE, in an embedded device.
Connection using AT commands then modprobing sierra_net works fine, and then connection seems to work correctly for an extended period of time.

But, whenever there’s a lot of traffic, we loose connectivity and we get the following message in dmesg :

sierra_net 1-6:1-7: wwan0: Link unavailable: 0xff

After this error message, to get the connectivity back, we’re forced to issue “AT!RESET” and then “AT!SCACT=1,1” to the unit before we can use the interface again.

I’d be glad to hear any advice or feedback regarding that kind of problem !

I don’t have any suggestion for fixing this with DirectIP. It does sound as if the firmware, or some part of the firmware, crashes. Just to verify that it is the modem state and not the driver state that is messed up: Does unloading and reloading the driver help? I.e.

rmmod sierra_net
modprobe sierra_net

(or whatever equivalent commands your embedded device supports)

If you still cannot reconnect, then it is pretty safe to assume that this is a firmware problem.

But I do have another suggestion: How about trying QMI mode with the qmi_wwan driver? Yes, I am biased having written the driver… But FWIW, the MC7710 is 100% stable for me using QMI mode. For example, I have tested downloading a 4.5GB DVD image with an average speed of 80Mbits/s. I’ve also used the connection for extended periods, maxing out whatever bandwidth I could get in both directions. BTW, exactly how much is a lot of traffic? Is that MB? GB? TB? I hope it’s not EB :slight_smile:

You will need some tool for your embedded device to initiate the connection using QMI if you want to follow my (bad?) advise here. Exactly what depends on what’s available for the platform. If all else fails, it’s always possible to create a limited binary supporting only the commands needed to start the connection.

Well, after some testing, the connection problem seems to come from connection losses :
when LTE connection is lost ; the “Link unavailable” message is issued and the modem does not try to reconnect unless you send it “scact=1,1”. That’s not the intended behavior but once you’re warned it is ok to correct it with scripts.
The driver does not seem to cause problems ! Anyway, if I find a way to compile a recent kernel on it, I’ll give a try to QMI drivers. ( We only got 2.6.35 for the moment

The problem with traffic came from the fact we are using this modem in a router between a Wifi network and LTE. Since it connects in 2.5/2.6Ghz band, we got frequency jamming between the two wireless connections and subsequent connection losses.

Is there any way to select the band used ?
“AT!BAND” enable us to choose 3G or 4G band, but I didn’t find anything regarding fine tuning of 4G bands. Is there some kind of undocumented AT command ?

OK, that sounds like a much more acceptable workaround than doing at!reset

That will probably just be a lot of unnecessary hassle as long as you can get DirectIP mode to work satisfactorily.

I do not think this should cause any serious connection problems, although the presence of the WiFi signal of course will add to the noise. You might want to look at the design and placement of the antennas and cable.

FWIW, I often use both WiFi and the 2.6 GHz LTE band simultaneously while testing on a laptop, without ever noticing any LTE connection related problems due to the WiFi usage.

The “AT!BAND” command changes depending on whether you are in basic or enhanced mode (you will of course have to ask Sierra about the xxx here):

at!band?
Index, Name
00, All bands


OK
at!band=?
Index, Name
00, All bands                     
01, Europe 3G                     
03, Europe 2G                     
04, North America 2G              
05, GSM ALL                       
06, Europe                        
07, North America                 
08, WCDMA ALL                     
09, LTE ALL                       

OK
at!entercnd="xxx"
OK
at!band=?
Index, Name,                        GW Band Mask     L Band Mask
00, All bands,                      0002000000600380 00000000000800C5
01, Europe 3G,                      0002000000400000 0000000000000000
03, Europe 2G,                      0000000000000380 0000000000000000
04, North America 2G,               0000000000200000 0000000000000000
05, GSM ALL,                        0000000000200380 0000000000000000
06, Europe,                         0002000000400380 00000000000800C5
07, North America,                  0000000000200000 0000000000000040
08, WCDMA ALL,                      0002000000400000 0000000000000000
09, LTE ALL,                        0000000000000000 00000000000800C5

                                                     0000000000080000 - B20    
                                                     0000000000000080 - B8     
                                                     0000000000000040 - B7     
                                                     0000000000000004 - B3     
                                                     0000000000000001 - B1     
                                    0002000000000000 - B8  (900)
                                    0000000000400000 - B1 (2100)
                                    0000000000200000 -     G1900
                                    0000000000000200 -     G900P
                                    0000000000000100 -     G900E
                                    0000000000000080 -     G1800

OK
at!band?
Index, Name,                        GW Band Mask     L Band Mask
00, All bands,                      0002000000600380 00000000000800C5


OK

Bjørn

I got an access to the advanced at!band command ; but I don’t know how to select a specific L Band Mask. Tried with AT!GBAND, but it seems to be useful only to select GW Band Mask.
Do you know how to set it ?

I’ll try to borrow an RF analyzer to test the “frequency jamming” theory… Maybe we got RF isolation problems in the device case.

Create a new band mask and select it:

at!band=10,"My bands",0002000000600380,0000000000000040
OK
at!band=?
Index, Name,                        GW Band Mask     L Band Mask
00, All bands,                      0002000000600380 00000000000800C5
01, Europe 3G,                      0002000000400000 0000000000000000
03, Europe 2G,                      0000000000000380 0000000000000000
04, North America 2G,               0000000000200000 0000000000000000
05, GSM ALL,                        0000000000200380 0000000000000000
06, Europe,                         0002000000400380 00000000000800C5
07, North America,                  0000000000200000 0000000000000040
08, WCDMA ALL,                      0002000000400000 0000000000000000
09, LTE ALL,                        0000000000000000 00000000000800C5
10, My bands,                       0002000000600380 0000000000000040

                                                     0000000000080000 - B20    
                                                     0000000000000080 - B8     
                                                     0000000000000040 - B7     
                                                     0000000000000004 - B3     
                                                     0000000000000001 - B1     
                                    0002000000000000 - B8  (900)
                                    0000000000400000 - B1 (2100)
                                    0000000000200000 -     G1900
                                    0000000000000200 -     G900P
                                    0000000000000100 -     G900E
                                    0000000000000080 -     G1800

OK
at!band=10
OK
at!band?
Index, Name,                        GW Band Mask     L Band Mask
10, My bands,                       0002000000600380 0000000000000040


OK

This is documented in the “AirPrime UMTS / LTE MC/SL-Series Extended AT Command Reference”, but the examples are maybe not to explanatory…

Anyway, needs like this could be a good reason to go for QMI. There you have access to all sorts of tweaks. Notice how the two band masks I set about is reflected in TLV 0x12 and 0x15 in the QMI output below (although the byte order is reversed here)

[Thu Jul 19 12:50:34 2012] read 74 bytes from /dev/cdc-wdm1
01 49 00 80 03 04 02 02 00 34 00 3d 00 02 04 00 00 00 00 00 10 01 00 00 11 02 00 10 00 12 08 00 80 03 60 00 00 00 02 00 14 02 00 ff 00 15 08 00 40 00 00 00 00 00 00 00 16 01 00 00 18 04 00 02 00 00 00 19 04 00 02 00 00 00 
<= QMUX Header:
<=   len:    0x0049
<=   sender: 0x80
<=   svc:    0x03
<=   cid:    0x04

<= QMI Header:
<=   Flags:  0x02
<=   TXN:    0x0002
<=   Cmd:    0x0034
<=   Size:   0x003d
<= [0x02] ( 4) 00 00 00 00      SUCCESS - QMI_ERR_NONE
<= [0x10] ( 1) 00       Emergency mode: off
<= [0x11] ( 2) 10 00    LTE
<= [0x12] ( 8) 80 03 60 00 00 00 02 00  "GSM DCS 1800" + "GSM Extended GSM (E-GSM) 900" + "GSM Primary GSM (P-GSM) 900" + "GSM PCS 1900" + "WCDMA Europe, Japan, and China IMT 2100" + "WCDMA Europe and Japan 900"
<= [0x14] ( 2) ff 00    Roaming preference: ANY
<= [0x15] ( 8) 40 00 00 00 00 00 00 00  E-UTRA Operating Bands 7
<= [0x16] ( 1) 00       Network Selection: automatic
<= [0x18] ( 4) 02 00 00 00      Circuit-switched and packet-switched
<= [0x19] ( 4) 02 00 00 00      WCDMA then GSM

The SWI AT command interface is very good, but such interfaces will always lack some features compared to management protocols like QMI.

Edit:

It might not be obvious how to delete a custom band set either. Setting the masks to 0 will do:

at!band=10,"My bands",0,0
OK
at!band=?
Index, Name,                        GW Band Mask     L Band Mask
00, All bands,                      0002000000600380 00000000000800C5
01, Europe 3G,                      0002000000400000 0000000000000000
03, Europe 2G,                      0000000000000380 0000000000000000
04, North America 2G,               0000000000200000 0000000000000000
05, GSM ALL,                        0000000000200380 0000000000000000
06, Europe,                         0002000000400380 00000000000800C5
07, North America,                  0000000000200000 0000000000000040
08, WCDMA ALL,                      0002000000400000 0000000000000000
09, LTE ALL,                        0000000000000000 00000000000800C5

                                                     0000000000080000 - B20    
                                                     0000000000000080 - B8     
                                                     0000000000000040 - B7     
                                                     0000000000000004 - B3     
                                                     0000000000000001 - B1     
                                    0002000000000000 - B8  (900)
                                    0000000000400000 - B1 (2100)
                                    0000000000200000 -     G1900
                                    0000000000000200 -     G900P
                                    0000000000000100 -     G900E
                                    0000000000000080 -     G1800

OK

Thanks for the info on at!band ! I was unable to find anything useful regarding this command previously…

I did a band mask with everything except B7 ( which was the band used in my tests ), but the modem seems unable to connect. I think our provider only use this band in our zone.

Anyway, an endurance test ran during the week-end : we got 15 hours of continuous connection, with traffic generated. the sierra_net driver seems to be ok ; we just got that strange disconnection problem with Wi-Fi. We are located at the edge of the reception zone, that may explain why a little perturbation causes disconnections.

Since W-CDMA still works well, I think we are going to stay in 3G for the moment, and maybe give it another try when coverage is better.
I was unable to compile a recent kernel for the device, since we got to apply a lot of specific patches ; but we’ll keep QMI drivers in sight for the future !