You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派4 GPIO引脚32-53无法设置模式/写入:权限问题求解

树莓派4 GPIO 28-53引脚权限问题排查与解决

问题场景

我正在使用树莓派4的GPIO 2-27引脚,能够自由将这些引脚设置为输入或输出,相关代码如下:

print("Setting pins 2-8 as INPUTS with PUD_UP")
for pin in range(2, 9):
    try:
        self.pi.set_mode(pin, pigpio.INPUT)
        self.pi.set_pull_up_down(pin, pigpio.PUD_UP)
        self.pi.write(pin, pigpio.LOW)
        print(f"pin #{pin} set!")
    except pigpio.error as e:
        print(f"Error setting pin #{pin}: {e}")

print("Setting pins 9-27 as INPUTS with PUD_DOWN")
for pin in range(9, 28):
    try:
        self.pi.set_mode(pin, pigpio.INPUT)
        self.pi.set_pull_up_down(pin, pigpio.PUD_DOWN)
        self.pi.write(pin, pigpio.LOW)
        print(f"pin #{pin} set!")
    except pigpio.error as e:
        print(f"Error setting pin #{pin}: {e}")

我能读取28-53号引脚,读取代码如下:

def read_gpio_banks(self):
    bank1 = self.pi.read_bank_1()
    bank2 = self.pi.read_bank_2()

    print("GPIO Bank 1 (0-31):")
    for pin in range(0, 32):
        level = (bank1 >> pin) & 1
        print(f"GPIO {pin}: Level={level}")

    print("\nGPIO Bank 2 (32-53):")
    for pin in range(32, 54):
        level = (bank2 >> (pin - 32)) & 1
        print(f"GPIO {pin}: Level={level}")

但尝试设置32-53号引脚的模式或写入数据时:

print("Setting pins 28-53 as INPUTS with no pull-up or pull-down")
for pin in range(28, 54):
    try:
        self.pi.set_mode(pin, pigpio.INPUT)
        self.pi.set_pull_up_down(pin, pigpio.PUD_OFF)
        self.pi.write(pin, pigpio.LOW)
        print(f"pin #{pin} set!")
    except pigpio.error as e:
        print(f"Error setting pin #{pin}: {e}")

出现权限错误:

Error setting pin #28: 'no permission to update GPIO'
Error setting pin #29: 'no permission to update GPIO'
Error setting pin #30: 'no permission to update GPIO'
Error setting pin #31: 'no permission to update GPIO'
Error setting pin #32: 'no permission to update GPIO'
Error setting pin #33: 'no permission to update GPIO'
Error setting pin #34: 'no permission to update GPIO'
Error setting pin #35: 'no permission to update GPIO'
Error setting pin #36: 'no permission to update GPIO'
Error setting pin #37: 'no permission to update GPIO'
Error setting pin #38: 'no permission to update GPIO'
Error setting pin #39: 'no permission to update GPIO'
Error setting pin #40: 'no permission to update GPIO'
Error setting pin #41: 'no permission to update GPIO'
Error setting pin #42: 'no permission to update GPIO'
Error setting pin #43: 'no permission to update GPIO'
Error setting pin #44: 'no permission to update GPIO'
Error setting pin #45: 'no permission to update GPIO'
Error setting pin #46: 'no permission to update GPIO'
Error setting pin #47: 'no permission to update GPIO'
Error setting pin #48: 'no permission to update GPIO'
Error setting pin #49: 'no permission to update GPIO'
Error setting pin #50: 'no permission to update GPIO'
Error setting pin #51: 'no permission to update GPIO'
Error setting pin #52: 'no permission to update GPIO'
Error setting pin #53: 'no permission to update GPIO'

解决方法

1. 以root权限运行pigpio守护进程

树莓派的高编号GPIO(28及以上)默认受系统权限限制,普通用户权限的pigpio无法修改这些引脚的配置。需要重启pigpio守护进程并赋予root权限:

sudo systemctl stop pigpiod
sudo systemctl start pigpiod

如果是手动启动pigpio服务,直接执行:

sudo pigpiod

2. 确认用户组权限

确保当前用户属于gpio用户组,否则即使pigpio以root运行,用户程序也可能无法正常交互:

  • 查看当前用户所属组:
    groups
    
  • 如果输出中没有gpio,添加用户到该组:
    sudo usermod -aG gpio $USER
    
  • 注销当前用户并重新登录,使权限变更生效

3. 检查引脚是否被系统占用

树莓派4的28-53号引脚中,部分引脚被分配给SD卡控制器、PCIe接口等系统硬件使用,这类引脚无法被用户空间程序修改模式。可以通过以下命令查看引脚的占用状态:

cat /sys/kernel/debug/gpio

如果输出中某引脚标注为used,说明该引脚已被系统占用,无法进行用户配置。


内容的提问来源于stack exchange,提问作者Vanillaice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 21:22:33