树莓派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
相关产品推荐
相关产品推荐

