在 Pi4 Ubuntu 20.04 上启用 UART 通信

Ben*_*Fun 4 command-line serial-port raspberrypi 20.04

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

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

是否使用https://github.com/EmilGus/install_raspi-config上的脚本在 Ubuntu 上安装了 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
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

更新我得到了更新的安装脚本(上面相同的 github 链接),现在已经成功安装了 RASPI-CONFIG,但是虽然我可以运行它,但 RPi4 w/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
Run Code Online (Sandbox Code Playgroud)

我认为其他 Raspberry Pi 4 用户也打算使用串行端口,并且必须有一种方法来实现 RASPI-CONFIG 试图在 Ubuntu 上执行的操作。

我找到了这些文件/boot/firmware

我应该手动更改 RASPI-CONFIG 通过脚本执行的哪些操作?

小智 5

我在 Ubuntu 20.04(64 位)下与 rpi4(B 型)上的 roboclaw 电机交谈时遇到了很多麻烦。我能够解决这个问题,尽管我必须禁用蓝牙才能到达那里。不幸的是,我目前不确定如何在不禁用蓝牙的情况下到达那里。读者当心

已确认这适用于同一串行总线上的 5 个 roboclaw 电机控制器。

也就是说,我是这样做的(请注意,这是此过程的悬崖注释):

  1. 禁用serial-getty@ttyS0.service
    sudo systemctl stop serial-getty@ttyS0.service
    sudo systemctl disable serial-getty@ttyS0.service
    sudo systemctl mask serial-getty@ttyS0.service
    
    Run Code Online (Sandbox Code Playgroud)
  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"
      
      Run Code Online (Sandbox Code Playgroud)
    • 重新加载 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,第二个使用“迷你 UART”实现,该实现似乎在 Ubuntu 20.04 下运行得不太好(至少在我的硬件设置中使用 roboclaw。YMMV)。GitHub 上有更多讨论。