Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Help with Serial GPS Configuration

    Scheduled Pinned Locked Moved Hardware
    9 Posts 3 Posters 1.8k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • E
      Ehryk
      last edited by

      I'm running pfSense 2.4.0-RELEASE and I am experiencing an odd issue with Serial GPS. Motherboard is a SuperMicro X8STi-F.

      I have connected a uBlox NEO-M8N through TTL <-> RS232 converters to an internal serial COM header, with a PPS signal on the DCD line, and configured it with a baud of 9600.

      • When I connect it to a Windows machine and open the port with PuTTY, I get the expected serial output (at least over the RX/TX lines)
      $GNZDA,110020.00,05,12,2017,00,00*78
      $PUBX,00,110020.00,4511.69187,N,09307.15935,W,276.630,G3,9.1,8.6,0.355,53.36,0.106,,2.27,2.28,2.44,8,0,0*44
      $GNRMC,110021.00,A,4511.69178,N,09307.15935,W,0.524,,051217,,,A,V*00
      $GNVTG,,T,,M,0.524,N,0.970,K,A*30
      $GNGGA,110021.00,4511.69178,N,09307.15935,W,1,08,2.27,307.7,M,-31.1,M,,*77
      $GNGSA,A,3,12,02,24,25,,,,,,,,,3.22,2.27,2.28,1*0D
      $GNGSA,A,3,78,81,88,79,,,,,,,,,3.22,2.27,2.28,2*06
      $GPGSV,4,1,14,02,70,255,26,03,00,030,,05,17,185,15,06,70,047,17,0*69
      $GPGSV,4,2,14,09,05,089,,12,59,287,35,17,25,099,,19,44,091,12,0*6D
      $GPGSV,4,3,14,23,06,058,21,24,10,241,14,25,25,315,35,29,02,289,,0*60
      $GPGSV,4,4,14,48,25,230,,51,36,200,,0*69
      $GLGSV,3,1,11,65,35,115,13,66,02,163,,71,04,013,,72,33,054,,0*7B
      $GLGSV,3,2,11,77,03,194,,78,35,232,31,79,41,290,29,80,06,344,22,0*79
      $GLGSV,3,3,11,81,34,289,27,87,30,068,,88,63,006,20,0*42
      $GNGLL,4511.69178,N,09307.15935,W,110021.00,A,A*60
      $GNZDA,110021.00,05,12,2017,00,00*79
      $PUBX,00,110021.00,4511.69178,N,09307.15935,W,276.623,G3,9.3,8.7,0.970,53.36,0.120,,2.27,2.28,2.44,8,0,0*4D
      $PUBX,04,110021.00,051217,212420.99,1978,18,716692,196.598,21*17
      $GNRMC,110022.00,A,4511.69166,N,09307.15928,W,0.715,,051217,,,A,V*00
      $GNVTG,,T,,M,0.715,N,1.324,K,A*3A
      
      
      • When I open the uBlox uCenter application on windows, connected on an internal COM header, it works properly (at least the RX/TX lines)

      • When I use a tool to display the DCD line in Windows, it works as expected (1s signal, 10% duty cycle)

      • When I look at the signal levels over an oscilloscope they look right (0v - 5v on the uBlox side, +10v to -10v on the RS232 side)

      • When I configure the Serial GPS output to be through a USB to TTL converter (becomes /dev/ttyU0) straight to the uBlox, ntpd recognizes the signal and starts using it, but I get a large number of 'badformat' messages:

      [2.4.0-RELEASE][admin@pfSense.lan]/root: ntpq -c cv
      associd=0 status=00f2 15 events, clk_bad_format,
      device="NMEA GPS Clock",
      timecode="$GNRMC,112428.00,A,4511.68928,N,09307.15503,W,0.344,,051217,,,A,V*0A",
      poll=3, noreply=0, badformat=52, baddata=0, fudgetime2=400.000,
      stratum=0, refid=GPS, flags=7
      
      

      I can then see the output via `cat /dev/cuaU0' as it looks in windows.

      • I get the same output with the external serial port, /dev/cuau0, but ntpd won't sync or use it.

      • I can't get any output out of the internal serial port, /dev/cuau1, and ntpd won't sync or use it.

      Any ideas why it would work over a USB to TTL converter, and show output over then external serial port, but not over the internal RS232 header and ntpd will only use it over USB?

      1 Reply Last reply Reply Quote 0
      • R
        robi
        last edited by

        Check this out: https://forum.pfsense.org/index.php?topic=93999.0

        I've ran into this several times. FreeBSD handles serial ports strange in many cases, it looks to me as if it would be some kind of "misunderstanding" between motherboard implementations and FreeBSD approach on how to access the serial ports. For basic things like serial console etc. it should work fine, but more advanced usage often turns out to be a wrong ACPI approach from FreeBSD.

        And avoid using USB-Serial adapters with GPS/PPS. USB introduces serious latency and jitter - making your NTP server imprecise.

        1 Reply Last reply Reply Quote 0
        • E
          Ehryk
          last edited by

          That's likely my very issue, but I'm having some issues following the steps there.

          I tried first disabling ACPI on the three serial ports:

          /boot/loader.conf.local

          debug.acpi.avoid="\_SB_.PCI0.SBRG.UAR1 \_SB_.PCI0.SBRG.UAR2 \_SB_.PCI0.SBRG.UAR3"
          

          However, I still got acpi loading on them:

          
          [2.4.0-RELEASE][root@yourpfsense.local]/root: sysctl -a | grep uart
          dev.uart.0.%desc: 16550 or compatible
          dev.uart.0.%driver: uart
          dev.uart.0.%location: handle=\_SB_.PCI0.SBRG.UAR1
          dev.uart.0.%pnpinfo: _HID=PNP0501 _UID=0
          dev.uart.0.%parent: acpi0
          dev.uart.1.%desc: 16550 or compatible
          dev.uart.1.%driver: uart
          dev.uart.1.%location: handle=\_SB_.PCI0.SBRG.UAR2
          dev.uart.1.%pnpinfo: _HID=PNP0501 _UID=1
          dev.uart.1.%parent: acpi0
          dev.uart.2.%desc: 16550 or compatible
          dev.uart.2.%driver: uart
          dev.uart.2.%location: handle=\_SB_.PCI0.SBRG.UAR3
          dev.uart.2.%pnpinfo: _HID=PNP0501 _UID=2
          dev.uart.2.%parent: acpi0
          
          

          I then tried disabling ACPI entirely through hint.acpi.0.disabled=”1″ in loader.conf.local, and then disabled ACPI in the BIOS.

          Now I am unable to get it booting again, even with the ACPI BIOS settings restored and trying to turn on ACPI in the boot option.

          Is there a way I can edit loader.conf.local without booting pfSense? It either kernel panics or hangs on boot.

          1 Reply Last reply Reply Quote 0
          • R
            robi
            last edited by

            Did you follow correctly the steps described in my link above, especially step2? Are the names 100% correct? Maybe you could post here the outputs of the commands.

            You'd be faster by reinstalling the whole thing from scratch and try again from the beginning.

            1 Reply Last reply Reply Quote 0
            • E
              Ehryk
              last edited by

              AHA!!!

              It turns out that SuperMicro Internal COM ports have a different pinout than the standard - which is why it worked perfect on my windows machine (an ASUS motherboard), but didn't on the SuperMicro. Praise be to the Oscilloscope!

              Standard COM Header Pinout:

              SuperMicro COM Header Pinout:

              Agreed on the full reinstall. I am seeing that ACPI might be best left disabled in a server environment, in this case it's a 1U rackmount server. Would it be better to reinstall with ACPI disabled in the BIOS?

              1 Reply Last reply Reply Quote 0
              • ?
                Guest
                last edited by

                Disabling ACPI is not a good idea since it mostly leaves the firmware in charge instead of the OS. Best is to have the firmware do nothing of the sort, black box software is bad in all cases.

                1 Reply Last reply Reply Quote 0
                • E
                  Ehryk
                  last edited by

                  @johnkeates:

                  Disabling ACPI is not a good idea since it mostly leaves the firmware in charge instead of the OS.

                  Thanks. I was able to get it up and running again by clearing the CMOS and reconfiguring the BIOS. I left APCI enabled.

                  @robi:

                  Did you follow correctly the steps described in my link above, especially step2? Are the names 100% correct? Maybe you could post here the outputs of the commands.

                  I did follow them, the statements are in loader.conf.local and are listed correctly, but I still get acpi drivers. Is it possible that acpi isn't in debug mode to listen to the debug statements?

                  I'll post up the results shortly.

                  1 Reply Last reply Reply Quote 0
                  • E
                    Ehryk
                    last edited by

                    It looks like it did finally take, but this is ~5 restarts after I added it to /boot/loader.conf.local and I was getting acpi as the parent one restart ago. Also, interestingly, the 'fake' serial port from IPMI isn't present (was UAR3 / cuau2).

                    Thanks, mate!

                    
                    Enter an option: 8
                    
                    [2.4.0-RELEASE][admin@pfSense.lan]/root: cat /boot/loader.conf.local
                    # Disable ACPI Entirely
                    #hint.acpi.0.disabled="1"
                    
                    # Disable ACPI for Serial Ports
                    debug.acpi.avoid="\_SB_.PCI0.SBRG.UAR1 \_SB_.PCI0.SBRG.UAR2 \_SB_.PCI0.SBRG.UAR3"
                    [2.4.0-RELEASE][admin@pfSense.lan]/root: dmesg | grep uart
                    uart0: <16550 or compatible> at port 0x3f8 irq 4 flags 0x10 on isa0
                    uart1: <16550 or compatible> at port 0x2f8 irq 3 on isa0
                    [2.4.0-RELEASE][admin@pfSense.lan]/root: sysctl -a | grep uart
                    device  uart_ns8250
                    device  uart
                    kern.console: ttyv0,/uart,ucom,ttyv0,
                    debug.uart_force_poll: 0
                    debug.uart_poll_freq: 50
                    dev.uart.1.pps_mode: 2
                    dev.uart.1.%parent: isa0
                    dev.uart.1.%pnpinfo:
                    dev.uart.1.%location:
                    dev.uart.1.%driver: uart
                    dev.uart.1.%desc: 16550 or compatible
                    dev.uart.0.pps_mode: 2
                    dev.uart.0.%parent: isa0
                    dev.uart.0.%pnpinfo:
                    dev.uart.0.%location:
                    dev.uart.0.%driver: uart
                    dev.uart.0.%desc: 16550 or compatible
                    dev.uart.%parent:
                    
                    
                    1 Reply Last reply Reply Quote 0
                    • R
                      robi
                      last edited by

                      @Ehryk:

                      AHA!!!

                      Yep, ran into that too, it was the next thing I would have recommended to check against, however, this applies only to internal headers, external D-SUB connectors are everywhere the same. If you say you had partial success with USB, then after the ACPI trick you should have noticed success on the rear D-SUB too. And only after that, try the internal header…  8)

                      This is not SuperMicro-specific, this dates from the 1990's, there were always two flavours of interal header pinout: IBM/DTK WIRING SCHEME and EVEREX/ASUS WIRING SCHEME.
                      It's only a question of which manufacturer adopts which standard, nothing more.

                      
                                       SERIAL MOTHERBOARD CABLE 10 PIN DIL TO DB-9
                                              (IBM/DTK WIRING SCHEME)
                                        This is the ribbon cable from the MB serial
                                           connector to the DB-9/DB-25 COM connector
                                        DIL               DB-9            DB-25
                                         1 -------------- 1  DCD __________ 8
                                         6 -------------- 2  RX ___________ 3
                                         2 -------------- 3  TX ___________ 2
                                         7 -------------- 4  DTR __________ 20
                                         3 -------------- 5  GND __________ 7
                                         8 -------------- 6  DSR __________ 6
                                         4 -------------- 7  RTS __________ 4
                                         9 -------------- 8  CTS __________ 5
                                         5 -------------- 9  RI ___________ 22
                                         10 ------------- 10  N/C OR KEY
                      
                                       SERIAL MOTHERBOARD CABLE 10 PIN DIL TO DB-9
                                               (EVEREX/ASUS WIRING SCHEME)
                                        This is the ribbon cable from the MB serial
                                           connector to the DB-9/DB-25 COM connector
                                        DIL               DB-9            DB-25
                                         1 -------------- 1  DCD __________ 8
                                         2 -------------- 2  RX  __________ 3
                                         3 -------------- 3  TX  __________ 2
                                         4 -------------- 4  DTR __________ 20
                                         5 -------------- 5  GND __________ 7
                                         6 -------------- 6  DSR __________ 6
                                         7 -------------- 7  RTS __________ 4
                                         8 -------------- 8  CTS __________ 5
                                         9 -------------- 9  RI  __________ 22
                                         10 ------------- 10  N/C OR KEY
                      
                      

                      1 Reply Last reply Reply Quote 0
                      • First post
                        Last post
                      Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.