SDIO设备

# 简介 SDIO(Secure Digital Input and Output)全称为安全数字输入输出接口,在协议上和SPI类似是一种串行的硬件接口,通信的双方一个作为HOST,另一端是Device,所有的通信都是由HOST端发送命令开始的,Device端只要解析相应的命令,就可以正常通信了。比较常见的应用是用来外接SD卡或者MicroSD Card(也叫TF卡)。 合宙Cat.1模块(Air720Ux、Air722Ux、Air724Ux、Air820Ux)系列模块目前支持的SDIO应用就是通过MMC接口来外接TF卡的。 # SDIO接口控制 SDIO的库由底层core实现,相关API接口如下: |API接口| 描述| | --- | --- | | io.mount() | 挂载SD卡,返回值0表示失败,1表示成功 | | rtos.get_fs_total_size() |获取SD卡总空间,单位为KB | | io.opendir() | 遍历读取sd卡根目录下的文件或者文件夹 | | io.readFile() | 播放sd卡根目录下的文件或者文件夹 | | io.closedir() | 关闭sd卡根目录下的文件或者文件夹目录 | | io.writeFile() | 向sd卡根目录下写入文件 | | io.unmount() | 卸载SD卡,返回值0表示失败,1表示成功| > 详细的API介绍见[LuatOS-Air core API](https://doc.openluat.com/wiki/21?wiki_page_id=2248 "LuatOS-Air core API")章节 # SDIO使用示例 SDIO 的具体使用方式可以参考如下示例代码,示例代码的主要步骤如下: 1. 挂载SD卡。 2. 向SD卡根目录下写入文件。 3. 卸载SD卡。 ```lua module(..., package.seeall) require"audio" function sdCardTask() sys.wait(5000) --挂载SD卡,返回值0表示失败,1表示成功 io.mount(io.SDCARD) --第一个参数1表示sd卡 --第二个参数1表示返回的总空间单位为KB local sdCardTotalSize = rtos.get_fs_total_size(1,1) log.info("sd card total size "..sdCardTotalSize.." KB") --第一个参数1表示sd卡 --第二个参数1表示返回的总空间单位为KB local sdCardFreeSize = rtos.get_fs_free_size(1,1) log.info("sd card free size "..sdCardFreeSize.." KB") --遍历读取sd卡根目录下的最多10个文件或者文件夹 if io.opendir("/sdcard0") then for i=1,10 do local fType,fName,fSize = io.readdir() if fType==32 then log.info("sd card file",fName,fSize) elseif fType == nil then break end end io.closedir("/sdcard0") end --向sd卡根目录下写入一个pwron.mp3 io.writeFile("/sdcard0/pwron.mp3",io.readFile("/lua/pwron.mp3")) --播放sd卡根目录下的pwron.mp3 audio.play(0,"FILE","/sdcard0/pwron.mp3",audiocore.VOL7,function() sys.publish("AUDIO_PLAY_END") end) sys.waitUntil("AUDIO_PLAY_END") --卸载SD卡,返回值0表示失败,1表示成功 io.unmount(io.SDCARD) end sys.taskInit(sdCardTask) ``` # 硬件设计 见硬件设计指南 [SDIO接口 章节](https://hmi.wiki.luatos.com/doc/65042949/e6zPC3k9/bxpOVgAI)