1

I am using Raspberry Pi 4 (OS:bullseye, version 11) and Neo 6 GPS. I have tried to follow the tutorial https://www.instructables.com/Interfacing-GPS-Module-With-Raspberry-Pi/ but I am stuck at step 8. The command 'sudo cat /dev/ttyAMA0' hangs no matter what I do. I strongly suspect that it has something to do with Raspberry Pi 4. Few things I noticed/followed -

  1. The blue light on the antenna is blinking.
  2. Followed other similar threads such as How can Rpi connect a GPS module? but it did not help. Has anybody figured out how to make Neo 6 GPS work with Raspberry Pi4?

[Moved content from comments to the main body of the question] #1: Connected Vcc of GPS module to Power Supply (5V) of Raspberry Pi Connected Tx (Transmitter Pin) of GPS module to Pin No.10 of Raspberry Pi. Connected GND (Ground Pin) of GPS module to GND of Raspberry Pi

#2: Modified /boot/config.txt as following. Added the code at the end dtparam=spi=on dtoverlay=disable-bt (#note for Pi 4, only 'disable-bt' works, 'pi3-disable-bt' gives warning at the bootup time) core_freq=250 enable_uart=1 force_turbo=1

#3: Edited /boot/cmdline.txt and replaced its content with the following dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet splash plymouth.ignore-serial-consoles

#4: Disable the Raspberry Pi Serial Getty Service a. If in your output, Serial0 is linked with ttyAMA0, then to disable it use the below command, sudo systemctl stop [email protected] sudo systemctl disable [email protected] b. If in your output Serial0 is linked with ttys0, then to disable it use the below command, sudo systemctl stop [email protected] sudo systemctl disable [email protected] I followed a) here.

#5: Activate ttys0 To enable the ttys0 use following command, sudo systemctl enable [email protected] #6: sudo apt-get install minicom sudo pip install pynmea2

#6: sudo apt-get install minicom sudo pip install pynmea2

Now, when I issue the command - sudo cat /dev/ttyAMA0, the command just hangs. I see the blue light blinking on the antenna. Also, note that I had used old version of Raspberry pi (2011-12) and it gave correct output when I typed 'sudo cat /dev/ttyAMA0'. The reason I am using raspberry pi 4 is I want it to be powered by batteries and the case of the batteries is compatible with pi 4. That way, I can use it in outdoor settings. Second, version 2011-12 is so old that I thought it is better to move on to latest robust version.

Raspberry Pi 4 has OS bullseye. I am aware that with newer versions, there is a GUI to configure the settings instead of manipulating config or boot files but I don't think it should matter. I do not know what I am missing or how to diagnose the problem. Is there a difference between Pi4 and earlier versions as far as ttyAMA0 goes?

Thanks, ssn

5
  • I don't know WHAT YOU DID - include in your Question; don't expect users to read a tutorial & guess. Anyone seems to be able to post an "instructables" whether they know what they are doing or not. As dev/ttyAMA0 is connected to Bluetooth it is unlikely to work.
    – Milliways
    Sep 15, 2023 at 3:33
  • Post a photo of the wiring between gps and Pi.
    – CoderMike
    Sep 15, 2023 at 7:57
  • @SSN this site if not a forum ... it is a question and answer site ... all information belongs in the question ... please delete all of your comments and edit your question instead ... right now your question still does not contain much information
    – jsotola
    Sep 20, 2023 at 1:16
  • Please clarify your specific problem or provide additional details to highlight exactly what you need. As it's currently written, it's hard to tell exactly what you're asking.
    – Community Bot
    Sep 20, 2023 at 1:17
  • Why would anyone want to nobble Bluetooth and swap UARTs to use a slow device with limited bandwidth requirements (especially using outdated instructions) when you could just use the default /dev/serial0 ?
    – Milliways
    Sep 22, 2023 at 4:52

1 Answer 1

0

NEW:

Yesterday late, I have a thought; "What is core_freq=250?". I searched on raspberry pi what is the frequency of core_freq=250 enable_uart=1 force_turbo=1. And found https://forums.raspberrypi.com/viewtopic.php?t=213499 which states "The Linux console can be re-enabled by adding enable_uart=1 to config.txt. This also fixes the core_freq to 250Mhz (unless force_turbo is set, when it will fixed to 400Mhz), which means that the UART baud rate stays consistent", by PhilE Raspberry Pi Engineer & Forum Moderator. So, my OLD answer of 2.5Mhz will not help you as your device is rumming at 400Mhz and the RPI 4B uarts can NOT be set at 400Mhz (stty -F /dev/ttyAMA1 400000000), only the mini UART (UART1) can do that (see https://github.com/raspberrypi/documentation/blob/develop/documentation/asciidoc/computers/configuration/uart.adoc). If you make it work, post your steps and mark it answered.

OLD:

I do not have a Neo 6 GPS, but on the RP 4B there are more UARTs to use instead of 0 and 1. I will provide a short example of how to use UART3 on the RP 4B which you may use to adapt to the GPS device.

#!/usr/bin/env python3

"""
EXAMPLE of UART communication on Raspberry Pi 4B using Python.

Multiple UARTs on Raspberry Pi 4B (CM4):
          TXD RXD CTS RTS     Board Pins
  uart0   14  15              8   10
  uart1   14  15              8   10
  uart2   0   1   2   3       27  28  (I2C0)
  uart3   4   5   6   7       7   29  (GPCLK0), (RTS 7 = SPI0-CE1)
  uart4   8   9   10  11      24  21  (SPI0)
  uart5   12  13  14  15      32  33  (gpio-fan)

Raspberry Pi 4B (CM4) setup:
  /boot/config.txt has dtoverlay=uart3, sudo reboot
  jumper from GPIO pin 4 to GPIO pin 5
  
https://www.electronicwings.com/raspberry-pi/raspberry-pi-uart-communication-using-python-and-c
https://pinout.xyz/pinout/uart
https://raspberrypi.stackexchange.com/questions/45570/how-do-i-make-serial-work-on-the-raspberry-pi3-pizerow-pi4-or-later-models/107780#107780
https://github.com/raspberrypi/documentation/blob/develop/documentation/asciidoc/computers/configuration/uart.adoc
https://pyserial.readthedocs.io/en/latest/pyserial_api.html
"""

import serial
from time import sleep

ser = serial.Serial('/dev/ttyAMA1', 2500000, 8, 'N', 1)   # Open port
print(ser.get_settings)
x = 6
while x:
    ser.write(b'Hello out there!')          # Write byarray
    received_data = ser.read()              # Read serial port
    sleep(0.03)
    data_left = ser.inWaiting()             # Check for remaining byte
    received_data += ser.read(data_left)
    print(received_data.decode('utf-8'))   # Print received data
    x -= 1
1
  • Thank you, I will try the approach and report back.
    – SSN
    Sep 21, 2023 at 16:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.