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)