| | 1 | [[PageOutline]] |
| | 2 | = GW16171 - Precision GNSS M.2 Card |
| | 3 | |
| | 4 | The GW16171 is a precision GNSS M.2 Card featuring the Septentrio mosaic-G5 multi-frequency receiver. |
| | 5 | |
| | 6 | Read more on the official product page here: [https://www.gateworks.com/products/wireless-options/gw16171-septentrio-g5-mosaic-precision-gnss-m2-card/] |
| | 7 | |
| | 8 | |
| | 9 | == Features |
| | 10 | The GW1671 features a [https://www.gateworks.com/products/wireless-options/gw16171-septentrio-g5-mosaic-precision-gnss-m2-card/ Septentrio Mosaic-G5 Precision GNSS receiver] on an M.2 A/E Key card with: |
| | 11 | - 2-wire UART (COM1) (optional) |
| | 12 | - USB 2.0 (USB1, USB2, RNDIS, USB Mass Storage) |
| | 13 | - RESET# (connected to Mosaic active-high NRST_IN#) |
| | 14 | - PPS_OUT, PPS_IN |
| | 15 | - EVENTA_IN |
| | 16 | - 4 LEDs: Power, GPLED, GPLED2, LOGLED |
| | 17 | - microSD socket (for data logging) |
| | 18 | |
| | 19 | == GW16171 M.2 Pinout |
| | 20 | |
| | 21 | The following tables provide the connector pinouts for the 10-pin debug header and the M.2 A/E-Key connector. Optional signals for the Gateworks adapter are highlighted in yellow and have a “OPT” label. These are no-connects on the standard board model, contact sales for special models with support for these signals. The UART signals highlighted in green are connected to the GNSS module but are not required for module operation and can be no-connects. The 10-pin debug header is a 0.050” dual row thru-hole connector and is not loaded on the standard model but can be easily probed. |
| | 22 | |
| | 23 | M.2 Pinout: |
| | 24 | - M2.56 RST#(1.8/3.3V); must be driven high to take Mosaic-G5 out of reset |
| | 25 | - M2.2 VDD_BAT |
| | 26 | - M2.3 USB_DP |
| | 27 | - M2.5 USB_DM |
| | 28 | - M2.22 UART_TXD (1.8V) output from card |
| | 29 | - M2.32 UART_RXD (1.8V) input to card |
| | 30 | - M2.34 PPS (1.8V) output from card; normally UART_RTS; via R23 (loaded) |
| | 31 | - M2.36 EVENTA (1.8V) input to card; normally UART_CTS; via R24 (loaded) |
| | 32 | - M2.4,72,74 VDD_3P3 |
| | 33 | - M2.1,7,33,39,45,51,57,63,69,75 GND |
| | 34 | - M2.67 EVENTB(1.8V); optional; via R22 (unloaded) |
| | 35 | |
| | 36 | |
| | 37 | [[Image(GW16160debug.jpg)]] |
| | 38 | |
| | 39 | |
| | 40 | == Antenna |
| | 41 | |
| | 42 | There are two antenna ports for the Mosaic G5. |
| | 43 | |
| | 44 | To get started, a recommended antenna is the Yokowo Manufacturing of America YOZ-52728ZZ01-YM available [https://www.digikey.com/en/products/detail/yokowo-manufacturing-of-america-llc/YOZ-52728ZZ01-YM/25603978 here] |
| | 45 | |
| | 46 | A smaller option we like is the TW7972, and a bit larger one for machine control-type applications (or car tests) is the !PolaNt* MC.v2. |
| | 47 | |
| | 48 | A list of antennas from Septentrio is here: |
| | 49 | [https://www.septentrio.com/en/support/product-resources/supportresources/gnssantennas] |
| | 50 | |
| | 51 | The unloaded second antenna port can be used for different Septentrio GNSS receivers that are an optional load. |
| | 52 | |
| | 53 | == Compatibility |
| | 54 | The GW16171 requires an M.2 E-Key socket with USB2.0 and M2.56 RST#. |
| | 55 | |
| | 56 | The only E-Key sockets on Gateworks boards are: |
| | 57 | - GW16151 MiniPCIe to M.2 E-Key Adapter - works with the standard board that has reset on Pin 56 but it won't work with a custom board with pin 23 as reset (won't bring Mosaic out of reset). |
| | 58 | - GWx20x+GW16FE0 in FSA2 - SDIO_RESET# is pin23 and is GPIO2_10. To take out of reset you can add 'gpio set gpio2_10' to U-Boot scripts (ie preboot). FSA1 does not connect pin23. Pin 56 reset is supported by both FSA1 and FSA2. |
| | 59 | |
| | 60 | Examples: |
| | 61 | * GW820x+GW16FE0 in FSA2: |
| | 62 | - set GPIO in U-Boot: |
| | 63 | {{{ |
| | 64 | setenv preboot "$preboot; gpio set gpio2_10" |
| | 65 | saveenv |
| | 66 | }}} |
| | 67 | |
| | 68 | == Reset |
| | 69 | The Mosiac-G5 NRST_IN# needs to be floating (internal pu) or driven high at 3.3V to allow the card out of reset. |
| | 70 | |
| | 71 | The standard GW16171 uses M.2 Pin 56 (W_DISABLE1#) as the source of this reset. |
| | 72 | |
| | 73 | |
| | 74 | |
| | 75 | == USB Interface |
| | 76 | When powered and out of reset, the Mosiac-G5 USB interface enumerates on the USB bus with a VID/PID of 0x152a:0x85c0: |
| | 77 | {{{#!bash |
| | 78 | Bus 003 Device 004: ID 152a:85c0 Thesycon Systemsoftware & Consulting GmbH Septentrio USB Device |
| | 79 | }}} |
| | 80 | |
| | 81 | The USB device provides 7 endpoints: |
| | 82 | - {0,1} - RNDIS Ethernet device (Linux rndis_host driver) |
| | 83 | - {2,3} - CDC ACM device (Linux cdc_acm driver) |
| | 84 | - {4,5} - CDC ACM device (Linux cdc_acm driver) |
| | 85 | - 6 - USB Mass Storage device (Linux usb-storage driver) |
| | 86 | |
| | 87 | A Linux kernel would show: |
| | 88 | {{{#!bash |
| | 89 | [ 213.543608] usb 3-1.2: new high-speed USB device number 5 using xhci-hcd |
| | 90 | [ 213.653262] usb 3-1.2: New USB device found, idVendor=152a, idProduct=85c0, bcdDevice= 3.14 |
| | 91 | [ 213.661651] usb 3-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3 |
| | 92 | [ 213.668987] usb 3-1.2: Product: Septentrio USB Device |
| | 93 | [ 213.674075] usb 3-1.2: Manufacturer: Septentrio |
| | 94 | [ 213.678628] usb 3-1.2: SerialNumber: 3838051 |
| | 95 | [ 213.799064] rndis_host 3-1.2:1.0 eth0: register 'rndis_host' at usb-xhci-hcd.1.auto-1.2, RNDIS device, 1a:32:02:9 |
| | 96 | 9:15:45 |
| | 97 | [ 213.814494] cdc_acm 3-1.2:1.2: ttyACM0: USB ACM device |
| | 98 | [ 213.822420] cdc_acm 3-1.2:1.4: ttyACM1: USB ACM device |
| | 99 | [ 213.828650] usb-storage 3-1.2:1.6: USB Mass Storage device detected |
| | 100 | [ 213.835529] scsi host0: usb-storage 3-1.2:1.6 |
| | 101 | [ 213.864384] rndis_host 3-1.2:1.0 enx1a3202991545: renamed from eth0 |
| | 102 | [ 214.868534] scsi 0:0:0:0: CD-ROM Linux File-CD Gadget 0314 PQ: 0 ANSI: 2 |
| | 103 | [ 214.877127] scsi 0:0:0:1: Direct-Access Linux File-CD Gadget 0314 PQ: 0 ANSI: 2 |
| | 104 | [ 214.886483] sr 0:0:0:0: Power-on or device reset occurred |
| | 105 | [ 214.893005] sr 0:0:0:0: [sr0] scsi-1 drive |
| | 106 | [ 214.903049] sr 0:0:0:0: Attached scsi CD-ROM sr0 |
| | 107 | [ 214.908064] sr 0:0:0:0: Attached scsi generic sg0 type 5 |
| | 108 | [ 214.914321] sd 0:0:0:1: Attached scsi generic sg1 type 0 |
| | 109 | [ 214.914851] sd 0:0:0:1: Power-on or device reset occurred |
| | 110 | [ 214.926006] sd 0:0:0:1: [sda] Media removed, stopped polling |
| | 111 | [ 214.932590] sd 0:0:0:1: [sda] Attached SCSI removable disk |
| | 112 | }}} |
| | 113 | |
| | 114 | |
| | 115 | === USB ACM interfaces |
| | 116 | The 2x USB ACM interfaces are represented by USB1 and USB2 Connection Descriptors (CD) and would typically enumerate as /dev/ttyACM0 and /dev/ttyACM1. |
| | 117 | |
| | 118 | Examples: |
| | 119 | {{{#!bash |
| | 120 | screen /dev/ttyACM0 # USB1 |
| | 121 | screen /dev/ttyACM1 # USB2 |
| | 122 | }}} |
| | 123 | |
| | 124 | |
| | 125 | === RNDIS Ethernet device |
| | 126 | The RNDIS Ethernet interface (not to be confused with the RMII Ethernet) provides a built-in web-server on port 80 on a fixed IP of 192.168.3.1 |
| | 127 | |
| | 128 | To utilize this you can put the interface in a bridge with your primary network device. |
| | 129 | |
| | 130 | Example: |
| | 131 | * GW8201 where eth0 is your LAN connection, eth1 is the PCI GbE, eth2 (or usb0) would be the Mosaic-G5 RNDIS interface you can put eth0 and eth2 (or usb0) in a bridge |
| | 132 | - With the following /etc/network/interface (recommended): |
| | 133 | {{{#!bash |
| | 134 | allow-hotplug eth0 |
| | 135 | auto br0 |
| | 136 | iface br0 inet dhcp |
| | 137 | bridge_ports eth0 eth2 #eth2 could be defined as usb0 |
| | 138 | bridge_stp off |
| | 139 | bridge_fd 0 |
| | 140 | bridge_maxwait 0 |
| | 141 | }}} |
| | 142 | - Manually (not recommended): |
| | 143 | {{{#!bash |
| | 144 | brctl addbr br0 |
| | 145 | brctl addif br0 eth0 |
| | 146 | brctl addif br0 eth2 #eth2 could be defined as usb0 |
| | 147 | udhcpc br0 |
| | 148 | }}} |
| | 149 | |
| | 150 | After bringing up the bridge and the bridge getting a network address give your host computer a static IP on the 192.168.3/24 network and you can open a URL to 192.168.3.1 to access the web admin. |
| | 151 | |
| | 152 | Use the ifconfig command to be sure usb0 or eth2 is listed and bring the interface up with the command: |
| | 153 | {{{ |
| | 154 | ifconfig usb0 up |
| | 155 | }}} |
| | 156 | |
| | 157 | === USB Mass Storage interface |
| | 158 | The USB Mass storage interface allows access to the SD interface on the Mosaic-G5. |
| | 159 | |
| | 160 | By default the Mosaic-G5 will mount the microSD internally to be used for highly configurable logging represented as the DSK1 connection descriptor (CD). If you unmount this internally it is made available via the USB Mass Storage device. |
| | 161 | |
| | 162 | == SD Interface |
| | 163 | The SD interface on the Mosaic-G5 is a 1-bit SDIO device which goes to a MicroSD socket on the GW16171. |
| | 164 | |
| | 165 | Receiver config examples: |
| | 166 | * use the '!LstDiskInfo,DSK1' receiver command to obtain info about it: |
| | 167 | {{{#!bash |
| | 168 | LstDiskInfo,DSK1 |
| | 169 | ----> |
| | 170 | $-- BLOCK 1 / 0 C |
| | 171 | <?xml version="1.0" encoding="ISO-8859-1" ?> |
| | 172 | <DiskInfo version="0.1"> |
| | 173 | |
| | 174 | ----> |
| | 175 | $-- BLOCK 2 / 0 C |
| | 176 | <Disk name="DSK1" total="7931641856" free="7931449344" > |
| | 177 | <File name="log.nma" size="131072" /> |
| | 178 | </Disk> |
| | 179 | </DiskInfo> |
| | 180 | }}} |
| | 181 | * format it: |
| | 182 | {{{#!bash |
| | 183 | exeManageDisk, DSK1, Format |
| | 184 | }}} |
| | 185 | * Log NMEA GPS GGA 1Hz to it |
| | 186 | {{{#!bash |
| | 187 | setNMEAOutput, Stream1, DSK1 |
| | 188 | setNMEAOutput, Stream1, , GGA |
| | 189 | setNMEAOutput, Stream1, , , sec1 |
| | 190 | }}} |
| | 191 | |
| | 192 | |
| | 193 | == UART Interface |
| | 194 | The 2-wire UART on the GW16171 is routed to COM1 on the Mosaic-G5. |
| | 195 | |
| | 196 | By default COM1 is configured for 115200bd 8N1 no flow control. You can use 'getCOMSettings' and 'setCOMSettings' to configure this. |
| | 197 | |
| | 198 | With a GW16171 mounted on a GW8201 with a GW16FE0 in FSA2 this is /dev/ttymxc2: |
| | 199 | {{{ |
| | 200 | #bash |
| | 201 | screen /dev/ttymxc2 115200,cs8 # UART3 (FSA#2) |
| | 202 | picocom /dev/ttymxc2 -b 115200 --omap lfcr #picocom option |
| | 203 | }}} |
| | 204 | |
| | 205 | Example output: |
| | 206 | {{{ |
| | 207 | $GPGGA,224309.00,,,,,0,00,,,M,,M,,*46 |
| | 208 | $GPGGA,224310.00,,,,,0,00,,,M,,M,,*4E |
| | 209 | $GPGGA,224311.00,,,,,0,00,,,M,,M,,*4F |
| | 210 | $GPGGA,224312.00,,,,,0,00,,,M,,M,,*4C |
| | 211 | $GPGGA,224313.00,,,,,0,00,,,M,,M,,*4D |
| | 212 | }}} |
| | 213 | |
| | 214 | |
| | 215 | |
| | 216 | == LEDs |
| | 217 | The following LED's are available on the GW16171: |
| | 218 | - Power |
| | 219 | - GPLED: configurable |
| | 220 | - GPLED2: confiugrable |
| | 221 | - LOGLED: off when SD card not present, on when SD card present and mounted, short blinks when logging |
| | 222 | |
| | 223 | The GPLED and GPLED2 can be configured for varios modes |
| | 224 | |
| | 225 | Receiver commands: |
| | 226 | {{{#!bash |
| | 227 | getLEDMode # show LED mode for GPLED and GPLED2 |
| | 228 | setLEDMode,$GPLED,$GPLED2 # DIFFCORLED, PVTLED, TRACKLED, LOGLED, RTKLED: |
| | 229 | }}} |
| | 230 | |
| | 231 | == PPS Output |
| | 232 | The PPS output on M.2 pin 34 is highly configurable. The default configuration is to output 1Hz Low2High synchronized with GPS |
| | 233 | |
| | 234 | When the GW16171 is used on a GW8201 with a GW16FE0 in FSA2 pin 34 is UART_RTS which maps to MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09. |
| | 235 | |
| | 236 | You can connect this to a pps source via the following dt fragment: |
| | 237 | {{{#!bash |
| | 238 | / { |
| | 239 | pps { |
| | 240 | compatible = "pps-gpio"; |
| | 241 | pinctrl-names = "default"; |
| | 242 | pinctrl-0 = <&pinctrl_pps>; |
| | 243 | gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>; |
| | 244 | }; |
| | 245 | }; |
| | 246 | |
| | 247 | &iomuxc { |
| | 248 | pinctrl_pps: ppsgrp { |
| | 249 | fsl,pins = < |
| | 250 | MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x140 |
| | 251 | >; |
| | 252 | }; |
| | 253 | }; |
| | 254 | }}} |
| | 255 | |
| | 256 | Changing the current pps in the GW82xx to this would look like this (although note you can have multiple pps sources): |
| | 257 | {{{#!bash |
| | 258 | diff --git a/arch/arm64/boot/dts/freescale/imx8mp-venice-gw82xx.dtsi b/arch/arm64/boot/dts/freescale/imx8mp |
| | 259 | -venice-gw82xx.dtsi |
| | 260 | index 2b86cc62a41a..137d78c3eb4a 100644 |
| | 261 | --- a/arch/arm64/boot/dts/freescale/imx8mp-venice-gw82xx.dtsi |
| | 262 | +++ b/arch/arm64/boot/dts/freescale/imx8mp-venice-gw82xx.dtsi |
| | 263 | @@ -45,7 +45,7 @@ pps { |
| | 264 | compatible = "pps-gpio"; |
| | 265 | pinctrl-names = "default"; |
| | 266 | pinctrl-0 = <&pinctrl_pps>; |
| | 267 | - gpios = <&gpio4 3 GPIO_ACTIVE_HIGH>; |
| | 268 | + gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>; |
| | 269 | }; |
| | 270 | |
| | 271 | reg_usb2_vbus: regulator-usb2 { |
| | 272 | @@ -414,7 +415,7 @@ MX8MP_IOMUXC_SAI3_RXC__GPIO4_IO29 0x106 /* PERST# */ |
| | 273 | pinctrl_pps: ppsgrp { |
| | 274 | fsl,pins = < |
| | 275 | - MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x146 |
| | 276 | + MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x146 |
| | 277 | >; |
| | 278 | }; |
| | 279 | }}} |
| | 280 | |
| | 281 | To configure PPS via the receiver: |
| | 282 | {{{#!bash |
| | 283 | getPPSParameters # default is sec1, Low2High, 0.00, GPS, 60, 5.000000 |
| | 284 | setPPSParameters,sec1,,,UTC # sync with UTC 1Hz |
| | 285 | }}} |
| | 286 | |
| | 287 | == EventA Input |
| | 288 | The EVENTA input signal on the Moasic-G5 routed to M2 pin 36 on the GW16171 and can be configured to trigger various things |
| | 289 | |
| | 290 | When the GW16171 is used on a GW8201 with a GW16FE0 in FSA2 pin 34 is UART_RTS which maps to MX8MP_IOMUXC_ECSPI1_MISO__GPIO5_IO08. |
| | 291 | |
| | 292 | To configure this via the receiver: |
| | 293 | {{{#!bash |
| | 294 | setEventParameters,+EventB,Low2High,0.0 # set polarity/delay for eventb |
| | 295 | setSBFOutput,Stream1,COM1,ExtEvent,OnChange |
| | 296 | }}} |
| | 297 | |
| | 298 | The integrated web admin will display events as they come in as well |
| | 299 | |
| | 300 | == Receiver |
| | 301 | The Mosaic-G5 Receiver is highly capable and configurable. It uses Connection Descriptors to refer to its various interfaces: |
| | 302 | - COM1 - UART |
| | 303 | - USB1 - ttyACM0 |
| | 304 | - USB2 - ttyACM1 |
| | 305 | - DSK1 - microSD |
| | 306 | |
| | 307 | The Mosaic-G5 Firmware Reference Guide (available [https://www.septentrio.com/en/products/gnss-receivers/gnss-receiver-modules/mosaic-g5 here]) details the capabilities. |
| | 308 | |
| | 309 | You can access the receiver commands in various ways: |
| | 310 | * via web admin |
| | 311 | * via USB1/USB2: |
| | 312 | {{{#!bash |
| | 313 | screen /dev/ttyACM0 # USB1 |
| | 314 | screen /dev/ttyACM1 # USB2 |
| | 315 | }}} |
| | 316 | * via COM1: |
| | 317 | {{{#!bash |
| | 318 | screen /dev/ttymxc2 115200,cs8 # GW820x+GW16FE0 FSA2 (UART3) |
| | 319 | }}} |
| | 320 | |
| | 321 | Configuration: |
| | 322 | - There are multiple sets of configs that you can work with |
| | 323 | * Current - current config |
| | 324 | * Boot - boot up config |
| | 325 | * User1 - user defined 1 |
| | 326 | * User2 - user defined 2 |
| | 327 | * RXDefault - factory default, not writable |
| | 328 | - use 'lstConfigFile, $CONFIG' to show the differences between a config and RXDefault |
| | 329 | - use 'exeCopyConfigFile,$SRC,$TARGET' to copy configs |
| | 330 | |
| | 331 | A few examples: |
| | 332 | {{{#!bash |
| | 333 | # show help |
| | 334 | help |
| | 335 | # show COM1 settings |
| | 336 | getCOMSettings |
| | 337 | # configure COM1 baudrate |
| | 338 | setCOMSettings,COM1,baud115200,bits8,No,bit1,none |
| | 339 | # log NMEA GGA 1Hz to com1 |
| | 340 | setNMEAOutput, Stream1,COM1,GGA,sec1 |
| | 341 | # log NMEA GGA 1Hz to log.nma |
| | 342 | setNMEAOutput, Stream1,DSK1,GGA,sec1 |
| | 343 | # configure both LEDs for LOGLED |
| | 344 | setLEDMode, LOGLED, LOGLED |
| | 345 | # show differences from factory default for current config |
| | 346 | lstConfigFlie, Current |
| | 347 | # restore factory defaults |
| | 348 | exeCopyConfigFile,RxDefault,Boot |
| | 349 | }}} |
| | 350 | |
| | 351 | == Web Admin Interface GUI |
| | 352 | |
| | 353 | A web admin interface is available over IP (over USB). Setup the IP and bridge with instructions here: [#RNDISEthernetdevice] |
| | 354 | |
| | 355 | Then, on a host PC that is connected to the same network as the SBC, type in the IP address in the browser (192.168.3.1) and up comes up a GUI web interface shown in the picture below: |
| | 356 | |
| | 357 | [[Image(16160webadmin.jpg,400px)]] |
| | 358 | |
| | 359 | Generally we like to see that the Carrier-to-Noise plot for GPS should show about 2-3 satellites with an L1CA CN0 level around 50 dB-Hz. You can see the CN0 in the web user interface under ‘GNSS’ > ‘Satellites and Signals’. If you want to go deeper, you can log data and analyze the CN0 according to the guidelines here: [https://customersupport.septentrio.com/s/article/SBF-Analyzer-Carrier-to-Noise SBF Analyzer: Carrier to Noise]. |
| | 360 | |
| | 361 | [[Image(16160reception.jpg,400px)]] |
| | 362 | |
| | 363 | Another basic tool we encourage customers to use to investigate signal levels (and especially interference issues) is to monitor the receiver’s automatic gain control (AGC). AGC is shown in the ‘GNSS’ > ‘Spectrum’ > ‘Status’ page. The AGC should fall between 15 to 50 dB, and the closer to 15 dB (or lower) you go, the more power you're introducing to the receiver input. Thus if AGC is low it likely indicates the presence of interference. You can read more on AGC and the effect that interference will have on this output here: [https://customersupport.septentrio.com/s/article/SBF-Analyzer-Front-End-Gain SBF Analyzer - Front End Gain.] |
| | 364 | |
| | 365 | [[Image(16160spectrum.jpg,400px)]] |