当前位置: 首页 > news >正文

扩大产品库存怎么破?手把手教你,全开源哦!

要在产品上扩大库存?!这太常见了,短视频时代,有大量东西要储存:视频、音频、文件等。

提到外扩,就不得不提到编写各种驱动,还有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,也无需修改代码,爽!


http://www.mrgr.cn/news/34753.html

相关文章:

  • JavaScript 是一种令人着迷但也充满争议的编程语言
  • 综合题第二题(路由器的配置)
  • PhpStudy —— README
  • 热斑黄斑光伏发电板 红外黄斑检测图像数据集内含最高温度信息 1200张,jpg格式。
  • 分库分表-分页排序查询
  • Golang | Leetcode Golang题解之第题432题全O(1)的数据结构
  • Golang | Leetcode Golang题解之第433题最小基因变化
  • GNU链接器(LD):LMA、VMA等链接脚本基本概念
  • Excel 获取某列不为空的值【INDEX函数 | SMALL函数或 LARGE函数 | ROW函数 | ISBLANK 函数】
  • 2024在线翻译工具横评:准确率、速度与易用性大比拼
  • Java | Leetcode Java题解之第433题最小基因变化
  • Python | Leetcode Python题解之第433题最小基因变化
  • scss知识汇总
  • JS数组随机取数
  • Java运算符
  • centos7 docker部署nacos
  • 公安局党建平台建设方案和必要性-———未来之窗行业应用跨平台架构
  • 【我的 PWN 学习手札】fastbin reverse into tcache —— tcache key 绕过
  • 使用GLib进行C语言编程的实例
  • typename、非类型模板参数、模板参数的特化、模板类成员函数声明和定义分离、继承等的介绍