Welcome to Firefly
Switch language
Firefly Docsss
Last Updated: 2026-07-09 15:26:39

GPIO

The BM1684 chip contains 3 groups of GPIO controllers, each of which controls 32 GPIOs, which correspond to the Linux device nodes as follows:

GPIO ControllerLinux Device NodeGPIO Physical NumberGPIO Logical Number
#0/sys/class/gpio/gpiochip4800 to 31480 to 511
#1/sys/class/gpio/gpiochip44832 to 63448 to 479
#2/sys/class/gpio/gpiochip41664 to 95416 to 447

For example, to operate GPIO6, you need:

  1. Number conversion: The physical number is 6, the corresponding logical number is (480 + (6 - 0)) = 486, 0 represents the start of the GPIO physical number
  2. Export the GPIO, run as root user:
    echo 486 >/sys/class/gpio/export
  3. Operate GPIO, set to read input or output specified value:
    cd /sys/class/gpio/gpio486
    # set input mode
    echo in >direction
    cat value
    
    # set output mode
    echo out >direction
    # output low level
    echo 0 >value
    # output high level
    echo 1 >value

There are a few things to note:

  • If the GPIO has been applied by other drivers, it cannot be exported successfully, and subsequent read and write operations cannot be performed.
  • Involving the multiplexing of IO functions, if the function of the pin is already GPIO, the above method can be used; otherwise, the pinctrl state must be specified in the device tree.

Generally speaking, if you want to easily operate a GPIO in the user layer, you can add it as a GPIO-LED in the device tree. Please refer to linux-linaro-stable/arch/arm64/boot/dts/bitmain/bm1684_firefly.dtsi for details.

On this page