lf - flash 驱动 软件包(同时支持驱动 nor flash 和 nand flash 设备)
作者:马亚丹
一、概述
lf 是 little_flash 的缩写;
little_flash 是一个开源的 SPI Flash 通用驱动库,主要用于嵌入式系统中简化不同型号 Flash 存储器的驱动开发
lf 核心库是合宙自己封装的用于驱动 nor flash 和 nand flash 的库,可以把 nor flash 和 nand flash 挂载成 littlefs 文件系统,目前功能上和 sfud 核心库的使用有重复,区别是 sfud 核心库不支持挂载 nand flash,但是 if 核心库可以,因为 lf 功能更强大,所以推荐使用 lf 核心库。
有一点需要注意,市面上大多数 nor flash 都内置 SFDP 头(SFDP 相当于 Flash 芯片的 “参数说明书”,存储了芯片的 容量、擦除块大小、支持的指令(如读写指令)、通信模式(如 SPI/QPI)等信息),而 nand flash 几乎不支持 SFDP, 所以在使用本库挂载 nand flash 时,底层会打印找不到 SFDP Header,但是不影响挂载为文件系统。
例如下图的打印:
二、核心示例
1、核心示例是指:使用本库文件提供的核心 API,开发的基础业务逻辑的演示代码;
2、核心示例的作用是:帮助开发者快速理解如何使用本库,所以核心示例的逻辑都比较简单;
3、更加完整和详细的 demo,请参考 LuatOS 仓库 中各个产品目录下的 demo/accessory_board/AirSPINAND_1000 和 demo/accessory_board/AirSPINORFLASH_1000
local function lf_test()
-- flash操作起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 擦除数据的大小(示例值,需匹配 Flash block 大小)
local erase_size = 4096
--需要操作的数据(示例值,需根据需求调整)
local data = "testdata"
--以对象方式初始化spi,获取spi对象
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化lf, 获取flash对象
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C135DEC
log.info("Flash初始化结果:", flash_device)
--log打印 I/user.擦除一个块的数据: true
log.info("擦除一个块的数据:", lf.erase(flash_device, erase_addr, erase_size))
--log打印 I/user.写入数据: true
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
--log打印 I/user.读取数据: testdata
log.info("读取数据:", lf.read(flash_device, erase_addr, erase_size ))
--log打印 I/user.先擦除再写入数据:true
log.info("先擦除再写入数据:", lf.eraseWrite(flash_device, erase_addr, data))
local mount_point = "/little_flash"
--挂载flash为文件系统
local mount_ok = lf.mount(flash_device, mount_point)
--log打印 I/user.挂载 little_flash lfs文件系统:true
log.info("挂载 little_flash lfs文件系统:", mount_ok)
--log打印 I/user.获取flash 容量和page大小: 134217728 2048
log.info("获取 Flash 容量和page大小:", lf.getInfo(flash_device))
--log打印 I/user.擦除flash全部数据: true
log.info("擦除flash全部数据:",lf.chipErase(flash_device))
end
sys.taskInit(lf_test)
三、常量详解
核心库常量,顾名思义是由合宙 LuatOS 内核固件中定义的、不可重新赋值或修改的固定值,在脚本代码中不需要声明,可直接调用;
每个常量对应的常量取值仅做日志打印时查询使用,不要将这个常量取值用做具体的业务逻辑判断,因为LuatOS内核固件可能会变更每个常量对应的常量取值;
如果用做具体的业务逻辑判断,一旦常量取值发生改变,业务逻辑就会出错;
lf 核心库,没有常量。
四、函数详解
4.1 lf.init(spi_device)
功能
初始化 little_flash
注意事项
参数 spi_device 是用对象方式初始化 SPI 获取,即 spi.deviceSetup()接口的返回值,详细参考 SPI-API-4.6 章节。
参数
spi_device
参数含义:以对象方式设置并启用硬件SPI返回的SPI对象
数据类型:userdata
取值范围:userdata类型的SPI对象
是否必选:必须传入此参数;
注意事项:暂无
参数示例:--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C135DEC
log.info("Flash初始化结果:", flash_device)
返回值
local flash_device = lf.init(spi_device)
有一个返回值 flash_device
flash_device
含义说明:判断初始化 little_flash是否成功;
成功时返回一个数据结构,否则返回nil
数值类型:userdata
取值范围:无特别限制;
注意事项:初始化失败时,需做好对应逻辑处理
返回示例:例如返回userdata: 0C135DEC表示初始化成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C135DEC
log.info("Flash初始化结果:", flash_device)
4.2 lf.mount(flash, mount_point, offset, maxsize)
功能
挂载 flash 为 LittleFS 文件系统
注意事项
如果已经用 lf.mount 把整个 flash 挂载为文件系统,不支持再次挂载这个 flash 的一部分内存为文件系统。
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:local mount_point = "/little_flash"
--挂载flash为文件系统
local mount_ok = lf.mount(flash_device, mount_point)
--log打印 I/user.挂载 little_flash lfs文件系统:true
log.info("挂载 little_flash lfs文件系统:", mount_ok)
mount_point
参数含义:flash挂载为文件系统的目录名
数据类型:string
取值范围:string类型的名称。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:local mount_point = "/little_flash"
--挂载flash为文件系统
local mount_ok = lf.mount(flash_device, mount_point)
--log打印 I/user.挂载 little_flash lfs文件系统:true
log.info("挂载 little_flash lfs文件系统:", mount_ok)
offset
参数含义:起始偏移量,在flash的存储空间里,文件系统开始使用的位置,相对于flash起始地址的偏移值(单位为字节)
数据类型:number
取值范围:nil,0~flash总大小
是否必选:非必须传入此参数;
注意事项:默认是0,即nil表示起始偏移量为0.
注意_offset+_maxsize的结果不要超过总flash内存
如果已经把整个flash挂载为文件系统,不支持再次挂载这个flash的一部分内存为文件系统。
参数示例:local mount_point = "/little_flash"
--挂载flash为文件系统
local mount_ok = lf.mount(flash_device, mount_point,4096,4096)
--log打印 I/user.挂载 little_flash lfs文件系统:true
log.info("挂载 little_flash lfs文件系统:", mount_ok
maxsize
参数含义:指定给文件系统使用的flash存储空间的容量大小
数据类型:number
取值范围:nil,1-(总flash大小-_offset)_
是否必选:非必须传入此参数;
注意事项:默认是整个flash,注意_offset+_maxsize的结果不要超过总flash内存
如果已经把整个flash挂载为文件系统,不支持再次挂载这个flash的一部分内存为文件系统。
参数示例:local mount_point = "/little_flash"
--挂载flash为文件系统
local mount_ok = lf.mount(flash_device, mount_point,4096,4096)
--log打印 I/user.挂载 little_flash lfs文件系统:true
log.info("挂载 little_flash lfs文件系统:", mount_ok
返回值
local mount_ok = lf.mount(flash_device, mount_point,offset,maxsize)
有一个返回值 mount_ok
mount_ok
含义说明:判断挂载为文件系统是否成功;
成功时返回true,否则返回false
数值类型:boolean
取值范围:true/false
注意事项:挂载失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如返回true表示挂载文件系统成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
local mount_ok = lf.mount(flash_device, mount_point)
--log打印 I/user.文件系统挂载结果:true
log.info("文件系统挂载结果:", mount_ok)
4.3 lf.erase(flash,addr,size)
功能
擦除 flash 指定地址指定大小,按照 flash block 大小进行擦除
注意事项
addr + size
的结果不能超过 flash 的总容量。flash 擦除是 “整块擦除”,哪怕你只想擦除一小部分,也会实际擦除整个块,因此要提前规划擦除区域,避免误删其他数据。
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:-- 擦除起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 擦除大小(示例值,需匹配 Flash block 大小)
local erase_size = 4096
local erase_ok=lf.erase(flash_device, erase_addr, erase_size)
--log打印 I/user.擦除一个块的数据: true
log.info("擦除一个块的数据:",erase_ok)
addr
参数含义:操作擦除的起始地址
数据类型:number
取值范围:0-flash总大小,按照flash block的倍数取值
是否必选:必须传入此参数;
注意事项:addr + size 的结果不能超过 flash 的总容量.
注意块对齐,按照flash block的倍数取值,不同flash块大小不一样,比如常见的有4KB、32KB、64KB 等,
例如:块大小为 4KB 时,addr 取值为 0、4096、8192… 这类能被 4096 整除的地址。
可以使用fs.fsstat获取flash的block size,具体参考[fs-api-4.2章节](https://docs.openluat.com/osapi/core/fs/#41-fsfsstatpath)
参数示例:-- 擦除起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 擦除大小(示例值,需匹配 Flash block 大小)
local erase_size = 4096
local erase_ok=lf.erase(flash_device, erase_addr, erase_size)
--log打印 I/user.擦除一个块的数据: true
log.info("擦除一个块的数据:",erase_ok)
size
参数含义:需要擦除的flash容量大小
数据类型:number
取值范围:0-flash总大小,按照flash block的倍数取值
是否必选:必须传入此参数;
注意事项:addr + size 的结果不能超过 flash 的总容量.
size 建议也是 “块大小” 的整数倍(例如:块大小为 4KB 时,size 可以是 4096、8192…)。
因为addr取块大小的整数倍,flash 擦除是 “整块擦除”,
哪怕你只想擦除一小部分,也会实际擦除整个块,
因此要规划擦除区域大小,避免误删其他数据
参数示例:-- 擦除起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 擦除大小(示例值,需匹配 Flash block 大小)
local erase_size = 4096
local erase_ok=lf.erase(flash_device, erase_addr, erase_size)
--log打印 I/user.擦除一个块的数据: true
log.info("擦除一个块的数据:",erase_ok)
返回值
local erase_ok=lf.erase(flash_device, erase_addr, erase_size)
有一个返回值 erase_ok
erase_ok
含义说明:判断flash块擦除是否成功;
成功时返回true否则返回false
数值类型:boolean
取值范围:true/false
注意事项:擦除失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如返回true表示擦除成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
-- 擦除起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 擦除大小(示例值,需匹配 Flash block 大小)
local erase_size = 4096
local erase_ok=lf.erase(flash_device, erase_addr, erase_size)
--log打印 I/user.擦除一个块的数据: true
log.info("擦除一个块的数据:",erase_ok)
4.4 lf.chipErase(flash)
功能
擦除 Flash 全部数据
注意事项
暂无
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:local erase_ok=lf.chipErase(flash_device)
--log打印 I/user.擦除flash全部数据: true
log.info("擦除flash全部数据:",erase_ok)
返回值
local erase_ok=lf.chipErase(flash_device)
有一个返回值 erase_ok
erase_ok
含义说明:判断flash块擦除是否成功;
成功时返回true否则返回false
数值类型:boolean
取值范围:true/false
注意事项:擦除失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如true表示擦除成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
local erase_ok=lf.chipErase(flash_device)
--log打印 I/user.擦除flash全部数据: true
log.info("擦除flash全部数据:",erase_ok)
4.5 lf.read(flash, addr, size)
功能
读取 flash 指定位置开始的指定长度的数据
注意事项
addr + size
的结果不能超过 flash 的总容量。
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:-- 读取数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 读取数据的长度(示例值,需根据需求调整)
local erase_size = 4096
local data = "testdata"
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
local read_str=lf.read(flash_device, erase_addr, erase_size)
--log打印 I/user.读取到的数据:testdata
log.info("读取到的数据:",read_str)
addr
参数含义:读取的起始地址
数据类型:number
取值范围:0~flash总大小
是否必选:必须传入此参数;
注意事项:addr + size 的结果不能超过 flash 的总容量.
参数示例:-- 读取数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 读取数据的长度(示例值,需根据需求调整)
local erase_size = 4096
local data = "testdata"
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
local read_str=lf.read(flash_device, erase_addr, erase_size)
--log打印 I/user.读取到的数据:testdata
log.info("读取到的数据:",read_str)
size
参数含义:从起始地址开始需要读取的数据的长度大小
数据类型:number
取值范围:0-flash总大小
是否必选:必须传入此参数;
注意事项:addr + size 的结果不能超过 flash 的总容量
参数示例:-- 读取数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
-- 读取数据的长度(示例值,需根据需求调整)
local erase_size = 4096
local data = "testdata"
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
local read_str=lf.read(flash_device, erase_addr, erase_size)
--log打印 I/user.读取到的数据:testdata
log.info("读取到的数据:",read_str)
返回值
local read_str=lf.read(flash, addr, size)
有一个返回值 read_str
read_str
含义说明:从指定位置开始读取到的指定数据;
成功时返回读到的数据
数值类型:string
取值范围:无要求
注意事项:读取失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如返回testdata表示读取数据成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
-- 读取数据起始地址(示例值,需根据需求调整)
local addr = 4096
-- 读取数据的长度(示例值,需根据需求调整)
local size = 4096
local data = "testdata"
log.info("写入数据:", lf.write(flash_device, addr, data))
local read_str=lf.read(flash_device, addr, size)
--log打印 I/user.读取到的数据:testdata
log.info("读取到的数据:",read_str)
4.6 lf.write(flash, addr,data)
功能
向 flash 写数据
注意事项
data 长度 +addr 的结果不能超过 flash 的总容量。
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:-- 写入数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.写入数据:true
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
addr
参数含义:写数据的起始地址
数据类型:number
取值范围:0-flash总大小
是否必选:必须传入此参数;
注意事项:data长度+addr 的结果不能超过 flash 的总容量.
参数示例:-- 写入数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.写入数据:true
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
data
参数含义:从addr地址开始需要写入的数据
数据类型:string
取值范围:string数据长度可取值0~flash总大小
是否必选:必须传入此参数;
注意事项:data长度+addr 的结果不能超过 flash 的总容量
参数示例:-- 写入数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.写入数据:true
log.info("写入数据:", lf.write(flash_device, erase_addr, data))
返回值
local write_ok=lf.write(flash, addr,data)
有一个返回值 write_ok
write_ok
含义说明:从指定位置开始写入指定数据是否成功;
成功时返回true,否则返回false
取值范围:true/false
注意事项:写入失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如返回true表示写入数据成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
-- 数据起始地址(示例值,需根据需求调整)
local addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.写入数据:true
log.info("写入数据:", lf.write(flash_device, addr, data))
4.7 lf.eraseWrite(flash, addr, data)
功能
先按照 flash block 大小进行擦除再往 flash 写数据
注意事项
data长度+addr 的结果不能超过 flash 的总容量。flash 擦除是 “整块擦除”,哪怕你只想擦除一小部分,也会实际擦除整个块,因此要提前规划擦除区域,避免误删其他数据。
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:-- 操作数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.先擦除再写入数据:true
log.info("先擦除再写入数据:", lf.eraseWrite(flash_device, erase_addr, data))
addr
参数含义:操作数据的起始地址
数据类型:number
取值范围:0-flash总大小
是否必选:必须传入此参数;
注意事项:data长度+addr 的结果不能超过 flash 的总容量.
注意块对齐,按照flash block的倍数取值,不同flash块大小不一样,比如常见的有4KB、32KB、64KB 等,
例如:块大小为 4KB 时,add 取值为 0、4096、8192… 这类能被 4096 整除的地址。
可以使用fs.fsstat获取flash的block size,具体参考[fs-api-4.2章节](https://docs.openluat.com/osapi/core/fs/#41-fsfsstatpath)
参数示例:-- 操作数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.先擦除再写入数据:true
log.info("先擦除再写入数据:", lf.eraseWrite(flash_device, erase_addr, data))
data
参数含义:待写入的数据
数据类型:string
取值范围:无特别要求
是否必选:必须传入此参数;
注意事项:data长度+addr 的结果不能超过 flash 的总容量.
参数示例:-- 操作数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.先擦除再写入数据:true
log.info("先擦除再写入数据:", lf.eraseWrite(flash_device, erase_addr, data))
返回值
local erwrite_ok=lf.eraseWrite(flash, addr, data)
有一个返回值 erwrite_ok
erwrite_ok
含义说明:判断从指定位置开始擦除并写入指定数据是否成功;
成功时返回true,否则返回false
数值类型:boolean
取值范围:true/false
注意事项:写入失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如true表示擦除成功
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
-- 操作数据起始地址(示例值,需根据需求调整)
local erase_addr = 4096
--待写入的数据(示例值,需根据需求调整)
local data = "testdata"
--log打印 I/user.先擦除再写入数据:true
log.info("先擦除再写入数据:", lf.eraseWrite(flash_device, erase_addr, data))
4.8 lf.getInfo(flash)
功能
获取 flash 容量和 page 大小
注意事项
“page” 指的是 Flash(闪存)的 “页”。
多个 page(页) 组成一个 block(块)
一个 block 包含的 page 数量 由芯片设计决定(比如 1 个 block 可能包含 16、32 甚至上百个 page)
- page 是 Flash “读写操作” 的最小单位(读 / 写数据时,必须以 “整页” 为单位);
- block 是 Flash “擦除操作” 的最小单位(擦除数据时,必须以 “整块” 为单位)
参数
flash
参数含义:flash设备对象,即lf.init()返回的数据结构
数据类型:userdata
取值范围:userdata类型的flash设备对象。
是否必选:必须传入此参数;
注意事项:暂无
参数示例:--log打印 I/user.获取flash 容量和page大小: 134217728 2048
log.info("获取 Flash 容量和page大小:", lf.getInfo(flash_device))
返回值
local get_flash,get_page =lf.getInfo(flash)
有两个返回值 get_flash 和 get_page
get_flash
含义说明:获取flash的总容量,单位是字节Byte;
成功时返回flash容量的值,比如128MB的flash,返回134217728,即128*4096*4096
数值类型:number,非负整数
取值范围:flash的总容量大小,单位是字节Byte
注意事项:获取失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如返回134217728表示flash总容量是134217728字节
get_page
含义说明:获取flash的page页大小,单位是字节Byte
成功时返回页大小的值,比如页大小是2KB,返回2048
数值类型:number,非负整数
取值范围:flash的page页大小,单位是字节Byte
注意事项:获取失败时,需做好对应逻辑处理,比如关闭SPI;
返回示例:例如返回2048表示flash的page页大小是2048字节
示例
--以对象方式设置并启用硬件SPI
spi_device = spi.deviceSetup(spi.SPI_0,CS_PIN ,0,0,8,2000000,spi.MSB,spi.master,spi.full)
--初始化 little_flash
local flash_device = lf.init(spi_device)
--log打印 I/user.Flash初始化结果: userdata: 0C149BDC
log.info("Flash初始化结果:", flash_device)
--log打印 I/user.获取flash 容量和page大小: 134217728 2048
log.info("获取 Flash 容量和page大小:", lf.getInfo(flash_device))
五、产品支持说明
支持 LuatOS 开发的所有产品都支持 lf 核心库, 但是每个型号不是所有固件都支持这个库,
具体参考 合宙资料中心 具体产品下固件和 demo 中的固件版本说明;
以 Air780EPM 为例,可以访问:https://docs.openluat.com/air780epm/luatos/firmware/version/
可以得知,Air780EPM ,仅 104 号固件支持 lf 核心库