User Tools

Site Tools


Sidebar

Go Back

Refresh

You are not allowed to add pages

Direct Link

library:rk3568:gpio

GPIO @ Core-3568J

Reference

1. LEDS

No Name GPIO pin out
1 WORK_LED/LED1 GPIO0_C0 16
2 USER_LED/LED2 GPIO0_C4 20
3 FANS GPIO1_A4 36
4 BACKLIGHT GPIO0_C3 19

* number = group * 8 + X = 3 * 8 + 5 = 29
* pin = bank*32 + number= 4 * 32 + 29 = 157

1.1 用户状态使用LED

LED1 @ pin 16 :
echo 16 > /sys/class/gpio/export            # 申请 GPIO
cat /sys/class/gpio/gpio16/direction        # 查看默认引脚方向
echo out > /sys/class/gpio/gpio16/direction # 配置成输出方向
echo 1 > /sys/class/gpio/gpio16/value       # 输出高电平为点亮LED
echo 0 > /sys/class/gpio/gpio16/value       # 输出低电平为熄灭 LED
LED2 @ pin 20 :
echo 20 > /sys/class/gpio/export            # 申请 GPIO
cat /sys/class/gpio/gpio20/direction        # 查看默认引脚方向
echo out > /sys/class/gpio/gpio20/direction # 配置成输出方向
echo 1 > /sys/class/gpio/gpio20/value       # 输出高电平为熄灭LED
echo 0 > /sys/class/gpio/gpio20/value       # 输出低电平为点亮 LED

1.2 设备树使用 GPIO

-

2. KEYS

Key GPIO PIN in out
1 GPIO3_C3 115
2 GPIO3_C4 116
3 GPIO4_D2 154
4 GPIO3_C2 114
5 GPIO3_B5 109

* number = group * 8 + X = 3 * 8 + 5 = 29
* pin = bank*32 + number= 4 * 32 + 29 = 157

2.1 用户状态使用KEYS

2.1.1 直接查询按键状态

echo 115 > /sys/class/gpio/export
echo 116 > /sys/class/gpio/export
echo 154 > /sys/class/gpio/export
echo 114 > /sys/class/gpio/export
echo 109 > /sys/class/gpio/export
  
echo in > /sys/class/gpio/gpio109/direction
echo in > /sys/class/gpio/gpio114/direction
echo in > /sys/class/gpio/gpio115/direction
echo in > /sys/class/gpio/gpio116/direction
echo in > /sys/class/gpio/gpio154/direction
  
cat /sys/class/gpio/gpio109/value            # 读KEY状态, 0 按下 1 释放
cat /sys/class/gpio/gpio114/value
cat /sys/class/gpio/gpio115/value
cat /sys/class/gpio/gpio116/value
cat /sys/class/gpio/gpio154/value

2.1.2 中断方式接收按键状态

2.1.2.1 初始化

#!/bin/bash
pins=(115 116 154 114 109)

for pin in ${pins[@]}; do
    echo ${pin} > /sys/class/gpio/export
    echo in > /sys/class/gpio/gpio${pin}/direction
    echo falling > /sys/class/gpio/gpio${pin}/edge
done

# Pullup
# GPIO3_C2 GPIO3_C3 GPIO3_C4
io -4 -w 0xfdc600a8 0x03F00150
# GPIO3_D2
io -4 -w 0xfdc600bc 0x00300010
# GPIO3_B5
io -4 -w 0xfdc600a4 0x0c000400

2.1.2.2 中断检测



3. io指令直接读写寄存器

3.1 io指令

io -v -1|2|4 -r|w [-l <len>] [-f <file>] <addr> [<value>]

    -v         Verbose, asks for confirmation
    -1|2|4     Sets memory access size in bytes (default byte)
    -l <len>   Length in bytes of area to access (defaults to
               one access, or whole file length)
    -r|w       Read from or Write to memory (default read)
    -f <file>  File to write on memory read, or
               to read on memory write
    <addr>     The memory address to access
    <val>      The value to write (implies -w)

Examples:
    io 0x1000                  Reads one byte from 0x1000
    io 0x1000 0x12             Writes 0x12 to location 0x1000
    io -2 -l 8 0x1000          Reads 8 words from 0x1000
    io -r -f dmp -l 100 200    Reads 100 bytes from addr 200 to file
    io -w -f img 0x10000       Writes the whole of file to memory

Note access size (-1|2|4) does not apply to file based accesses.

3.2 基本指令

# Read 4 bytes (32bits)
io -4 -r 0xfdcb0010
# Write 4 bytes (32bits)
io -4 -w 0xfdcb0010 0xffff0055

3.3 寄存器地址

RK3568的寄存器可以通过芯片的TRM手册进行查询。

寄存器的地址是由 Operational Base + offset组成

寄存器的基地址在TRM的Address Mapping章节中描述(《RKRK3568 TRM-Part1》 p.11)

Module Start Address Size Module Start Address Size
PCIe3x2_S 0xF0000000 32MB Reserved 0xFE290000 64KB
PCIe3x1_S 0xF2000000 32MB GMAC0 0xFE2A0000 64KB
PCIe2x1_S 0xF4000000 32MB SDMMC0 0xFE2B0000 64KB
PCIe3x2_DBI 0xF6000000 4MB SDMMC1 0xFE2C0000 64KB
PCIe3x1_DBI 0xF6400000 4MB Reserved 0xFE2D0000 192KB
PCIe2x1_DBI 0xF6800000 4MB FSPI 0xFE300000 64KB
Reserved 0xF6C000008 4MB EMMC 0xFE310000 64KB
SATA0 0xFC000000 4MB Reserved 0xFE320000 64KB
SATA1 0xFC400000 4MB NANDC 0xFE330000 64KB
SATAx2 0xFC800000 4MB Reserved 0xFE340000 128KB
USB3_0 0xFCC00000 4MB KEYLADDER_S 0xFE360000 64KB
USB3_1 0xFD000000 4MB TRNG_S 0xFE370000 64KB
GIC600 0xFD400000 4MB CRYPTO_NS 0xFE380000 32KB
USB20HOST0 0xFD800000 512KB TRNG_NS 0xFE388000 16KB
USB20HOST1 0xFD880000 512KB OTP_NS 0xFE38C000 16KB
DAPLITE 0xFD900000 512KB Reserved 0xFE390000 64KB
Rreserved 0xFD980000 512KB OTP_S 0xFE3A0000 32KB
QSGMII_PCS 0xFDA00000 2MB DCF_S 0xFE3A8000 32KB
PMU_SGRF 0xFDC00000 64KB Reserved 0xFE3B0000 32KB
Reserved 0xFDC10000 64KB KEY_READER 0xFE3B8000 32KB
PMU_GRF 0xFDC20000 64KB WDT_S 0xFE3C0000 64KB
CPU_GRF 0xFDC30000 64KB SEC_TRNG_CHK 0xFE3D0000 64KB
DDR_GRF 0xFDC40000 64KB JBG_USR 0xFE3E0000 64KB
PIPE_GRF 0xFDC50000 64KB JBG_OTP 0xFE3F0000 64KB
SYS_GRF 0xFDC60000 64KB I2S0_8CH 0xFE400000 64KB
PIPE_PHY_GRF0 0xFDC70000 64KB I2S1_8CH 0xFE410000 64KB
PIPE_PHY_GRF1 0xFDC80000 64KB I2S2_2CH 0xFE420000 64KB
PIPE_PHY_GRF2 0xFDC90000 64KB I2S3_2CH 0xFE430000 64KB
USBPHY_U3_GRF 0xFDCA0000 32KB PDM 0xFE440000 64KB
USBPHY_U2_GRF 0xFDCA8000 32KB VAD 0xFE450000 64KB
EDP_PHY_GRF 0xFDCB0000 32KB SPDIF_8CH 0xFE460000 64KB
PCIE30_PHY_GRF 0xFDCB8000 32KB AUDPWM 0xFE470000 32KB
SYSTEM_SRAM(64K) 0xFDCC0000 64KB DIG_ACODEC 0xFE478000 32KB
PMU_MEM 0xFDCD0000 128KB SDMMC_BUF 0xFE480000 64KB
USB_GRF 0xFDCF0000 64KB Reserved 0xFE490000 448KB
PMU_CRU 0xFDD00000 64KB Reserved 0xFE500000 64KB
CRU_S 0xFDD10000 32KB DMAC0_S 0xFE510000 64KB
SYS_SGRF 0xFDD18000 16KB Reserved 0xFE520000 64KB
Stimer 0xFDD1C000 16KB DMAC0_NS 0xFE530000 64KB
CRU_NS 0xFDD20000 64KB DMAC1_S 0xFE540000 64KB
PMU_CRU_S 0xFDD30000 64KB DMAC1_NS 0xFE550000 64KB
I2C0 0xFDD40000 64KB SCR 0xFE560000 64KB
UART0 0xFDD50000 64KB CAN0 0xFE570000 64KB
GPIO0 0xFDD60000 64KB CAN1 0xFE580000 64KB
PWM0 0xFDD70000 64KB CAN2 0xFE590000 64KB
PVTM_PMU 0xFDD80000 64KB I2C1 0xFE5A0000 64KB
PMU_NS 0xFDD90000 64KB I2C2 0xFE5B0000 64KB
Reserved 0xFDDA0000 128KB I2C3 0xFE5C0000 64KB
DDR_SCRAMB_LE_KEY 0xFDDC0000 32KB I2C4 0xFE5D0000 64KB
OSC_CHK 0xFDDC8000 32KB I2C5 0xFE5E0000 64KB
Reserved 0xFDDD0000 192KB TIMER_NS 0xFE5F0000 64KB
PVTM_CORE 0xFDE00000 64KB WDT_NS 0xFE600000 64KB
Reserved 0xFDE10000 128KB SPI0 0xFE610000 64KB
GIC600 0xFDE30000 0KB SPI1 0xFE620000 64KB
SPINLOCK 0xFDE30000 64KB SPI2 0xFE630000 64KB
NPU 0xFDE40000 128KB SPI3 0xFE640000 64KB
MALIG52 0xFDE60000 128KB UART1 0xFE650000 64KB
PVTM_GPU 0xFDE80000 64KB UART2 0xFE660000 64KB
PVTM_NPU 0xFDE90000 64KB UART3 0xFE670000 64KB
VDPU 0xFDEA0000 64KB UART4 0xFE680000 64KB
RGA 0xFDEB0000 64KB UART5 0xFE690000 64KB
EBC 0xFDEC0000 64KB UART6 0xFE6A0000 64KB
JPEG_DEC 0xFDED0000 64KB UART7 0xFE6B0000 64KB
JPEG_ENC 0xFDEE0000 64KB UART8 0xFE6C0000 64KB
IEP 0xFDEF0000 64KB UART9 0xFE6D0000 64KB
Eink 0xFDF00000 128KB PWM1 0xFE6E0000 64KB
Reserved 0xFDF20000 128KB PWM2 0xFE6F0000 64KB
RKVENC 0xFDF40000 128KB PWM3 0xFE700000 64KB
Reserved 0xFDF60000 128KB TSADC 0xFE710000 64KB
RKVDEC 0xFDF80000 128KB SARADC 0xFE720000 64KB
CSI_RX_CTRL0 0xFDFA0000 64KB Reserved 0xFE730000 64KB
CSI_RX_CTRL1 0xFDFB0000 64KB GPIO1 0xFE740000 64KB
Reserved 0xFDFC0000 64KB GPIO2 0xFE750000 64KB
VICAP0 0xFDFD0000 64KB GPIO3 0xFE760000 64KB
VICAP1 0xFDFE0000 64KB GPIO4 0xFE770000 64KB
ISP 0xFDFF0000 64KB Mailbox 0xFE780000 64KB
SDMMC2 0xFE000000 64KB MCU_INTC 0xFE790000 64KB
GMAC1 0xFE010000 64KB Reserved 0xFE7A0000 384KB
Reserved 0xFE020000 128KB DDR_PHY 0xFE800000 64KB
VOP 0xFE040000 64KB Reserved 0xFE810000 64KB
HDCP_AHB 0xFE050000 64KB PIPE_PHY0 0xFE820000 64KB
DSITX0 0xFE060000 64KB PIPE_PHY1 0xFE830000 64KB
DSITX1 0xFE070000 64KB PIPE_PHY2 0xFE840000 64KB
HDCP_APB 0xFE080000 128KB DSI_TX_PHY0 0xFE850000 64KB
HDMI 0xFE0A0000 128KB DSI_TX_PHY1 0xFE860000 64KB
eDP 0xFE0C0000 64KB CSI_RX_PHY 0xFE870000 64KB
HDCP_KEY 0xFE0D0000 64KB OTP_PHY 0xFE880000 64KB
Reserved 0xFE0E0000 128KB CPU_BOOST 0xFE890000 64KB
Reserved 0xFE100000 1024KB USB2PHY_U3OTG 0xFE8A0000 64KB
FIREWALL_DDR 0xFE200000 64KB USB2PHY_U2HOST 0xFE8B0000 64KB
Reserved 0xFE210000 64KB PCIE30_PHY 0xFE8C0000 128KB
DMA2DDR 0xFE220000 64KB PCIe2x1_S 0x300000000 1024MB
DFIMON 0xFE230000 64KB PCIe3x1_S 0x340000000 1024MB
DFICTRL 0xFE240000 64KB PCIe3x2_S 0x380000000 1024MB
UPCTL2 0xFE250000 64KB PCIe2x1_DBI 0x3C0000000 4MB
PCIe2x1_APB 0xFE260000 64KB PCIe3x1_DBI 0x3C0400000 4MB
PCIe3x1_APB 0xFE270000 64KB PCIe3x2_DBI 0x3C0800000 4MB

3.4 LEDs 的IO配置

LED GPIO Base Address GPIO IOMUX control
1 GPIO0_C0 PMU_GRF:0xFDC20000 PMU_GRF_GPIO0C_IOMUX_L(0x0010)
PMU_GRF_GPIO0C_IOMUX_H(0x0014)
2 GPIO0_C4
# Check pin function
io -4 0xfdc20010
io -4 0xfdc20014

# Set pin function: GPIO
io -4 -w 0xfdc20010 0x00070000
io -4 -w 0xfdc20014 0x00070000

3.5 KEYs 的IO配置

KEY GPIO Base Address GPIO IOMUX control GPIO PU/PD control Open drain
1 GPIO3_C3 SYS_GRF:0xFDC60000 GRF_GPIO3C_IOMUX_L(0x0050)
GRF_GPIO3C_IOMUX_H(0x0054)
GRF_GPIO3C_P(0x00A8) GRF_GPIO3C_OPD(0x0128)
2 GPIO3_C4
4 GPIO3_C2
3 GPIO4_D2 GRF_GPIO4D_IOMUX_L(0x0078) GRF_GPIO4D_P(0x00BC) GRF_GPIO4D_OPD(0x013C)
5 GPIO3_B5 GRF_GPIO3B_IOMUX_H(0x004C) GRF_GPIO3B_P(0x00A4) GRF_GPIO3B_OPD(0x0124)
# Check pin function
io -4 0xfdc60050
io -4 0xfdc60054

io -4 0xfdc60078

io -4 0xfdc6004C
# Set pin function: GPIO
# GPIO3_C2 GPIO3_C3
io -4 -w 0xfdc60050 0x77000000
# GPIO3_C4
io -4 -w 0xfdc20054 0x00070000
# GPIO4_D2
io -4 -w 0xfdc20078 0x07000000
# GPIO3_B5
io -4 -w 0xfdc2004C 0x00700000
# Pullup
# GPIO3_C2 GPIO3_C3 GPIO3_C4
io -4 -w 0xfdc600a8 0x03F00150
# GPIO3_D2
io -4 -w 0xfdc600bc 0x00300010
# GPIO3_B5
io -4 -w 0xfdc600a4 0x0c000400

3.6 GPIO调试

Module Start Address
GPIO0 0xFDD60000
GPIO1 0xFE740000
GPIO2 0xFE750000
GPIO3 0xFE760000
GPIO4 0xFE770000
Name Offset Size Reset Value Description
GPIO_SWPORT_DR_L 0x0000 W 0x00000000 Port Data Register (Low)
GPIO_SWPORT_DR_H 0x0004 W 0x00000000 Port Data Register (High)
GPIO_SWPORT_DDR_L 0x0008 W 0x00000000 Port Data Direction Register (Low)
GPIO_SWPORT_DDR_H 0x000C W 0x00000000 Port Data Direction Register (High)

测试GPIO指令与寄存器操作

使用IO:GPIO0_C4
序号: 20 GPIO3基地址:0xFDD60000 GPIO(0)_SWPORT_DR_H: 0xFDD60004 GPIO(0)_SWPORT_DDR_H: 0xFDD6000C

cd /sys/class/gpio
echo 20 > export
cd gpio20

# Write sysfs and check registers
cat direction    # output: in
io -4 0xFDD6000C # output : fdd6000c:  00007001
                   bit5:0, input
                     
echo out > direction
io -4 0xFDD6000C # output : fdd6000c:  00007011
                   bit5:1, output

cat value        # output: 0
io -4 0xFDD60004 # output : fdd60004:  00007000
                   bit5:0
echo 1 > value
io -4 0xFDD60004 # output : fdd60004:  00007010
                   bit5:1
# Write register and check sysfs
io -4 -w 0xFDD60004 0x00100000
cat value        # output: 0
io -4 -w 0xFDD60004 0x00100010
cat value        # output: 1
                     

4. 其他指令

# 查看GPIO信息
cat /sys/kernel/debug/gpio

# 查看pin状态
cat /sys/kernel/debug/pinctrl/pinctrl-rockchip-pinctrl/pinconf-pins
library/rk3568/gpio.txt · Last modified: 2022/11/03 16:14 by lhaosen