SPI Flash Circular Buffer

2025-12-11 0 140

SPI Flash Circular Buffer

c库将物理SPI闪烁转换为任意数量的逻辑圆形缓冲区SFCB和SPI核心之间的接口被实现为共享内存

特征

  • 任意SPI闪存支持,可在编译时间通过-D选择
  • 单个SPI闪光灯中的任意数量的圆形缓冲液队列( CBID
  • 圆形缓冲区与SPI接口之间的相互作用已实现为共享内存
  • 文件系统( LittleFSpiffs )免费

发行

版本 日期 来源 更改日志
最新的 最新zip

操作方法

克隆

git clone --recursive https://gi*thu*b*.com/andkae/SPI-Flash-Circular-Buffer.git

建造

Makefile通过单元测试构建存储库:

$ make
gcc -c -O -Wall -Wextra -Wconversion -I . -I ../ -DW25Q16JV ./test/sfcb_test.c -o ./test/sfcb_test.o
gcc -c -O -Wall -Wextra -Wconversion -I . -I ../ -DW25Q16JV -DSFCB_PRINTF_EN ./spi_flash_cb.c -o ./test/sfcb.o
gcc -c -O -Wall -Wextra -Wconversion -I . -I ../ -DW25Q16JV  ./test/spi_flash_model/spi_flash_model.c -o ./test/spi_flash_model.o
gcc ./test/sfcb_test.o ./test/sfcb.o ./test/spi_flash_model.o -Wall -Wextra -I. -lm -o ./test/sfcb_test

图书馆部分本身可以建立:

gcc -c -O -Wall -Wextra -Wconversion -I . -DW25Q16JV -Werror ./spi_flash_cb.c -o ./test/sfcb.o

闪存W25Q16JV是通过Compile Switch -D选择的。

例子

测试

运行单元测试呼叫:

$ ./test/sfcb_test

API

init

初始化SFCB通用句柄并分配内存。

 int sfcb_init ( t_sfcb * self , void * cb , uint8_t cbLen , void * spi , uint16_t spiLen );

参数:

arg 描述
自己 SFCB存储元素
CB 圆形缓冲列队内存
cblen 最大限度。 CB队列的数量
spi SFCB / SPI核心交换缓冲区
斯皮伦 字节中的SPI缓冲尺寸

返回:

退出代码

新队列

在SPI Flash中创建一个新的逻辑独立的圆形缓冲区队列。

 int sfcb_new_cb ( t_sfcb * self , uint32_t magicNum , uint16_t elemSizeByte , uint16_t numElems , uint8_t * cbID );

参数:

arg 描述
自己 SFCB存储元素
魔术 魔术数字,在同一SPI闪光灯上的每个队列都必须是唯一的
Elemsizebyte 有效载荷大小,字节,标头/页脚原因
数字 队列中所需元素的数量最少,舍入到下一个整个部门
CBID 分配给此队列的ID ,所有其他请求所需的

返回:

退出代码

忙碌的

检查SFCB是否正在处理另一个请求。

 int sfcb_busy ( t_sfcb * self );

参数:

arg 描述
自己 SFCB存储元素

返回:

退出代码

错误

在最后一个请求中以错误结束。

 int sfcb_isero ( t_sfcb * self );

参数:

arg 描述
自己 SFCB存储元素

返回:

退出代码

建造

从SPI Flash获取所有队列信息。致电SFCB_ADD以更新所有管理信息后所需。

 int sfcb_mkcb ( t_sfcb * self );

参数:

arg 描述
自己 SFCB存储元素

返回:

退出代码

添加(附加)

将字节附加到当前选定的圆形缓冲器队列元件上。

 int sfcb_add ( t_sfcb * self , uint8_t cbID , void * data , uint16_t len );

参数:

arg 描述
自己 SFCB存储元素
CBID 圆形缓冲液相互作用
*数据 指针写数据
*数据中的字节数

返回:

退出代码

添加完成

在圆形缓冲区队列元件中,如果不是所有可用的字节,请写下页脚页脚用于检测元素的完整写作。一般建议是每次完成队列元素写作时都会致电sfcb_add_done

 int sfcb_add_done ( t_sfcb * self , uint8_t cbID );

参数:

arg 描述
自己 SFCB存储元素
CBID 圆形缓冲液相互作用

返回:

退出代码

获得有效载荷偏移

获取当前的书面字节数以排队元素。启用多阶段数据对象写入循环缓冲元素。

 uint16_t sfcb_get_pl_wrcnt ( t_sfcb * self , uint8_t cbID );

参数:

arg 描述
自己 SFCB存储元素
CBID 圆形缓冲液相互作用

返回:

编写队列元素的字节数。

最后

阅读最后一个书面的队列元素。

 int sfcb_get_last ( t_sfcb * self , uint8_t cbID , void * data , uint16_t len , uint32_t * elemID );

参数:

arg 描述
自己 SFCB存储元素
CBID 圆形缓冲液相互作用
*数据 指针读取数据
*数据中的字节数
*Elemid 队列元素号

返回:

退出代码

Flash Raw Read

从Flash读取的原始数据。

 int sfcb_flash_read ( t_sfcb * self , uint32_t adr , void * data , uint16_t len );

参数:

arg 描述
自己 SFCB存储元素
ADR SPI闪存地址
*数据 指针读取数据
*数据中的字节数

返回:

退出代码

工人

服务循环缓冲层请求以及SPI数据包处理。此功能应在基于时间的问题中调用。 SPI数据包传输应使用基于ISR的数据流。

 void sfcb_worker ( t_sfcb * self );

参数:

arg 描述
自己 SFCB存储元素

返回:

没有任何。

SPI数据包大小

sfcb_worker创建了字节中的SPI数据包大小。

 uint16_t sfcb_spi_len ( t_sfcb * self );

参数:

arg 描述
自己 SFCB存储元素

返回:

SPI数据包的字节数。

闪光大小

获取SFCB编译的Flash类型总尺寸。

 uint32_t sfcb_flash_size ( void );

返回:

大小为字节。

最高队列元素编号

获得最高元素的圆形缓冲液队列CBID

 uint32_t sfcb_idmax ( t_sfcb * self , uint8_t cbID );

参数:

arg 描述
自己 SFCB存储元素
CBID 圆形缓冲液相互作用

返回:

最高元素号。

返回:退出代码

价值 描述
sfcb_ok 公认
sfcb_e_no_flash 未选择闪存类型,使用-D
sfcb_e_mem sfcb_init中分配的记忆不足
sfcb_e_flash_full 闪存容量超过了
sfcb_e_wkr_bsy sfcb_worker很忙,等等
sfcb_e_no_cb_q 圆形缓冲列cbID不存在
sfcb_e_wkr_req 循环缓冲区管理数据未为请求准备,运行sfcb_mkcb
sfcb_e_cb_q_mty 队列中没有有效的条目

内存组织

SFCB支持任意数量的圆形缓冲液队列。每个圆形缓冲区始于最低的自由SPI闪存地址。闪存体系结构需要一个专用的数据清除 – 所谓的sector擦除。通过这种限制,必须至少分配两个部门。否则,第一个书面元素的覆盖将导致完整的循环缓冲列表覆盖,而无需保留任何以前的条目。每个新的条目都标有增量最高的32位IDNUMMagicNumMagicNum确保检测到占据的圆形缓冲液队列元件。

240个字节有效载荷和32个元素(=两个扇区)的模范内存组织显示以下图:

参考

  • W25Q16JV
  • 西门子开源宣言

下载源码

通过命令行克隆项目:

git clone https://github.com/andkae/SPI-Flash-Circular-Buffer.git

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

申明:本文由第三方发布,内容仅代表作者观点,与本网站无关。对本文以及其中全部或者部分内容的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。本网发布或转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其描述,也不代表本网对其真实性负责。

左子网 建站资源 SPI Flash Circular Buffer https://www.zuozi.net/35311.html

react cassette player
上一篇: react cassette player
FontAwesomeKit.Swift
下一篇: FontAwesomeKit.Swift
常见问题
  • 1、自动:拍下后,点击(下载)链接即可下载;2、手动:拍下后,联系卖家发放即可或者联系官方找开发者发货。
查看详情
  • 1、源码默认交易周期:手动发货商品为1-3天,并且用户付款金额将会进入平台担保直到交易完成或者3-7天即可发放,如遇纠纷无限期延长收款金额直至纠纷解决或者退款!;
查看详情
  • 1、描述:源码描述(含标题)与实际源码不一致的(例:货不对板); 2、演示:有演示站时,与实际源码小于95%一致的(但描述中有”不保证完全一样、有变化的可能性”类似显著声明的除外); 3、发货:不发货可无理由退款; 4、安装:免费提供安装服务的源码但卖家不履行的; 5、收费:价格虚标,额外收取其他费用的(但描述中有显著声明或双方交易前有商定的除外); 6、其他:如质量方面的硬性常规问题BUG等。 注:经核实符合上述任一,均支持退款,但卖家予以积极解决问题则除外。
查看详情
  • 1、左子会对双方交易的过程及交易商品的快照进行永久存档,以确保交易的真实、有效、安全! 2、左子无法对如“永久包更新”、“永久技术支持”等类似交易之后的商家承诺做担保,请买家自行鉴别; 3、在源码同时有网站演示与图片演示,且站演与图演不一致时,默认按图演作为纠纷评判依据(特别声明或有商定除外); 4、在没有”无任何正当退款依据”的前提下,商品写有”一旦售出,概不支持退款”等类似的声明,视为无效声明; 5、在未拍下前,双方在QQ上所商定的交易内容,亦可成为纠纷评判依据(商定与描述冲突时,商定为准); 6、因聊天记录可作为纠纷评判依据,故双方联系时,只与对方在左子上所留的QQ、手机号沟通,以防对方不承认自我承诺。 7、虽然交易产生纠纷的几率很小,但一定要保留如聊天记录、手机短信等这样的重要信息,以防产生纠纷时便于左子介入快速处理。
查看详情

相关文章

猜你喜欢
发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务