工作解决方案:

工作解决方案:

使用 Rasbian 有一个方便的工具rasi-config可以启用/禁用树莓派上的 SPI 和 I2C。但是 Ubuntu 没有这样的工具,也没有直接启用它们的方法(据我所知)。有补丁像这样有些人已经成功了,但似乎不适用于 20.04。我正在尝试启用 SPI 来跟踪本教程。当我运行 Python 脚本时,我总是得到:

Traceback (most recent call last):
  File "testwind.py", line 8, in <module>
    spi.open(0,0)
PermissionError: [Errno 13] Permission denied

是否有针对 Ubuntu Server 20.04 的官方文档来启用 SPI 和 I2C?提前致谢。

答案1

更新,启用 I2C 的分步指南:

上周,我最后的零件到货了,所以我完成了硬件并配置了 Ubuntu 20.04。我正准备开始摆弄 I2C,这时托马斯评论了我原来的答案,链接文章作者亚历山大·吕德林格有了缺失的部分,启动 I2C 就轻而易举了。下面的内容也应该适用于 SPI。

  1. 导航raspi-配置在archive.raspberrypi.org上。选择最新版本。

  2. 将该文件下载到 /tmp 并尝试使用 dpkg 安装。

    wget https://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_*INSERT DATE*_all.deb -P /tmp

    sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb

  3. 这会导致错误,报告缺少依赖项。阅读输出并安装依赖项:

    sudo apt-get install *INSERT DEPENDENCIES*

    alsa-utils这导致依赖项之一的安装失败。要修复,请运行:

    sudo apt-get -fy

  4. 现在安装 raspi-config:

    sudo dpkg -i /tmp/raspi-config_*INSERT DATE*_all.deb

  5. 运行 raspi-config,导航到“接口选项”,启用 I2C。

  6. 安装相关软件包。您至少需要安装一个,但如果这是您选择的语言,i2c-tools我建议您libi2c-dev也安装一个。python3-smbus

  7. 尝试以用户和根用户身份探测总线:

    sudo i2cdetect -y 1(或者0,I2C 总线号取决于硬件)

    如果这给了你一个地址矩阵,则 I2C 已打开并正在工作。

    i2cdetect -y 1(或者0

    如果出现权限错误,请执行下一步。否则,请跳过。

  8. 创建一个 I2C 用户组,将其应用到总线并将您的用户添加到该组:

    sudo groupadd i2c(该组可能已经存在)

    sudo chown :i2c /dev/i2c-1(或者i2c-0

    sudo chmod g+rw /dev/i2c-1

    sudo usermod -aG i2c *INSERT YOUR USERNAME*

    注销并登录。我通过 VS code 的 SSH 扩展连接,需要重新启动。然后重试:

    i2cdetect -y 1

一些评论:

提供的说明留言这个问题是必不可少的,但实际依赖项已经过时了几年。所以我建议您尝试步骤 1 并阅读 dpkg 输出以根据您的 raspi-config 版本定制依赖项。

看来 raspi-config 可能不是必需的,但你可能只需要将标志添加dtparam=i2c_arm=on到 /boot/config.txt(参见官方文档)。我还没有尝试过(目前还没有)。如果您想尝试,sudo nano /boot/config.txt请在新行中添加标志,按 CTRL-X,按 Y 确认,然后从步骤 #6 开始。

原始答案:

过去几天我一直在关注类似的问题。似乎没有官方支持,非官方软件包似乎大部分都已过时。

安装 raspi-config

鉴于 RasPi OS 和 Ubuntu 都是基于 Debian 的,因此它可以轻松工作。我已经为自己制定了以下方法,但可能无法在接下来的几周内进行测试:

  • 我将尝试留言在里面问题你链接了。
  • 请注意,他的回答链接到講述埃米尔·格斯在 Github 上,它指定了许多依赖项。
  • 根据建议nc4pk在此问题,我将从官方 RasPi 仓库中获取最新版本的 raspi-config。
  • 我认为这是文件夹。

权限问题

这就是安装过程,您可能已经搞定了。从错误来看,我猜运行的用户testwind.py需要额外的权限才能访问该界面 - 或者在 Ubuntu 下必须以不同的方式访问该界面。我希望有人能对此发表意见。

语境

我正在计划一个项目来实现大满贯在 8GB RasPi 4 上。我使用两个 Arduino 作为额外的 GPIO 并运行硬件控制循环:即PID控制脉宽调制, 以便每分钟转数即使地形不同,也大致恒定。使用 I2C 并以 RasPi 作为主机;尚未研究 SPI。

鉴于 SLAM 算法具有更多的内存密集型(但计算量较少)实现,我选择了新的 8GB RasPi 4。每个进程的内存限制为 3GB可能会妨碍我,因此我将运行 Ubuntu 20.04 LTS 64 位服务器。

如果无法正常工作,我将在 Raspberry Pi OS 下测试 I2C。一旦我有了可用的测试脚本,我就会回到 Ubuntu。

答案2

根据我在 RPI4 上使用 Ubuntu 20.04 服务器的经验,默认情况下 I2C 和 SPI 均已启用。检查文件/boot/固件/syscfg.txt看看是否有以下几行:

dtparam=i2c_arm=on
dtparam=spi=on

如果没有,也许你可以将它们附加到/boot/firmware/usercfg.txt然后重启,希望一切顺利。如果这不起作用,也许可以这样做,sudo apt update && sudo full-upgrade -y看看是否需要任何发行版更新。

答案3

据我所知法伊亚兹·海德尔已经声明 SPI 和 I2C 在 RPi 4 上的 Ubuntu Server 20.04 上都已处于活动状态。你的问题似乎更多地与权限问题比禁用的 SPI。

关于SPI和权限,检查spidevs的权限:

 ls -la /dev/spidev*

如果您看到此类权限:

crw-------

然后,您必须相应地更改他们的权限,使它们成为您希望能够访问 SPI 的用户的读写权限。您可以按照以下方式进行操作:

sudo groupadd spiuser
sudo usermod -aG spiuser <yourusername>
sudo chown :spiuser <put the spi device name here>
sudo chmod g+rw <put the spi device name here>

您必须为每个 spi 设备重复最后两行,您可以使用上面的 ls 命令获取列出它们的 spi 设备名称。这应该能够解决您的权限问题。

答案4

工作解决方案:

当我尝试将 BMX160(地址 0x68)传感器与运行 Ubuntu 22.04 的 Raspberry Pi 4 连接时,我遇到了同样的问题。我在 Google 上搜索了几分钟,尝试了各种其他命令,然后我找到了完美的解决方案bus.SMBus(1): PermissionError: [Errno 13] Permission denied problem。以下是对我有用的解决方案,分步说明:

  1. 确保您已python3-smbus已安装。如果没有,请运行命令进行安装sudo apt install python3-smbus
  2. 运行命令,sudo i2cdetect -y 1 (or 0, maybe) 这应该显示一个矩阵,其中地址(对我来说是 0x68)位于相应的行和列下。
  3. 运行命令,sudo groupadd i2c(i2c 组可能已经存在,没关系)
  4. 运行命令,sudo chown :i2c /dev/i2c-1 (or /dev/i2c-0)
  5. 运行命令,sudo chmod g+rw /dev/i2c-1 (or /dev/i2c-0)
  6. 运行命令,sdo usermod -aG <insert_your_username>
  7. 现在关闭终端并退出系统并重新登录
  8. 现在,当您最终运行时i2cdetect -y 1 (or 0),您将能够在没有任何 root 访问权限的情况下看到矩阵,这表明现在您将能够使用当前用户本身访问您的 i2c 设备!

这是我在 StackExchange 上的第一个答案!希望它能真正帮助您找到正确的解决方案。

谢谢你!!

相关内容