GPIO驱动能力调节


1. 用户接口

1.1. 用户层接口使用

要使用用户层接口需要打开 CONFIG_MSYS_GPIO,默认是disable的。

该配置位于kernel menuconfig中:Device Drivers ---> SStar SoC platform drivers ---> msys api ---> support GPIO pull and driving modify

1.2. GPIO驱动能力讲解

910Q/920G 部分 GPIO 驱动能力讲解,以如下表格为例:

Pin Location Power Domain GPIO index Ball Name Configuration (default value) Base Addr Offset Driving DRV DRV (default value)
V16 AVDD_NODIE 0 PAD_PM_UART_RX1 default is GPIO 3F 19 >4mA
V17 AVDD_NODIE 1 PAD_PM_UART_TX1 default is GPIO 3F 20 >4mA
W16 AVDD_NODIE 2 PAD_PM_UART_RX default is GPIO 3F 21 DRV=0 ->4mA DRV=1 ->8mA reg[3F42]#7 0
W17 AVDD_NODIE 3 PAD_PM_UART_TX default is GPIO 3F 22 DRV=0 ->4mA DRV=1 ->8mA reg[3F44]#7 0
V15 AVDD_NODIE 4 PAD_PM_I2CM_SCL default is GPIO 3F 11 DRV=0 ->4mA DRV=1 ->8mA reg[3F22]#7 0
W15 AVDD_NODIE 5 PAD_PM_I2CM_SDA default is GPIO 3F 12 DRV=0 ->4mA DRV=1 ->8mA reg[3F24]#7 0
U19 AVDD_NODIE 6 PAD_PM_GPIO0 default is GPIO 3F 0 >4mA
V19 AVDD_NODIE 7 PAD_PM_GPIO1 default is GPIO 3F 1 >4mA
W19 AVDD_NODIE 8 PAD_PM_GPIO2 default is GPIO 3F 2 >4mA
D10 VDDP_8 132 PAD_HDMITX_SDA default is GPIO 103E 6b (DRV1, DRV0) = (0, 0) -> 4mA (0, 1) -> 8mA (1, 0) -> 12mA (1, 1) -> 16mA reg[103ED6] #8~ #7 0

GPIO0 PAD_PM_UART_RX1 从表格中可以看到Driving 只有一个挡位就是 4mA,说明这个GPIO口无法调节驱动能力。

GPIO2 PAD_PM_UART_RX 从表格中可以看到Driving 有二个挡位,分别是4mA和8mA,再继续看到DRV 这列,用0x3F 42 Bit7来表示当前的驱动能力值, 换算成8进制之后,读取0x3F 21 bit7来确认当前驱动能力是多少,如果读出来的值是0表示当前驱动能力为4mA,如果读取的值是1表示当前驱动能力是8mA。

GPIO132 PAD_HDMITX_SDA 从表格中可以看到Driving 有四个挡位,分别是4mA、8mA、12mA、16mA,再继续看到DRV 这列,用0x103E D6 Bit7 及 0x103E D7 Bit0来表示当前的驱动能力值 ,换算成8进制之后,读取0x103E 6b bit7 及 0x103E 6b bit8来确认当前驱动能力是多少,如果读出来的值是00表示当前驱动能力为4mA,如果读取的值是01表示当前驱动能力是8mA,如果读取的值是10表示当前驱动能力是12mA,如果读取的值是11表示当前驱动能力是16mA。

1.3. 驱动能力设置

以操作 PAD_HDMITX_SDA为例,设置驱动能力。

设置驱动能力之前需要将 GPIO 设置为输出高电平状态方便测量:

  • cd /sys/class/gpio

  • echo 132> export

  • echo high > gpio6/direction

设置驱动能力为 8mA:

  • cd sys/class/mstar/msys

  • echo 132 1 > gpio_drive 或者 echo PAD_HDMITX_SDA 1 > gpio_drive

  • cat gpio_drive //查看状态

2. 内核接口

MDrv_GPIO_Drv_Set

  • U8 MDrv_GPIO_Drv_Set(U8 u8IndexGPIO, U8 u8Level)

  • 该函数功能为设置指定的 GPIO 的驱动能力

  • 返回参数零为设置成功,非零为该引脚不支持上下拉设置或者输入参数错误

  • 输入参数 u8IndexGPIO 为 GPIO Index,u8Level 为驱动能力等级,目前支持的驱动能力等级如下表:

    枚举型参数 传入参数 驱动能力等级
    MDRV_LEVEL_4MA 0 4mA
    MDRV_LEVEL_8MA 1 8mA
    MDRV_LEVEL_12MA 2 12mA
    MDRV_LEVEL_16MA 3 16mA