c++ - LittleFS 文件系统,NOR 闪存的文件写入问题
问题描述
我将 LFS 文件系统配置为 100 Mhz 的 SPI 时钟速度,当尝试连续写入 64 字节的结构值时,在 8 到 9 个结构数据之后,我的 NOR 闪存设备返回给我忙并允许写入。SPI 数据传输是连续不断地进行的。
因此,我更改了每次写入、文件打开和关闭的设计,在这种情况下,在某些行,我的文件关闭占用了我太多时间。要写入我的全部数据(2560 字节),我需要 27 秒,这是不可接受的。
// LFS Configuration
cfg.read_size = 256;
cfg.prog_size = 256;
cfg.block_size = 4096;
cfg.block_count = 4095;
cfg.lookahead_size = 256;
cfg.cache_size = 512;
void fileWriteSM(const char* filename) {
volatile uint32_t pos;
for(int i=0; i<TOTAL_LINE ;i++){
pos = lfs_file_write(&lfs, &fileInit, &syringeLib[i],
sizeof(syringeLib[i]));
}
}
void Logging_Task::run() // Function Definition
{
res = lfs_file_opencfg(&lfs, &fileInit, filenameInit, LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND, &bufconfInit);
fileWriteSM("filenameInit");
lfs_file_close(&lfs, &fileInit);
while(1);
}
// Changed Design, it takes 27 Sec
void fileWriteSM() {
volatile uint32_t pos;
for(int i=0; i<TOTAL_LINE ;i++){
pos = lfs_file_opencfg(&lfs, &fileInit, filenameInit,
LFS_O_WRONLY | LFS_O_CREAT | LFS_O_APPEND, &bufconfInit);
pos = lfs_file_write(&lfs, &fileInit, &syringeLib[i],
sizeof(syringeLib[i]));
lfs_file_close(&lfs, &fileInit);
}
}
解决方案
我在我的 SPI 驱动程序中添加了一些延迟。问题解决了。在接收到nor芯片的响应之前,尝试发送下一条命令提出了这样的问题。
推荐阅读
- jboss - Keycloak 缺少参数:client_id
- c++ - s.compare 成员函数在下面的 C++ 代码中如何表现?
- matlab - 我想为图像处理实现双树复小波变换(DTCWT)
- javascript - 将jquery中的简单分页转换为javascript代码
- java - 如何使用 JSOUP 提取 css 样式
- reactjs - 类型“EventTarget & HTMLSelectElement”上不存在属性“值”
- java - 当从数据库中获取数据时,只获取一行的第一个索引,我想要每一行的所有数据
- c - 是否可以在函数中获取由返回值初始化的变量的内存地址?
- python - 无法完成操作:Elasticsearch AWS 中的 create_index
- c# - 通过正则表达式将括号中的字典键替换为值