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

2021/6/26 23:57:48

本文主要是介绍指南-luat二次开发教程指南-设备驱动-SDIO设备,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录

  • GPIO接口
    • 简介
    • GPIO接口控制
    • 相关硬件接口
    • GPIO使用示例
    • 常见问题
    • 相关资料以及购买链接

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 StateFunction 0Function 1Function 2
Air724UG PIN NO.GPIO numberNameAt Reset(H/L/Hiz)After Reset(H/L/Hiz)Power DomainPull-upPull-DownFunction 0TypeFunction 1TypeFunction 2Type
41GPIO_0LCD_DATA/GPIO_0INPUTLINPUTLVLCD(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_0I/OLCD_DATAO
58GPIO_1LCD_DC/NET_STATUS/GPIO_1INPUTLINPUTLVLCD(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_1I/OLCD_DCONET_STATUSO
40GPIO_2LCD_CLK/AP_WAKEUP_MODULE/GPIO_2INPUTLINPUTLVLCD(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_2I/OLCD_CLKOAP_WAKEUP_MODULEI
39GPIO_3LCD_CS/WAKEUP_OUT/GPIO_3INPUTLINPUTLVLCD(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_3I/OLCD_CSOWAKEUP_OUTO
57GPIO_4LCD_SEL/NET_MODE/GPIO_4INPUTLINPUTLVLCD(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_4I/OLCD_SELONET_MODEO
49GPIO_5MODULE_STATUS/GPIO_5INPUTLINPUTL400ms后,由底层软件控制为OUTPUT变H(3029版本默认输出低电平)VDDIO(1.8V)20K/4.7K40KGPIO_5I/OMODULE_STATUSO
52GPIO_9SPI1_CLK/GPIO_9INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_9I/OSPI1_CLKI/O
54GPIO_10SPI1_CS/GPIO_10INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_10I/OSPI1_CSI/O
55GPIO_11SPI1_DOUT/GPIO_11INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_11I/OSPI1_DOUTI/O
53GPIO_12SPI1_DIN/GPIO_12INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_12I/OSPI1_DINI/O
43GPIO_13GPIO_13INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_13I/O
32GPIO_14I2C2_SCL/GPIO_14INPUTLINPUTLVDDIO(1.8V)20K/1.8K40KGPIO_14I/OI2C2_SCLO
31GPIO_15I2C2_SDA/GPIO_15INPUTLINPUTLVDDIO(1.8V)20K/1.8K40KGPIO_15I/OI2C2_SDAI/O
50GPIO_17CAMI2C_SDA1/GPIO_17INPUTHINPUTHVDDIO(1.8V)20K/1.8K40KGPIO_17I/OCAMI2C_SDA1I/O
38GPIO_18UART1_CTS/GPIO_18INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_18I/OUART1_CTSI
37GPIO_19UART1_RTS/GPIO_19INPUTLINPUTLVDDIO(1.8V)20K/4.7K40KGPIO_19I/OUART1_RTSO
3GPIO_20UART2_RXD/GPIO_20INPUTLOUTPUTL 5ms后变为HVDDIO(1.8V)20K/4.7K40KGPIO_20I/OUART2_RXDI
4GPIO_21UART2_TXD/GPIO_21INPUTLOUTPUT输出log, 不建议使用VDDIO(1.8V)20K/4.7K40KGPIO_21I/OUART2_TXDO
7GPIO_22ZSP_UART_TXD/GPIO_22INPUTLOUTPUTL 5ms后变为HVDDIO(1.8V)20K/4.7K40KGPIO_22I/OZSP_UART_TXDO
8GPIO_23USIM_CD/GPIO_23INPUTLOUTPUT输出log, 不建议使用VDDIO(1.8V)20K/4.7K40KGPIO_23I/OUSIM_CDI
27GPIO_24MMC1_CMD/GPIO_24INPUTHINPUTHVMMC(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_24I/OMMC1_CMDI/O
29GPIO_25MMC1_DAT0/GPIO_25INPUTHINPUTHVMMC(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_25I/OMMC1_DAT0I/O
30GPIO_26MMC1_DAT1/GPIO_26INPUTHINPUTHVMMC(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_26I/OMMC1_DAT1I/O
25GPIO_27MMC1_DAT2/GPIO_27INPUTHINPUTHVMMC(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_27I/OMMC1_DAT2I/O
26GPIO_28MMC1_DAT3/GPIO_28INPUTHINPUTHVMMC(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_28I/OMMC1_DAT3I/O
69GPIO_29SIM1_CLK/GPIO_29OUTPUTLOUTPUTLVSIM1(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_29I/OSIM1_CLKO
70GPIO_30SIM1_DATA/GPIO_30INPUTLINPUTLVSIM1(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_30I/OSIM1_DATAI/O
71GPIO_31SIM1_RST/GPIO_31OUTPUTLOUTPUTLVSIM1(1.8V/3V/3.3V)20K/4.7K/1.8K50KGPIO_31I/OSIM1_RSTO

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)打开,才能正常操作该管脚。

相关资料以及购买链接

  • Air724UG开发板购买链接
  • Air724 开发板使用说明
  • 模块资料下载

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



这篇关于指南-luat二次开发教程指南-设备驱动-SDIO设备的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程