+------------------------------------------------------------------------------+ | Pine RockPro64 GPIO - General Purpose Input Output | +------------------------------------------------------------------------------+ - There are (5) GPIO register blocks in the RK3399 register map. - Each has (4) groups of GPIOs - A, B, C, D. - There are (8) GPIOs per group. - Available GPIOs are shown in the PI2/3B 40-pin header. - They can be programmed via memory-mapped I/O. - Available GPIOs: GPIO1A, B, C, GPIO3D, & GPIO4C, D. - All 32-bit registers recognized as little-endian #///////////////////////////////////////////////////////////////////////////////# # ATTENTION!!!!! GPIOS CAN BE SET FOR 1V8 OR 3V0 # #///////////////////////////////////////////////////////////////////////////////# --------------------------------------------------------------------------------- GENERAL REGISTER FILES ---------------------- 3 1 0 OFFSET +----------------+ ---------- |GPIO4D_DRV_STR | Drive Strength +----------------+ 0x0777013C |GPIO4C_DRV_STR | +----------------+ 0x07770138 / / / / +----------------+ |GPIO3D_DRV_STR | +----------------+ 0x07770128 / / / / +----------------+ |GPIO4D_SMT_CTL | Smitter Control +----------------+ 0x077700EC |GPIO4C_SMT_CTL | +----------------+ 0x077700E8 / / / / +----------------+ |GPIO3D_SMT_CTL | +----------------+ 0x077700DC / / / / +----------------+ |GPIO4D_SLW_RT | Slew Rate +----------------+ 0x077700AC |GPIO4C_SLW_RT | +----------------+ 0x077700A8 / / / / +----------------+ |GPIO3D_SLW_RT | +----------------+ 0x0777009C / / / / +----------------+ |GPIO4D_PU_PD | Pull-up/Pull-down +----------------+ 0x0777006C |GPIO4C_PU_PD | +----------------+ 0x07770068 / / +----------------+ |GPIO3D_PU_PD | +----------------+ 0x0777005C / / / / +----------------+ |GPIO4D_IOMUX | Input Output Mux +----------------+ 0x07770E2C |GPIO4C_IOMUX | +----------------+ 0x07770E28 / / / / +----------------+ |GPIO3D_IOMUX | +----------------+ 0x0777001C / / +----------------+ RK3399_GRF 0x07770000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 --------------------------------------------------------------------------------- POWER MANAGEMENT UNIT GENERAL REGISTER FILES -------------------------------------------- 3 1 0 OFFSET +----------------+ ---------- |GPIO1D_SMT_CTL | Smitter Control +----------------+ 0x0732013C |GPIO1C_SMT_CTL | +----------------+ 0x07320138 |GPIO1B_SMT_CTL | +----------------+ 0x07320138 |GPIO1A_SMT_CTL | +----------------+ 0x07320130 / / / / +----------------+ |GPIO1D_DRV_STR | Pad Drive Strength +----------------+ 0x073200B8 / / +----------------+ |GPIO1C_DRV_STR | +----------------+ 0x073200B0 / / +----------------+ |GPIO1B_DRV_STR | +----------------+ 0x073200A8 |GPIO1A_DRV_STR | +----------------+ 0x073200A0 / / / / +----------------+ |GPIO1C_PU_PD | Pull-up/Pull-down +----------------+ 0x07320058 |GPIO1B_PU_PD | +----------------+ 0x07320054 |GPIO1A_PU_PD | +----------------+ 0x07320050 / / / / +----------------+ |GPIO1C_IOMUX | Input Output Mux +----------------+ 0x07320018 |GPIO1B_IOMUX | +----------------+ 0x07320014 |GPIO1A_IOMUX | +----------------+ 0x07320010 / / / / +----------------+ RK3399_PMUGRF 0x07320000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 --------------------------------------------------------------------------------- POWER MANAGEMENT UNIT CLOCK RESET UNIT -------------------------------------- 3 1 0 +----------------+ OFFSET |PMUCRU | +----------------+ 0x07750000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 --------------------------------------------------------------------------------- INTER_INTEGRATED CIRCUIT ------------------------ 3 1 0 +----------------+ OFFSET |I2C8 | +----------------+ 0x073E0000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 --------------------------------------------------------------------------------- SERIAL PERIPHERAL INTERFACE --------------------------- 3 1 0 +----------------+ OFFSET |SPI1 | +----------------+ 0x071D0000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 --------------------------------------------------------------------------------- PULSE WIDTH MODULATION ---------------------- 3 1 0 +----------------+ OFFSET |PWM | +----------------+ 0x07420000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 --------------------------------------------------------------------------------- GENERAL PURPOSE INPUT OUTPUT ---------------------------- 3 1 0 OFFSET +----------------+ ------- |GPIO4 | +----------------+ 0x07790000 / / / / +----------------+ |GPIO3 | +----------------+ 0x07780000 / / / / +----------------+ |GPIO1 | +----------------+ 0x07730000 / / / / / / +----------------+ RK3399_PERI_BASE 0xF8000000 ----------------------------------------------------------------- | | | | | | | | | ----------------------------------------------------------------- [3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0] GPIO1 [1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0] ----------------------------------------------------------------- | | | |7 4 1 | A [OK] ----------------------------------------------------------------- | | | 4 3 2 1 0| | B [NO 5] ----------------------------------------------------------------- | | 6 5 4 2 | | | C [OK] ----------------------------------------------------------------- ----------------------------------------------------------------- [3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0] GPIO3 [1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0] ----------------------------------------------------------------- |7 6 5 4 3 2 1 0| | | | D [OK] ----------------------------------------------------------------- ----------------------------------------------------------------- [3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0] GPIO4 [1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0] ----------------------------------------------------------------- | | 5 4 3 | | | C [OK] ----------------------------------------------------------------- | 4 3 1 | | | | D [OK] ----------------------------------------------------------------- ----------------------------------------------------------------- [3|3|2|2|2|2|2|2|2|2|2|2|1|1|1|1|1|1|1|1|1|1|0|0|0|0|0|0|0|0|0|0] [GPIO_WR_ENBL][GPIO_FSEL] [1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0|9|8|7|6|5|4|3|2|1|0] ----------------------------------------------------------------- |8 8|7 7|6 6|5 5|4 4|3 3|2 2|1 1|8 8|7 7|6 6|5 5|4 4|3 3|2 2|1 1| ----------------------------------------------------------------- | WR_ENBL | FSEL | ----------------------------------------------------------------- --------------------------------------------------------------------------------- GPIO_PIN PHYS_PIN DESIG DESCR ======== ======== ===== ===== 22 15 GPIO1_A1 GPIO1_A1/ISP0_SHUTTER_TRIG/ISP1_SHUTTER_TRIG/TCPD_CC0_VCONN_EN 23 16 GPIO1_A4 GPIO1_A4/ISP0_PRELIGHT_TRIG/ISP1_PRELIGHT_TRIG 9 21 GPIO1_A7 GPIO1_A7/SPI1_RXD/UART4_RX 10 19 GPIO1_B0 GPIO1_B0/SPI1_TXD/UART4_TX 11 23 GPIO1_B1 GPIO1_B1/SPI1_CLK/PMCU_JTAG_TCK 8 24 GPIO1_B2 GPIO1_B2/SPI1_CSN0/PMCU_JTAG_TMS 0 27 GPIO1_B3 GPIO1_B3/I2C4_SDA 1 8 GPIO1_B4 GPIO1_B4/I2C4_SCL 7 26 GPIO1_B5 GPIO1_B5 27 13 GPIO1_C2 GPIO1_C2/SPI3_CSN0 2 3 GPIO1_C4 GPIO1_C4/I2C8_SDA 3 5 GPIO1_C5 GPIO1_C5/I2C8_SCL 17 11 GPIO1_C6 GPIO1_C6/TCPD_VBUS_SOURCE0 18 12 GPIO3_D0 GPIO3_D0/I2S0_SCLK 26 37 GPIO3_D1 GPIO3_D1/I2S0_LRCK_RX 19 35 GPIO3_D2 GPIO3_D2/I2S0_LRCK_TX 20 38 GPIO3_D3 GPIO3_D3/I2S0_SDI0 12 32 GPIO3_D4 GPIO3_D4/I2S0_SDI1SDO3 13 33 GPIO3_D5 GPIO3_D5/I2S0_SDI2SDO2 16 36 GPIO3_D6 GPIO3_D6/I2S0_SDI3SDO1 20 40 GPIO3_D7 GPIO3_D7/I2S0_SDO0 24 18 GPIO4_C5 GPIO4_C5/SPDIF_TX 25 22 GPIO4_D1 GPIO4_D1/DP_HOTPLUG 5 29 GPIO4_D3 GPIO4_D3 6 31 GPIO4_D4 GPIO4_D4 Translate GPIO pint to 40-pin connector physical pin. NOTE: We'll have a GPIO00 and a GPIO01. BIT BANK BIT BANK SHIFT SHIFT PHYS GPIO SHIFT SHIFT ------ ----- ---------- ------ ------ ----- << 0x3 << 8 27, // 0 << 0x4 << 8 28, 3, // 1 2 << 0x4 << 16 5, 7, // 3 4 29, 31, // 5 6 << 0x5 << 8 26, 24, // 7 8 << 0x2 << 8 << 0x7 << 0 21, 19, // 9 10 << 0x0 << 8 << 0x1 << 8 23, 32, // 11 12 << 0x4 << 24 << 0x5 << 24 33, 8, // 13 14 << 0x4 << 16 10, 36, // 15 16 << 0x6 << 24 11, 12, // 17 18 << 0x0 << 24 << 0x2 << 24 35 38, // 19 20 << 0x3 << 24 << 0x7 << 24 40, 15, // 21 22 << 0x1 << 0 << 0x4 << 0 16, 18, // 23 24 22, 37, // 25 26 << 0x1 << 24 << 0x2 << 16 13, -1, // 27 28 -1, -1, // 29 30 -1, -1, // 31 32 -1, -1, // 33 34 -1, -1, // 35 36 -1, -1, // 37 38 -1, -1 // 30 40 --------------------------------------------------------------------------------- BIT BANK Pi GPIO RKP64 GPIO PYS SHIFT SHIFT ------- ---------- -- ------ ----- GPIO 22 GPIO1_A1 15 << 0x1 << 0 23 A4 16 << 0x4 << 0 9 A7 21 << 0x7 << 0 GPIO 10 GPIO1_B0 19 << 0x0 << 8 11 B1 23 << 0x1 << 8 8 B2 24 << 0x2 << 8 0 B3 27 << 0x3 << 8 1 B4 28 << 0x4 << 8 7 B5 26 << 0x5 << 8 GPIO 27 GPIO1_C2 13 << 0x2 << 16 14 C4 8 << 0x4 << 16 24 C5 5 << 0x5 << 16 17 C6 11 << 0x6 << 16 GPIO 18 GPIO3_D0 12 << 0x0 << 24 26 D1 37 << 0x1 << 24 19 D2 35 << 0x2 << 24 20 D3 38 << 0x3 << 24 12 D4 32 << 0x4 << 24 13 D5 33 << 0x5 << 24 16 D6 36 << 0x6 << 24 21 D7 40 << 0x7 << 24 --------------------------------------------------------------------------------- 40-pin GPIO header ------------------ Pi 3 RKP64 RKP64 Pi 3 -------- ----------------------- ------------------- -------- 3.3v [ 1] [ 2] 5.0v (GPIO02) GPIO1_C4 (I2C8_SDA) [ 3] [ 4] 5.0v (GPIO03) GPIO1_C5 (I2C8_SCL) [ 5] [ 6] GND (GPIO04) GPIO4_D0 (CPU_GPCLK) [ 7] [ 8] GPIO4_C4 (UART2_TX) (GPIO14) GND [ 9] [10] GPIO4_C3 (UART2_RX) (GPIO15) (GPIO17) GPIO1_C6 [11] [12] GPIO3_D0 (I2S0_CLK) (GPIO18) (GPIO27) GPIO1_C2 [13] [14] GND (GPIO22) GPIO1_A1 [15] [16] GPIO1_A4 (GPIO23) 3.3v [17] [18] GPIO4_C5 (GPIO24) (GPIO10) GPIO1_B0(SPI1_TXD) [19] [20] GND (GPIO09) GPIO1_A7(SPI1_RXD) [21] [22] GPIO4_D1 (GPIO25) (GPIO11) GPIO1_B1 (SPI1_CLK) [23] [24] GPIO1_B2 (SPI1_CSN0) (GPIO08) GND [25] [26] GPIO1_B5 (GPIO07) (GPIO00) GPIO1_B3 (I2C4_SDA) [27] [28] GPIO1_B4 (I2C4_SCL) (GPIO01) (GPIO05) GPIO4_D3 [29] [30] GND (GPIO06) GPIO4_D4 [31] [32] GPIO3_D4 (I2S0_SDI1SDO3)(GPIO12) (GPIO13) GPIO3_D5(I2S0_SDI2SDO2) [33] [34] GND (GPIO19) GPIO3_D2 (I2S0_LRCKTX) [35] [36] GPIO3_D6 (I2S0_SDI3SDO1)(GPIO16) (GPIO26) GPIO3_D1 (I2S0_LRCKRX) [37] [38] GPIO3_D3 (I2S0_SDI0) (GPIO20) GND [39] [40] GPIO3_D7 (I2S0_SDO0) (GPIO21) --------------------------------------------------------------------------------- rk3399_gpio_fun_sel(uint8_t pin, uint8_t fsel) do IOMUX_WR_ENBL & GPIO_FSEL GPIO_FSEL