指南-luat二次开发教程指南-设备驱动-SDIO设备

目录

GPIO接口

简介

GPIO(General-Purpose Input/Output) 指通用输入输出口。在软件运行期间能够动态配置和控制的通用引脚,实现某时刻电平状态的输出与输入,即可以通过它们输出高低电平或者通过它们读入引脚的状态-是高电平或是低电平。除了通用输入输出功能外,还可能有上拉、下拉、中断或其它复用功能。


合宙Cat.1模块具有多种不同的GPIO接口,部分GPIO口同时可复用为其他功能,并且模块的GPIO管脚输入输出电压能力按照不同的电压域区分,特珠管脚的使用需要打开对应的电压域方能使用。


GPIO接口控制

GPIO的库由底层core实现,相关API接口如下:

API接口 描述
pins.setup() GPIO接口配置,配置使用管脚,模式

详细的API介绍见pins API章节

相关硬件接口

Air724UG模块引脚共支持28个GPIO,部分引脚上电前后状态不同,如使用这些管脚,需根据实际情况使用。

管脚定义:

VLCD、VMMC、VSIM1相关引脚电压域会根据外部硬件,其内部自动调整其输出电压,为1.8V/3V/3.3V
At reset, after reset 都默认指的就是function 0功能的状态(即GPIO 配置还没生效前的状态)
GPIO0~5 电源域默认关闭,所以at reset, after reset状态都是L
GPIO29~31电源域默认关闭,所以at reset, after reset状态都是L
Pin State Function 0 Function 1 Function 2
Air724UG PIN NO. GPIO number Name At Reset(H/L/Hiz) After Reset(H/L/Hiz) Power Domain Pull-up Pull-Down Function 0 Type Function 1 Type Function 2 Type
41 GPIO_0 LCD_DATA/GPIO_0 INPUT L INPUT L VLCD(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_0 I/O LCD_DATA O
58 GPIO_1 LCD_DC/NET_STATUS/GPIO_1 INPUT L INPUT L VLCD(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_1 I/O LCD_DC O NET_STATUS O
40 GPIO_2 LCD_CLK/AP_WAKEUP_MODULE/GPIO_2 INPUT L INPUT L VLCD(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_2 I/O LCD_CLK O AP_WAKEUP_MODULE I
39 GPIO_3 LCD_CS/WAKEUP_OUT/GPIO_3 INPUT L INPUT L VLCD(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_3 I/O LCD_CS O WAKEUP_OUT O
57 GPIO_4 LCD_SEL/NET_MODE/GPIO_4 INPUT L INPUT L VLCD(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_4 I/O LCD_SEL O NET_MODE O
49 GPIO_5 MODULE_STATUS/GPIO_5 INPUT L INPUT L400ms后,由底层软件控制为OUTPUT变H(3029版本默认输出低电平) VDDIO(1.8V) 20K/4.7K 40K GPIO_5 I/O MODULE_STATUS O
52 GPIO_9 SPI1_CLK/GPIO_9 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_9 I/O SPI1_CLK I/O
54 GPIO_10 SPI1_CS/GPIO_10 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_10 I/O SPI1_CS I/O
55 GPIO_11 SPI1_DOUT/GPIO_11 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_11 I/O SPI1_DOUT I/O
53 GPIO_12 SPI1_DIN/GPIO_12 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_12 I/O SPI1_DIN I/O
43 GPIO_13 GPIO_13 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_13 I/O
32 GPIO_14 I2C2_SCL/GPIO_14 INPUT L INPUT L VDDIO(1.8V) 20K/1.8K 40K GPIO_14 I/O I2C2_SCL O
31 GPIO_15 I2C2_SDA/GPIO_15 INPUT L INPUT L VDDIO(1.8V) 20K/1.8K 40K GPIO_15 I/O I2C2_SDA I/O
50 GPIO_17 CAMI2C_SDA1/GPIO_17 INPUT H INPUT H VDDIO(1.8V) 20K/1.8K 40K GPIO_17 I/O CAMI2C_SDA1 I/O
38 GPIO_18 UART1_CTS/GPIO_18 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_18 I/O UART1_CTS I
37 GPIO_19 UART1_RTS/GPIO_19 INPUT L INPUT L VDDIO(1.8V) 20K/4.7K 40K GPIO_19 I/O UART1_RTS O
3 GPIO_20 UART2_RXD/GPIO_20 INPUT L OUTPUT L 5ms后变为H VDDIO(1.8V) 20K/4.7K 40K GPIO_20 I/O UART2_RXD I
4 GPIO_21 UART2_TXD/GPIO_21 INPUT L OUTPUT 输出log, 不建议使用 VDDIO(1.8V) 20K/4.7K 40K GPIO_21 I/O UART2_TXD O
7 GPIO_22 ZSP_UART_TXD/GPIO_22 INPUT L OUTPUT L 5ms后变为H VDDIO(1.8V) 20K/4.7K 40K GPIO_22 I/O ZSP_UART_TXD O
8 GPIO_23 USIM_CD/GPIO_23 INPUT L OUTPUT 输出log, 不建议使用 VDDIO(1.8V) 20K/4.7K 40K GPIO_23 I/O USIM_CD I
27 GPIO_24 MMC1_CMD/GPIO_24 INPUT H INPUT H VMMC(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_24 I/O MMC1_CMD I/O
29 GPIO_25 MMC1_DAT0/GPIO_25 INPUT H INPUT H VMMC(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_25 I/O MMC1_DAT0 I/O
30 GPIO_26 MMC1_DAT1/GPIO_26 INPUT H INPUT H VMMC(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_26 I/O MMC1_DAT1 I/O
25 GPIO_27 MMC1_DAT2/GPIO_27 INPUT H INPUT H VMMC(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_27 I/O MMC1_DAT2 I/O
26 GPIO_28 MMC1_DAT3/GPIO_28 INPUT H INPUT H VMMC(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_28 I/O MMC1_DAT3 I/O
69 GPIO_29 SIM1_CLK/GPIO_29 OUTPUT L OUTPUT L VSIM1(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_29 I/O SIM1_CLK O
70 GPIO_30 SIM1_DATA/GPIO_30 INPUT L INPUT L VSIM1(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_30 I/O SIM1_DATA I/O
71 GPIO_31 SIM1_RST/GPIO_31 OUTPUT L OUTPUT L VSIM1(1.8V/3V/3.3V) 20K/4.7K/1.8K 50K GPIO_31 I/O SIM1_RST O

GPIO使用示例

GPIO 的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下:

  1. 配置操作的GPIO接口管脚及工作模式。
  2. 在代码运行中操作GPIO口工作状态。
module(...,package.seeall)
require"pins"
--[[
有些GPIO需要打开对应的ldo电压域才能正常工作,电压域和对应的GPIO关系如下
pmd.ldoset(x,pmd.LDO_VSIM1) -- GPIO 29、30、31

pmd.ldoset(x,pmd.LDO_VLCD) -- GPIO 0、1、2、3、4
--注意:
--Air724 A11以及之前的开发板丝印有误:
--丝印中的IO_0、IO_1、IO_2、IO_3、IO_4并不对应GPIO0、1、2、3、4
--丝印中的LCD_DIO、LCD_RS、LCD_CLK、LCD_CS对应GPIO0、1、2、3;模块的LCD_SEL引脚对应GPIO4

pmd.ldoset(x,pmd.LDO_VMMC) -- GPIO 24、25、26、27、28
x=0时:关闭LDO
x=1时:LDO输出1.716V
x=2时:LDO输出1.828V
x=3时:LDO输出1.939V
x=4时:LDO输出2.051V
x=5时:LDO输出2.162V
x=6时:LDO输出2.271V
x=7时:LDO输出2.375V
x=8时:LDO输出2.493V
x=9时:LDO输出2.607V
x=10时:LDO输出2.719V
x=11时:LDO输出2.831V
x=12时:LDO输出2.942V
x=13时:LDO输出3.054V
x=14时:LDO输出3.165V
x=15时:LDO输出3.177V
]]
local level = 0
--GPIO18配置为输出,默认输出低电平,可通过setGpio18Fnc(0或者1)设置输出电平
local setGpio18Fnc = pins.setup(pio.P0_18,0)
sys.timerLoopStart(function()
    level = level==0 and 1 or 0
    setGpio18Fnc(level)
    log.info("testGpioSingle.setGpio18Fnc",level)
end,1000)

--GPIO19配置为输入,可通过getGpio19Fnc()获取输入电平
local getGpio19Fnc = pins.setup(pio.P0_19)
sys.timerLoopStart(function()
    log.info("testGpioSingle.getGpio19Fnc",getGpio19Fnc())
end,1000)
--pio.pin.setpull(pio.PULLUP,pio.P0_19)  --配置为上拉
--pio.pin.setpull(pio.PULLDOWN,pio.P0_19)  --配置为下拉
--pio.pin.setpull(pio.NOPULL,pio.P0_19)  --不配置上下拉

function gpio13IntFnc(msg)
    log.info("testGpioSingle.gpio13IntFnc",msg,getGpio13Fnc())
    --上升沿中断
    if msg==cpu.INT_GPIO_POSEDGE then
    --下降沿中断
    else
    end
end
--GPIO13配置为中断,可通过getGpio13Fnc()获取输入电平,产生中断时,自动执行gpio13IntFnc函数
getGpio13Fnc = pins.setup(pio.P0_13,gpio13IntFnc)

常见问题

  1. 例:为什么GPIO4管脚操作没反应?
    答:GPIO4管脚为VCC_LCD电压域,需要先配置pmd.ldoset(2,pmd.LDO_VLCD)打开,才能正常操作该管脚。

相关资料以及购买链接

来自转载:https://doc.openluat.com/wiki/21?wiki_page_id=1945

上一篇:yolo系列论文阅读


下一篇:YOLOV3林业病虫害数据集和数据预处理-paddle教程