【发布时间】:2019-11-07 13:21:12
【问题描述】:
我将 LFS 文件系统配置为 SPI 时钟速度 100 Mhz,当尝试连续写入 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);
}
}
【问题讨论】:
-
嗯。你能描述一下硬件环境吗?您使用的是哪种 NOR 闪存?
-
您是否尝试过将相同数量的数据直接写入您的 SPI 闪存而无需查看需要多长时间?
-
@Clonk,是的,我试过了,它是成功的,我填充了 2KB 的缓冲区并使用 LFS 文件系统写入,也成功了,但是给出上面的代码,我花了太多时间。跨度>
-
@SteveFriedl 控制 STM32H753BIT6 NOR:winbond.com/resource-files/…