在 Pi4 Ubuntu 20.04 上启用 UART 通信

在 Pi4 Ubuntu 20.04 上启用 UART 通信

我在 RPI4 (4GB) 上安装了 Ubuntu 20.04 (32 位)。我在引脚 8、10 上安装了环回线。

我需要使用蓝牙以及通过 Pin 8,10 的基本串行通信与 Roboclaw 电机控制器进行通信。

是否使用脚本在 Ubuntu 上安装了 RASPI-CONFIGhttps://github.com/EmilGus/install_raspi-config但即使安装成功,加载时也会出现不正确的启动配置错误。这让我找到/boot/firmware了目录config.txtcmdline.txt等等。我删除了console=...

$ dmesg | grep tty
[    0.001061] printk: console [tty0] enabled
[    1.919367] fe201000.serial: ttyAMA0 at MMIO 0xfe201000 (irq = 29, base_baud = 0) is a PL011 rev2
[    1.924677] fe215040.serial: ttyS0 at MMIO 0x0 (irq = 31, base_baud = 62500000) is a 16550

看起来我并没有禁用控制台。我该怎么做?

$ ls -l /dev/ttyS[0123]
crw-rw---- 1 root dialout 4, 64 Jun 27 12:32 /dev/ttyS0
$ ls -l /dev/serial
lrwxrwxrwx 1 root root 7 Apr  1 11:23 /dev/serial1 -> ttyAMA0

第二次当我运行时sudo minicom -b 115200 -o -D /dev/ttyS0(使用环回 - 已验证正确安装)

我看不到任何字符。没有验证与串行通信。

尝试更改波特率、奇偶校验、流量控制设置,但没有效果。

/dev/ttyS0还有一个简单的串行测试 python,无论我是否运行,它都无法通过串行发送/接收sudo

更新我得到了一个更新的安装脚本(与上面相同的 github 链接),现在已经成功安装了 RASPI-CONFIG,但是虽然我可以运行它,但 RPi4 上的目录结构与 Ubuntu 20.04 有很大不同,以至于它无法找到它试图更改的配置文件。

$ sudo raspi-config
grep: /boot/cmdline.txt: No such file or directory
sed: can't read /boot/cmdline.txt: No such file or directory
sed: can't read /boot/cmdline.txt: No such file or directory

我推测其他 Raspberry Pi 4 用户也打算使用串行端口,而且一定有办法完成 RASPI-CONFIG 在 Ubuntu 上尝试做的事情。

我发现文件位于/boot/firmware

我应该手动更改哪些内容以便 RASPI-CONFIG 通过脚本进行操作?

答案1

在 Ubuntu 20.04(64 位)下,我在与 rpi4(型号 B)上的 roboclaw 电机通信时遇到了很多麻烦。我能够解决这个问题,尽管我必须禁用蓝牙才能实现这一点。不幸的是,我目前不确定如何在不禁用蓝牙的情况下实现这一点。读者请注意

确认这可与同一串行总线上的 5 个 roboclaw 电机控制器配合使用。

话虽如此,下面是我的做法(请注意,这是 Cliffsnotes of此程序):

  1. 禁用[电子邮件保护]
    sudo systemctl stop [email protected]
    sudo systemctl disable [email protected]
    sudo systemctl mask [email protected]
    
  2. 设置 udev 规则
    • 将以下内容放入新文件中/etc/udev/rules.d/10-local.rules
      KERNEL=="ttyS0", SYMLINK+="serial0" GROUP="tty" MODE="0660"
      KERNEL=="ttyAMA0", SYMLINK+="serial1" GROUP="tty" MODE="0660"
      
    • 重新加载 udev 规则:sudo udevadm control --reload-rules && sudo udevadm trigger
  3. 添加用户到tty组:sudo adduser ubuntu tty
  4. 删除子console=serial0,115200字符串/boot/firmware/cmdline.txt
  5. dtoverlay=disable-bt添加换行符/boot/firmware/config.txt(我将其放在行的正下方cmdline=cmdline.txt
  6. 重新开始
  7. (可选)请随意使用此脚本进行测试:https://github.com/nasa-jpl/osr-rover-code/blob/foxy-devel/scripts/roboclawtest.py

请注意,完成此设置后,您需要使用ttyAMA0(或别名serial1),而不是ttyS0。第一个使用完整的硬件 UART,第二个使用“mini-UART”实现,该实现似乎在 Ubuntu 20.04 下运行得不太好(至少在我的硬件设置中,使用 roboclaw 时是这样。YMMV。)。更多讨论在 GitHub 上

答案2

Bluetooth/hci0我有一个同时使用和 的设置,miniUART/ttyS0并且Ubuntu 20.04 (Ubuntu 5.4.0-1034.37-raspi 5.4.101) 64bit开启了Raspberry Pi 4 Model B Rev 1.1(4G 内存)。以下是我所做的:

  1. 备份原件config.txtcmdline.txt文件

    sudo cp -pr /boot/firmware/cmdline.txt /boot/firmware/cmdline.txt-orig
    sudo cp -pr /boot/firmware/config.txt /boot/firmware/config.txt-orig
    
  2. 编辑/boot/firmware/config.txt注释掉enable_uart=1下面的内容,

    #enable_uart=1
    
    cmdline=cmdline.txt
    
  3. console=serial0,115200从中删除控制台设置/boot/firmware/cmdline.txt

  4. 禁用使用 miniUART 的串行服务

    sudo systemctl stop [email protected]
    sudo systemctl disable [email protected]
    sudo systemctl mask [email protected]
    
  5. 将使用 miniUART 的用户添加ttydialout

    sudo adduser ${USER} tty
    sudo adduser ${USER} dialout
    
  6. 最后,重新启动 Ubuntu 20.04,然后两者hci0/dev/ttyS0可以同时工作了。

有关 UART 的详细文档可参见https://www.raspberrypi.org/documentation/configuration/uart.md

答案3

一个简单的解决方案是使用 USB 转 TTL 适配器将 roboclaw 连接到 pi 上的 USB,而不是 UART GPIO 引脚。这将开箱即用,无需在 pi 上进行配置更改,只需在 roboclaw 驱动程序代码中指定 USB 端口即可。根据我的经验,最好使用基于 SiLabs CP2012 的 USB 转 TTL 适配器(例如由 adafruit 销售或在 amazon 上提供),因为该芯片组在 linux 和其他操作系统上得到广泛支持,当然在 Ubuntu 上不需要自定义驱动程序。

答案4

我也遇到了同样的问题。解决 raspi-config 脚本错误路径的办法可能是使用类似

ln -s /boot/firmware/cmdline.txt /boot/cmdline.txt

但这并不能解决起源问题。很抱歉。

相关内容