Linux – Verizon USB551L 4G Stick on Linux

linuxpppusb

I have been trying to get a Verizon USB551L 4G USB Stick working on Debian Linux. I have been able to get it to connect, but it always disconnects after 10 secs to 2.5 minutes, then it cannot connect again without a power cycle or reconnecting the stick. I know it is not a signal strength issue because I do not have the same problem under Windows, where the Verizon client shows 4 bars.

Does anybody have an idea about what the problem can be? More details follow.

With the same stick on Windows XP, I could establish a stable connection using Verizon's VzAccessManager, but using a manually configured DUN over the serial port, I experienced the same disconnect symptoms as on Linux.

I did the following with a Raspberry Pi with Debian GNU/Linux wheezy 3.2.27+. I also tried it with a Ubuntu Linux VirtualBox VM on my Mac, but I never got very far because the drivers did not recognize the card properly.

With the Raspberry Pi, the stick was recognized and the "cdc_ether" driver created a wwan0 interface for it, and the "option" driver created a /dev/ttyUSB0, /dev/ttyUSB1, /dev/ttyUSB2, and /dev/ttyUSB3. Details are shown below.

In order to set up the connection on Linux, I gleemed some info from the VZAccessManager and from sniffing the Windows COM port using a program called HHD Free Serial Port Monitor to show me the commands that Verizon is sending over the serial port to the modem:

ATS0=0
OK
AT
OK
AT&F&D2&C1E0V1S0=0
OK
AT+IFC=2,2
OK
AT+CGDCONT=3,"IP","vzwinternet","0.0.0.0",0,0
OK
ATD*99***3#
CONNECT EDGE

There was additional non-textual communication after this that I could not read, some of it may have been CHAP or PAP authentication providing credentials I could not see. Some of it was my internet access.

From the above and from the info I could get from the VZAccessManager screens, I cobbled together the following /etc/pppd/verizon-gprs and /etc/pppd/verizon-gprs-connect chat scripts that enabled me to connect on Linux.

verizon-gprs: (the ?????????? is the 10-digit phone number for my stick)

hide-password
noauth
user ??????????@vzw4g.com
password vzw
connect "/usr/sbin/chat -v -t3 -f /etc/ppp/peers/verizon-gprs-connect-chat"
debug
/dev/ttyUSB0
noipdefault
defaultroute
replacedefaultroute
persist
usepeerdns
nodetach

verizon-gprs-connect-chat:

TIMEOUT 35
ECHO    ON
ABORT   '\nBUSY\r'
ABORT   '\nERROR\r'
ABORT   '\nNO ANSWER\r'
ABORT   '\nNO CARRIER\r'
ABORT   '\nNO DIALTONE\r'
ABORT   '\nRINGING\r\n\r\nRINGING\r'
''  ATZ
OK  'ATS0=0'
OK  'AT&F&D2&C1E1V1S0=0'
OK  'AT+IFC=2,2'
OK  'AT+CGDCONT=3,"IP","vzwinternet","0.0.0.0",0,0'
OK  'ATD*99***3#'
CONNECT ''

I played with the above parameters, but could never get anything to connect for more than 2.5 minutes. And after it disconnected, it would never connect again — I had to disconnect and reconnect the stick before it the above connect scripts would work. I had similar experience with Windows XP with a DUN set to dial *99****3# using the same username and password as above, and setting 'AT+CGDCONT=3,"IP","vzwinternet","0.0.0.0",0,0' as the extra init parameter to be sent to the modem.

On my Rasbpery Pi, I also tried making the wwan0 connect directly by configuring it in /etc/networking/interfaces and then calling sudo ifup wwan0. But it never got an IP address. This was true regardless of whether I had first tried to connect the modem using pppd with the technique above.

At this point I have nothing else to try. I can't find anybody online who has been successful with this on Linux.

$ lsusb | grep Novatel
Bus 001 Device 005: ID 1410:b001 Novatel Wireless 
$ ls /dev/ttyUSB*
/dev/ttyUSB0  /dev/ttyUSB1  /dev/ttyUSB2  /dev/ttyUSB3
$ ifconfig wwan0
wwan0     Link encap:Ethernet  HWaddr 00:a0:c6:00:00:00  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:684 (684.0 B
$ dmesg
...
[   13.325406] usbcore: registered new interface driver usbserial
[   13.513047] cdc_ether 1-1.3.2:1.6: wwan0: register 'cdc_ether' at usb-bcm2708_usb-1.3.2, Mobile Broadband Network Device, 00:a0:c6:00:00:00
[   13.903537] USB Serial support registered for generic
[   13.998983] usbcore: registered new interface driver cdc_ether
[   14.039185] usbcore: registered new interface driver usbserial_generic
[   14.163290] usbserial: USB Serial Driver core
[   14.193011] cfg80211: Calling CRDA to update world regulatory domain
[   14.282386] USB Serial support registered for GSM modem (1-port)
[   14.435364] option 1-1.3.2:1.0: GSM modem (1-port) converter detected
[   14.536530] usb 1-1.3.2: GSM modem (1-port) converter now attached to ttyUSB0
[   14.610970] option 1-1.3.2:1.1: GSM modem (1-port) converter detected
[   14.680940] usb 1-1.3.2: GSM modem (1-port) converter now attached to ttyUSB1
[   14.733917] option 1-1.3.2:1.2: GSM modem (1-port) converter detected
[   14.778622] usb 1-1.3.3: reset high-speed USB device number 6 using dwc_otg
[   14.798339] usb 1-1.3.2: GSM modem (1-port) converter now attached to ttyUSB2
[   14.846967] option 1-1.3.2:1.4: GSM modem (1-port) converter detected
[   14.917340] usb 1-1.3.2: GSM modem (1-port) converter now attached to ttyUSB3
[   15.011231] usbcore: registered new interface driver option
...

Best Answer

I believe I am running these on Debian. Try installing wvdial, and edit /etc/wvdial.conf to look like below. Then run wvdial and see what it says.

[Dialer Defaults]
Stupid mode = 1
Dial Command = atdt
Carrier Check = no
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
Phone = *99***3#
ISDN = 0
Password = 1
New PPPD = yes
Username = 1
Modem = /dev/ttyACM0
Baud = 460800