Sierra Wireless AirCard 555 for Linux



Introduction

This webpage documents my efforts to get the Sierra Wireless AirCard 555 PCMCIA Card working on both a Debian GNU/Linux Laptop. The AirCard 555 is a CDMA 1xRTT Data/Fax/Voice cellular modem sold through Verizon Wireless.

Sierra Wireless and Verizon Wireless both "support" various windows platforms for the AirCard 555. Though that shouldn't stop anyone from using it under linux. Most of the functionality is rather easy to get working under non-Windows environments.

Background

The AirCard 555 is a hybrid serial and network type PCMCIA Card. Data functionality can be accomplished using the serial port alone. Advanced features such as SMS, some voice call functionality, activating the phone, performing firmware upgrades, etc... are not possible using the serial port alone.

Using the serial functionality is rather easy under linux. I have yet to access the custom functionality of the AirCard 555.

Files Needed

All the files mentioned in this document are downloadable here.

Step 1: Activate the Modem

Activating the modem is not possible (at least I couldn't figure out how) using AT commands. You must first active the AirCard 555 using a windows based laptop and the provided software. Using the provided Sierra/VZW software CD also has the advantage of automatically updating the firmware of the AirCard 555 so I recomend doing this.

Once activated you can uninstall the windows software and never use windows again. If the modem is not activated you will be able to dial both data and voice calls but they will not work. It's a good thing to confirm you are up and running on a windows laptop before trying anything with linux.

Step 2: Make cardmgr recognize the AirCard 555 as a serial card.

By default cardmgr will guess that the AirCard 555 is a 'network' type device. This isn't correct.

To make cardmgr see the AirCard 555 as a serial device you need to add a config file and a cis file under /etc/pcmcia/

/etc/pcmcia/aircard555.conf:

card "Sierra Wireless AirCard 555"
  manfid 0x0192, 0xa555
  cis "cis/aircard555.dat"
  bind "serial_cs"

/etc/pcmcia/cis/aircard555.cis:
dev_info
  no_info
attr_dev_info
  EEPROM 250ns, 512b
manfid 0x013f, 0x0710
funcid serial_port
vers_1 7.0, "Sierra Wireless", "AirCard 555", "A555", "Rev 1"
config base 0x0700 mask 0x0073 last_index 0x03
cftable_entry 0x20 [default]
  io 0x03f8-0x03ff [lines=3] [8bit] [range]
  irq mask 0x3fbc [level]
cftable_entry 0x21
  io 0x02f8-0x02ff [lines=3] [8bit] [range]
cftable_entry 0x22
  io 0x03e8-0x03ef [lines=3] [8bit] [range]
cftable_entry 0x23
  io 0x02e8-0x02ef [lines=3] [8bit] [range]
cftable_entry 0x24
  io 0x0000-0x0007 [lines=3] [8bit]

/etc/pcmcia/cis/aircard555.dat (Generated):
$ cd /etc/pcmcia/cis/
$ pack_cis -o aircard555.dat aircard555.cis

Once these files are added and cardmgr is restarted inserting the AirCard 555 should cause something like this:

cardmgr[260]: socket 0: Sierra Wireless AirCard 555
kernel: ttyS02 at port 0x03e8 (irq = 9) is a 16550A
cardmgr[260]: executing: './serial start ttyS2'

Once configured you can test the serial port with a terminal program such as minicom. If you can type 'AT' and get a responce you're good to go.

Step 3: Configure PPP and Authentication

If you are using Debian/GNU Linux configuring PPP and Authentication on the AirCard 555 couldn't be simpler:

$ pppconfig

Main Menu:
       Create  Create a connection    

Provider Name:
       aircard

Configure Nameservers (DNS):
       (*) Dynamic  Use dynamic DNS

Authentication Method for aircard:
       CHAP      Crypto Handshake Auth Protocol

User Name:
       xxxxxxxxxx  (Your 10-Digit AirCard 555 Phone Number)

Password:
       vzw

Speed:
       115200

Pulse or Tone:
       (*) Tone

Phone Number:
       #777

Choose Modem Config Method
       <No>

Manually Select Modem Port
       /dev/ttyS2

+--------------------------- Properties of aircard ----------------------------+
|                                                                              | 
|            Number    #777                 Telephone number                   | 
|            User      xxxxxxxxxx           ISP user name                      | 
|            Password  vzw                  ISP password                       | 
|            Speed     115200               Port speed                         | 
|            Com       /dev/ttyS2           Modem com port                     | 
|            Method    CHAP                 Authentication method              | 
|                                                                              | 
+------------------------------------------------------------------------------+

Step 4: Connect

To connect/disconnect simply use pon and poff as you would with a POTS modem.

$ pon aircard

pppd[9821]: pppd 2.4.1 started by root, uid 0
pppd[9821]: Removed stale lock on ttyS2 (pid 9318)
chat[9822]: abort on (BUSY)
chat[9822]: abort on (NO CARRIER)
chat[9822]: abort on (VOICE)
chat[9822]: abort on (NO DIALTONE)
chat[9822]: abort on (NO DIAL TONE)
chat[9822]: abort on (NO ANSWER)
chat[9822]: abort on (DELAYED)
chat[9822]: send (ATZ^M)
chat[9822]: expect (OK)
chat[9822]: ATZ^M^M
chat[9822]: OK
chat[9822]:  -- got it 
chat[9822]: send (ATDT#777^M)
chat[9822]: expect (CONNECT)
chat[9822]: ^M
chat[9822]: ATDT#777^M^M
chat[9822]: CONNECT
chat[9822]:  -- got it 
chat[9822]: send (\d)
pppd[9821]: Serial connection established.
pppd[9821]: using channel 2
pppd[9821]: Using interface ppp0
pppd[9821]: Connect: ppp0 <--> /dev/ttyS2
pppd[9821]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xnnnnnnnn> <pcomp> <accomp>]
pppd[9821]: sent [LCP ConfReq id=0x1 <asyncmap 0x0> <magic 0xnnnnnnnn> <pcomp> <accomp>]
pppd[9821]: rcvd [LCP ConfReq id=0x1 <mru 1514> <asyncmap 0x0> <auth chap MD5>
                 <magic 0xmmmmmmmm> <pcomp> <accomp> <mrru 1514> <endpoint [null]>]
pppd[9821]: sent [LCP ConfRej id=0x1 <mrru 1514>]
pppd[9821]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xnnnnnnnn> <pcomp> <accomp>]
pppd[9821]: rcvd [LCP ConfAck id=0x1 <asyncmap 0x0> <magic 0xnnnnnnnn> <pcomp> <accomp>]
pppd[9821]: rcvd [LCP ConfReq id=0x2 <mru 1514> <asyncmap 0x0> <auth chap MD5>
                 <magic 0xmmmmmmmm> <pcomp> <accomp>]
pppd[9821]: sent [LCP ConfAck id=0x2 <mru 1514> <asyncmap 0x0> <auth chap MD5>
                 <magic 0xmmmmmmmm> <pcomp> <accomp>]
pppd[9821]: sent [LCP EchoReq id=0x0 magic=0xnnnnnnnn]
pppd[9821]: rcvd [CHAP Challenge id=0x3 <oooooooooooooooooooooooooooooooo>, name = "HiPer"]
pppd[9821]: sent [CHAP Response id=0x3 <pppppppppppppppppppppppppppppppp>, name = "xxxxxxxxxx"]
pppd[9821]: rcvd [LCP EchoRep id=0x0 magic=0xmmmmmmmm]
pppd[9821]: rcvd [CHAP Success id=0x3 "\000"]
pppd[9821]: Remote message: ^@
pppd[9821]: kernel does not support PPP filtering
pppd[9821]: sent [IPCP ConfReq id=0x1 <addr 0.0.0.0> <compress VJ 0f 01> <ms-dns1 0.0.0.0>
                 <ms-dns3 0.0.0.0>]
pppd[9821]: sent [CCP ConfReq id=0x1 <deflate 15> <deflate(old#) 15> <bsd v1 15>]
pppd[9821]: rcvd [IPCP ConfReq id=0x4 <compress VJ 0f 00> <addr 66.174.qq.q>]
pppd[9821]: sent [IPCP ConfAck id=0x4 <compress VJ 0f 00> <addr 66.174.qq.q>]
pppd[9821]: rcvd [IPCP ConfNak id=0x1 <addr 166.180.r.rrr> <compress VJ 0f 00>
                 <ms-dns1 66.174.t.t> <ms-dns3 66.174.s.s>]
pppd[9821]: sent [IPCP ConfReq id=0x2 <addr 166.180.r.rrr> <compress VJ 0f 00>
                 <ms-dns1 66.174.t.t> <ms-dns3 66.174.s.s>]
pppd[9821]: rcvd [LCP ProtRej id=0x5 tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt tt]
pppd[9821]: rcvd [IPCP ConfAck id=0x2 <addr 166.180.r.rrr> <compress VJ 0f 00>
                 <ms-dns1 66.174.t.t> <ms-dns3 66.174.s.s>]
pppd[9821]: Cannot determine ethernet address for proxy ARP
pppd[9821]: local  IP address 166.180.r.rrr
pppd[9821]: remote IP address 66.174.qq.q
pppd[9821]: primary   DNS address 66.174.t.t
pppd[9821]: secondary DNS address 66.174.s.s
pppd[9821]: Script /etc/ppp/ip-up started (pid 9833)
pppd[9821]: Script /etc/ppp/ip-up finished (pid 9833), status = 0x0

And that's it!

root-intrepid:2079:~/ ifconfig ppp0
ppp0      Link encap:Point-to-Point Protocol  
          inet addr:166.180.r.rrr  P-t-P:66.174.qq.q  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1514  Metric:1
          RX packets:4 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:201 (201.0 b)  TX bytes:141 (141.0 b)

root-intrepid:2080:~/ ping 66.174.qq.q
PING 66.174.qq.q (66.174.qq.q): 56 data bytes
64 bytes from 66.174.qq.q: icmp_seq=0 ttl=255 time=328.8 ms
64 bytes from 66.174.qq.q: icmp_seq=1 ttl=255 time=489.8 ms
64 bytes from 66.174.qq.q: icmp_seq=2 ttl=255 time=329.9 ms
64 bytes from 66.174.qq.q: icmp_seq=3 ttl=255 time=509.9 ms
64 bytes from 66.174.qq.q: icmp_seq=4 ttl=255 time=329.9 ms

--- 66.174.qq.q ping statistics ---
5 packets transmitted, 5 packets received, 0% packet loss
round-trip min/avg/max = 328.8/397.6/509.9 ms
root-intrepid:2081:~/ 

Advanced Use

If you want to force 1xRTT or non-1xRTT data sessions you can use a different phone number. Voice calls are also possible by issuing AT commands but there is no way to generate DTMF tones once a voice call is made.

AT Command Function
ATDT #777 Create PPP data call (autodetect mode)
ATDT #19788 Create PPP data call (1xRTT only)
ATDT #762 Create PPP data call (IS-95 only)
AT+CDV nnnnnnnnnn Create voice call
AT+CHV End voice call
AT$QCCAV Answer incoming voice call
AT!STATUS Show modem status:
AT!STATUS
Current band: Cellular Sleep
Current channel: 384
Pilot acquired
Modem has registered

OK

Feedback

Email me at dave-266bbf6d10031002@centerclick.org


Shop Now! amazon.com