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