开源 | 如何在产品上扩展大储存?合宙LuatOS外挂SPI Flash库轻松搞定
我们都知道芯片的储存都是寸土寸金的,当你的产品需要存储照片、音频、文档等资源的时候,有没有眉头一紧?内部不够只能外扩,但是外扩要编写各种驱动,还有Flash替换,这都要消耗头发啊!
但,当你使用合宙的LuatOS开发就全然不同了~
今天我们来介绍一下,LuatOS集成内部的一个开源SPI Flash通用驱动库——little_flash
它可以让你无需考虑不同Flash驱动差异,即可直接使用或者简单配置参数即可使用。无需再编写Flash驱动,真正的做到硬件随意更改Flash软件通用了。
特别说明:
本文档以Air780EP+LuatOS作为示例,但此驱动库为通用库不限制型号,所有型号都可使用,甚至你可以在你其他C开发产品上自行移植使用。
一、SPI Flash分类
SPI Flash主流一般分为:
NOR Flash和NAND Flash。
TF我们这里不算在内,严格的说它属于emmc,价格也高。
我们看下对比表:

这里就需要各位根据产品定义按需选择了。
二、实现原理
这里我们简单讲解一下实现原理,不感兴趣想直接使用的朋友,可以跳过直接看下一部分。
早期的Flash各个厂家指令不同,每家都要单独写驱动。
直到一个标准协议的出现:
SERIAL FLASH DISCOVERABLE PARAMETERS (SFDP) | JEDEC
详细介绍参见:
https://www.jedec.org/standards-documents/docs/jesd216b#
该协议规定了一个指令来读取Flash的所有参数,得益于它,目前市面上在产的NOR Flash基本都能直接驱动。
little_flash库就是支持了此协议,实现了NOR Flash的通用驱动。
接下来,我们说一下NAND Flash:
很可惜,虽然新版SFDP协议有描述NAND Flash,但是实际上大部分NAND Flash厂商都没有遵守。
市面上的NAND Flash一般是两种设计,一种是纯兼容NOR Flash指令,另一种是兼容部分NOR Flash指令,加一部分NAND Flash指令。
little_flash做了一套通用框架,只需要配置下产品几个指令和储存大小即可驱动NAND Flash,并且不支持SFDP协议的NOR Flash也可以通过配置参数方式进行支持。
三、相关准备工作

3.1 硬件准备
-
合宙Air780EP开发板一套,包括天线、SIM卡;
-
SPI Flash模块
-
杜邦线
-
USB线
-
PC电脑
3.2 软件准备
我们使用云编译方式编译一份固件,记得勾选little_flash库,其他功能按需选择。
云编译教程参考:
https://wiki.luatos.com/develop/compile/Cloud_compilation.html

四、API介绍
little_flash库API非常简单,只有两个:一个初始化,一个挂载。挂载到文件系统之后,就可以用语言的原生IO操作直接使用了。
4.1 lf.init(spi_device)
初始化little_flash,会自动探测flash并初始化。
参数:

返回值:

4.2 lf.mount(flash, mount_point, offset, maxsize)
挂载little_flash lfs文件系统。
参数:

返回值:

五、脚本代码
我们以Air780EP为例,下图是代码演示,并且做了相关注释。

六、效果演示
我们把固件和脚本烧录到开发板中,新朋友可参考相关教程。
LuatOS教程链接:
https://doc.openluat.com/wiki/26?wiki_page_id=3020

可以看到little_flash自动识别了NOR Flash,挂载成功后文件操作也都正常。
从此之后,告别SPI Flash驱动。
就算产品更换Flash,也无需修改代码,爽!
相关文章:
开源 | 如何在产品上扩展大储存?合宙LuatOS外挂SPI Flash库轻松搞定
我们都知道芯片的储存都是寸土寸金的,当你的产品需要存储照片、音频、文档等资源的时候,有没有眉头一紧?内部不够只能外扩,但是外扩要编写各种驱动,还有Flash替换,这都要消耗头发啊! 但&#x…...
20 基于STM32的温度、电流、电压检测proteus仿真系统(OLED、DHT11、继电器、电机)
目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STM32F103C8T6 采用DHT11读取温度、滑动变阻器模拟读取电流、电压。 通过OLED屏幕显示,设置电流阈值为80,电流小阈值为50,电压阈值为60,温度阈值…...
spring自定义属性编辑器
文章目录 spring自定义属性编辑器步骤 spring自定义属性编辑器 属性编辑器是用来解析bean的配置文件中的属性标签的,spring的BeanWrapperImpl默认会注册CustomCollectionEditor(集合)、CustomMapEditor(Map)、CurrencyEditor(货币)、ByteArrayPropertyEditor等&…...
在VMware16中安装Windows 10:完整教程
在VMware中安装Windows 10:完整教程 1.安装环境准备2.创建虚拟机 1.安装环境准备 1.虚拟机: VMware-workstation-full-16.2.2-19200509 2.系统镜像:win10 2.创建虚拟机 1.自定义 2.下一步 3.稍后安装系统 3.默认下一步 4.虚拟机取名和选择存放路径(按需更改…...
MATLAB系列09:图形句柄
MATLAB系列09:图形句柄 9. 图形句柄9.1 MATLAB图形系统9.2 对象句柄9.3 对象属性的检测和更改9.3.1 在创建对象时改变对象的属性9.3.2 对象创建后改变对象的属性 9.4 用 set 函数列出可能属性值9.5 自定义数据9.6 对象查找9.7 用鼠标选择对象9.8 位置和单位9.8.1 图…...
把设计模式用起来!(4) 用不好模式?之原理不明
(清华大学出版社 《把设计模式用起来》书稿试读) 上一篇:把设计模式用起来!(3)用不好模式?之时机不对 为什么用不好设计模式?——原理不明 难搞的顾客:“抹这种霜&#…...
安卓13去掉下拉菜单的Dump SysUI 堆的选项 android13删除Dump SysUI 堆
总纲 android13 rom 开发总纲说明 文章目录 1.前言2.问题分析3.代码分析3.1 位置13.2 位置24.代码修改5.编译6.彩蛋1.前言 客户需要去掉下拉菜单里面的Dump SysUI 堆图标,不让使用这个功能。 2.问题分析 android的下拉菜单在systemui里面,这里我们只需要定位到对应的添加代…...
vue3常用的组件间通信
一 props props 可以实现父子组件通信,props数据是只读。 1. 基本用法 在父组件中,你可以这样传递 props: <template><ChildComponent message"Hello, Vue 3!" /> </template><script setup> import C…...
Windows 查找特定进程的ID并杀死
"*分析用户信息.py*" 换为自己的文件名 Get-WmiObject Win32_Process | Where-Object { $_.CommandLine -like "*分析用户信息.py*" } 查找后 内容如下 __GENUS : 2 __CLASS : Win32_Process __SUPERCLASS …...
Snapchat API 访问:Objective-C 实现示例
Snapchat 是一个流行的社交媒体平台,它允许用户发送和接收短暂存在的图片和视频。对于开发者来说,访问 Snapchat API 可以为应用程序添加独特的社交功能。本文将介绍如何在 Objective-C 中实现对 Snapchat API 的访问,并提供一个详细的代码示…...
ps证件照蓝底换白底
ps证件照蓝底换白底 1、打开 Photoshop,导入需要处理的照片。 2、左侧工具栏中选择“魔棒工具”,点击证件照的背景区域进行选择。 3、使用快捷键 Shift F5 或者从顶部菜单选择“编辑” -> “填充”,在弹出的对话框中选择“填充内容”中…...
阿里云kafka消息写入topic失败
1. 问题现象描述 20240918,14:22,测试反馈说kafka有问题,生产者写入消息的时候报错,并发了一张日志截图,主要报错如下: to topic xxxx: org.apache.kafka.common.errors.TimeoutException: Expiring 1 record(s) for x…...
图像放大效果示例【JavaScript】
实现效果: 当鼠标悬停在小图(缩略图)上时,大图(预览图)会随之更新为相应的小图,并高亮当前悬浮的小图的父元素。 代码: 1. HTML部分 <!DOCTYPE html> <html lang"z…...
【C#生态园】云端之C#:全面解析6种云服务提供商的SDK
C#开发者必读:深度比较6种云服务SDK 前言 随着云计算技术的迅猛发展,越来越多的企业和开发者选择将应用程序部署到公共云平台上。针对C#开发者而言,各大云服务提供商纷纷推出了适用于C#的SDK,以便开发者能够更轻松地与其云服务进…...
远程升级又双叒叕失败?背后原因竟然是。。。
最近又遇到了远程升级接连失败的情况,耐心和信心都备受折磨! 事情是这样的:有客户反馈在乡村里频繁出现掉线的情况,不敢耽搁,赶紧联系小伙伴排查测试,最后发现,只有去年某一批模块在当下环境才…...
【测试】——Selenium API (万字详解)
📖 前言:本文详细介绍了如何利用Selenium进行Web自动化测试,包括定位元素(如cssSelector和xpath)、常用操作函数(如点击、输入等)、窗口管理、键盘鼠标事件和浏览器导航,以及处理弹窗…...
Redis:原理+项目实战——Redis实战3(Redis缓存最佳实践(问题解析+高级实现))
👨🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:Redis:原理项目实战——Redis实战2(Redis实现短信登录(原理剖析代码优化)&#x…...
刚刚,Stable Diffusion 2024升级,最强Ai绘画整合包、部署教程(解压即用)
2024Ai技术大爆发的元年 目前两款Ai神器大火 一款是大名鼎鼎的Chat GPT 另外一款—Stable Diffusion 堪称全球最强Ai绘画工具 Stable Diffusion Ai绘画2024版本更新啦! 从4.8.7更新至**4.9版本!**更新优化和大模型增加,无需安装…...
【AIGC】ChatGPT提示词助力高效文献处理、公文撰写、会议纪要与视频总结
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯高效英文文献阅读提示词使用方法 💯高效公文写作提示词使用方法 💯高效会议纪要提示词使用方法 💯高效视频内容分析提示词使用方法 &a…...
centos7更换国内下载源
📖centos7更换国内下载源 在CentOS 7上更换为国内源可以通过替换 /etc/yum.repos.d/CentOS-Base.repo文件来实现。以下是一些常用的国内源以及如何更换的示例: 阿里云源: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Bas…...
D3KeyHelper自动化操作技术手册:暗黑破坏神3智能执行解决方案
D3KeyHelper自动化操作技术手册:暗黑破坏神3智能执行解决方案 【免费下载链接】D3keyHelper D3KeyHelper是一个有图形界面,可自定义配置的暗黑3鼠标宏工具。 项目地址: https://gitcode.com/gh_mirrors/d3/D3keyHelper 在暗黑破坏神3的高强度游戏…...
N8N + Cherry Studio 本地大模型对接|全踩坑保姆级指南(Docker 版)
标签:#N8N #CherryStudio #本地大模型 #AI自动化 #避坑指南 摘要:本文完整记录 Docker 部署的 N8N 对接 Cherry Studio 本地中转服务,从网络连通、接口鉴权、节点选型、模型命名等多维度,整理所有报错原因与可直接复制的解决方案&…...
ARMv8内存访问指令STLUR与STLXP详解
1. ARMv8内存访问指令概述 在ARMv8架构中,内存访问指令构成了处理器与内存系统交互的基础设施。作为RISC架构的典型代表,ARMv8通过精简但功能明确的指令集实现了高效的内存操作。其中存储(Store)类指令负责将寄存器数据写入内存,而根据不同的…...
Windows 11系统优化终极指南:用Win11Debloat一键清理系统垃圾,提升电脑性能
Windows 11系统优化终极指南:用Win11Debloat一键清理系统垃圾,提升电脑性能 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various ot…...
比特币钱包密码恢复神器:如何用btcrecover找回遗忘的数字资产密码
比特币钱包密码恢复神器:如何用btcrecover找回遗忘的数字资产密码 【免费下载链接】btcrecover An open source Bitcoin wallet password and seed recovery tool designed for the case where you already know most of your password/seed, but need assistance i…...
思源宋体TTF:7种字重打造专业中文排版的全新体验
思源宋体TTF:7种字重打造专业中文排版的全新体验 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 还在为中文设计项目的字体选择头疼吗?今天我要分享一个让我工作…...
如何5分钟快速上手Mayo:新手入门完全教程
如何5分钟快速上手Mayo:新手入门完全教程 【免费下载链接】mayo 3D CAD viewer and converter based on Qt OpenCascade 项目地址: https://gitcode.com/gh_mirrors/ma/mayo Mayo是一款基于Qt和OpenCascade开发的免费开源3D CAD查看器和转换器,支…...
如何测量WIFI通讯中客户端的漫游时间
在工业WiFi通信中会有很多涉及漫游的场景,例如AGV车辆在整个车间内移动,车间范围内会布置多个AP来完成信号覆盖,AGV车辆运动过程中远离已连接AP,接近另一个AP时就会发生漫游,由于工业通讯协议对实时性要求很高…...
【职场】职场里,“被喜欢“和“被重用“是两件完全不同的事
职场里,"被喜欢"和"被重用"是两件完全不同的事我见过太多这样的人。 在公司里人缘极好,谁都说他靠谱,谁都愿意跟他合作。 开会时第一个帮人倒水,群里消息第一个回复,同事生日永远记得,…...
【职场】为什么越努力的人,在职场死得越惨?
为什么越努力的人,在职场死得越惨? ——没有人告诉你,努力本身是一种暴露。一、先说一个你亲眼见过,但从没想明白的现象 你身边一定有这样的人: 工作最拼的那个,最后被裁了。 加班最多的那个,升…...
