跳转至

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块大小不一样,比如常见的有4KB32KB64KB 等,
         例如:块大小为 4KB 时,addr 取值为 040968192 这类能被 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 可以是 40968192…)。
         因为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块大小不一样,比如常见的有4KB32KB64KB 等,
         例如:块大小为 4KB 时,add 取值为 040968192 这类能被 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 核心库