Under the hood of the AIS 600 transmitter

10 Jul 2015

Categories

Boat (27) 
Not the Boat (12) 

Tags

Recent articles

25 Apr 2017

Ubuntu 16.10 LXC host on ZFS Root, with EFI and Time Machine

Still completely unrelated to boats, but I needed somewhere to put this. Here is a blow-by-blow guide to installing a minimal Ubuntu 16.10 to a ZFS root, booted from EFI, which as used as a LXC host to act as an Apple "Time Machine" destination.
mike 25 Apr 2017 at 17:20
14 Mar 2017

How to connect any serial device to the internet

A completely generic script that will proxy serial devices over HTTP, turning USB-things into internet-things.
mike 14 Mar 2017 at 23:00

I installed a Garmin AIS 600 AIS transceiver, although as my VHF receives AIS too I'll only power this one up when I want to transmit. Installation requires a Windows machine, which annoyed me as I dont have one. I fired up a virtual machine and put a sniffer on the serial port to log the conversation - the AIS600 uses a standard FT232R USB UART with a USB id of 0403:6001, and talks at 38400 baud. Here are a few of the sentences I received from it when I connected with a terminal program and didn't send anything:

    $PGRM,MSG,INITDONE*4B
    $PGRM,TXT,00,Part No: A038*2A
    $PGRM,TXT,01,HWVersion: 05*2A
    $PGRM,RES,LED,12*2E
    $PGRM,RES,SM,0,0*52
    $PGRM,TXT,02,Serial: 1234*4E
    $PGRM,TXT,03,Date of manufacture: 150303*39
    $PGRM,TXT,04,Firmware ver G.2.14*58
    $AIVER,,,AI,GARMIN@,,1234,A038,G.2.14,05*36
    $AITXT,01,01,50,AIS: GPS: no valid fix*4A
    !AIVDO,1,1,,,B00000000GwjL67Fe69L?wfUkP06,0*16
    $AISSD,@@@@@@@,@@@@@@@@@@@@@@@@@@@@,000,000,00,00,0,00*3C
    $AITXT,01,01,55,AIS: No MMSI*0A
    $AIVSD,037,,,,,,,,*51
    $GPRMC,093142.267,A,5124.8098,N,00011.1093,W,0.00,147.58,090715,,,A*77
    $PGRM,RES,LED,13*2F
    $PGRM,RES,MMSI,000000000*4A
    $PGRM,RES,SM,0,0*52
    

and here's the conversation when I fired up Garmin's configuration software - lines sent from the computer to the AIS are in yellow:

    $PGRM,GET,MMSI*44
    $PGRM,RES,MMSI,000000000*4A
    $AIAIQ,SSD*39
    $AISSD,@@@@@@@,@@@@@@@@@@@@@@@@@@@@,000,000,00,00,0,00*3C
    $DUAIQ,VSD*25
    $AIVSD,037,,,,,,,,*51
    $PGRM,GET,MMSI*44
    $PGRM,RES,MMSI,000000000*4A
    $AIAIQ,VER*3C
    $AIVER,,,AI,GARMIN@,,9829,A038,G.2.14,05*36
    $PGRM,DEBUG,ADC,1*02
    $PGRM,DEBUG,LED,1*09
    $PGRM,RES,ADC,0000,0000,41,5C,04EC,04EC,0488,0488*79
    $PGRM,RES,LED,13*2F
    $PGRM,SET,GPSCONF,2,1,3*16
    $PGRM,RES,ADC,0000,0000,41,5C,04EC,04EC,0488,0488*79
    

So we've learned the following:

  1. It is configured, and reports, over USB using standard NMEA0183-style sentences at 38400 baud. I haven't looked at its NMEA output yet but I'd be surprised if the output wasn't identical.
  2. The AIS reports GPS location over USB - a surprise, as the manual says "The AIS 600 does not accept GPS information from any other GPS device or antenna on the boat. Also, the AIS 600 does not share GPS information from the GA 30 antenna with any other device on the boat. Mind, the manual (along with Garmin's website and Garmin Support when I emailed them) also describe the supplied GA38 antenna as passive, which is rubbish - it is an active antenna.
  3. The device reports on its status LEDs - the value "13" above is, I think in hex (binary 00010011) and is a bitmask. Here's the table of LEDs from the manual, which I'll annotate with which bit in that value it is as I work them out - the only values I've seen in response so far are 13, 42 and 02:
    All ok Solid when the device is ready to transmit and receive. Bit 1
    RX Flashes when the device receives an AIS message ?
    TX Flashes when the device sends an AIS message Bit 6 ???
    RX only Solid when the device is in silent mode or when the device is not ready to transmit Bit 0 or 4
    Warning Flashes when there is a warning condition Bit 0 or 4
    SRM Flashes when the device transmits an SRM. ?
    Error The device is not able to transmit due to a critical error. ?
    VHF TX Solid when a connected VHF radio is transmitting. ?
  4. The device reports on at least one ADC with values in hex. The UI has a few fields where ADC values might apply: device voltage during idle and transmit, TX forward and reverse power and so on, but I didn't try to match the fields up with the reported values.

So far, so good, although to be honest there's not a lot we can do with this box other than set it up and forget about it. The unit sends a Class B AIS message type 19, which doesn't carry a lot of data that needs configuring. The only fields you can set in the GUI are MMSI, Callsign, Ship name, Vessel type (see table 11 for a list) and dimensions in four directions from the GPS antenna (useful on a supertanker, less so on a 10m yacht). Here's the conversation where I set the MMSI - substitute your own 9-digit MMSI for "xxxxxxxxx"

    $PGRM,SET,MMSI,xxxxxxxxx*48
    $PGRM,GET,MMSI*44
    $PGRM,RES,MMSI,xxxxxxxxx*4E
    

And to set the vessel name, callsign and dimensions:

    $AISSD,aaaaa,bbbbbbbbb,c,d,e,f,0,AI*17
    $AIAIQ,SSD*39
    $AISSD,aaaaa@@,bbbbbbbbb@@@@@@@@@@@,ccc,ddd,ee,ff,0,AI*57
    

Here "aaaaa" is your callsign (the response pads this to 7 characters with the "@" characters), "bbbbb" is your vessel name (which must be in capital letters - again the reponse is padded to 20 characters), and c, d, e and f are your bow, stern, port and starboard measurements from the GPS antenna in meters - response values are 0-padded to 3 or 2 digits. Finally, to set the vessel type to 36 (sailing vessel):

    $AIVSD,36,,,,,,,,*60
    $DUAIQ,VSD*25
    $AIVSD,036,,,,,,,,*50
    

It's worth pointing out that once you set your MMSI you can't reset it without some magic help from Garmin. Sending a $PGRM,SET,MMSI,123456789*4F and then a $PGRM,GET,MMSI*44 returns my original MMSI, and the UI tells me it can't be changed.

Finally, the software always sends $PGRM,SET,GPSCONF,2,1,1*14 before it disconnects, maybe to write the settings to flash? Don't know.