[已解决] esp32s3 spiffs读取文件错误

linshc
Posts: 59
Joined: Mon Feb 21, 2022 2:06 am

[已解决] esp32s3 spiffs读取文件错误

Postby linshc » Wed Aug 17, 2022 1:18 pm

我的应用想通过uart将bin文件传到spiffs进行保存(因为进行远程升级时,esp32s3没办法直接连外网。连外网的是另一个模块),但bin文件太大,我将它分割成好几份,等传输完成之后,再进行合并。本着这个思路,将bin文件替换成比较大的jpg图片,将图片分割成若干个子文件后,通过file_server例程将文件保存再spiffs文件系统中。flash是8M,我将其中2M分配到spiffs中。
然后开始编写测试文件时,同时以"wb"--->test.jpg和“rb”--->image_test.jpg.part0,打开了两个文件。IDF版本:4.4.1
问题:
此时,将image_test.jpg.part0的数据写入test.jpg文件时,大概率会发生写入错误的问题,是否因为spifss不支持同时读写?因为只读或只写一个文件时,是成功的,这点在使用file_server的上传和下载功能得到了验证。
以下为日志,附件为该测试功能的c文件和图片分包。请各位指点。

Code: Select all

I (1324) xmodem_ota: file_part_count:7
I (1334) xmodem_ota: ota_file_path[0]:/spiffs/image_test.jpg.part0
I (1344) xmodem_ota: ota_file_path[1]:/spiffs/image_test.jpg.part1
I (1354) xmodem_ota: ota_file_path[2]:/spiffs/image_test.jpg.part2
I (1354) xmodem_ota: ota_file_path[3]:/spiffs/image_test.jpg.part3
I (1364) xmodem_ota: ota_file_path[5]:/spiffs/image_test.jpg.part5
I (1364) xmodem_ota: ota_file_path[6]:/spiffs/image_test.jpg.part6
I (1404) xmodem_ota: ota_file_path[4]:/spiffs/image_test.jpg.part4
I (1404) xmodem_ota: entrypath:/spiffs/test.jpg ota merge...
E (5154) xmodem_ota: ota_file_path[0]:/spiffs/image_test.jpg.part0 fwrite error filesize:[8192] tmpsize:[0]
Attachments
split.rar
(1.21 MiB) Downloaded 669 times
Last edited by linshc on Thu Aug 25, 2022 3:31 am, edited 1 time in total.

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp32s3 spiffs读取文件错误

Postby ESP_Gargamel » Thu Aug 18, 2022 2:57 am

1、你可以把 spiffs 的 debug 功能打开,看是哪个环节的问题
2、fwrite 后出错的 log 里,把 errno 打印出来
示例最好是开箱即用的,和 blink 类似的 demo,直接编译烧录就可以复现的那种。

linshc
Posts: 59
Joined: Mon Feb 21, 2022 2:06 am

Re: esp32s3 spiffs读取文件错误

Postby linshc » Thu Aug 18, 2022 6:36 am

1.我打开了spiffs的debug功能,但是没看到日志有相关信息
2.errno是指使用ferror打印出来的返回值吗?

Code: Select all

I (935) file_server: file_part_count:7
I (945) file_server: ota_file_path[0]:/spiffs/image_test.jpg.part0
I (945) file_server: ota_file_path[1]:/spiffs/image_test.jpg.part1
I (955) file_server: ota_file_path[2]:/spiffs/image_test.jpg.part2
I (955) file_server: ota_file_path[3]:/spiffs/image_test.jpg.part3
I (965) file_server: ota_file_path[4]:/spiffs/image_test.jpg.part4
I (975) file_server: ota_file_path[5]:/spiffs/image_test.jpg.part5
I (975) file_server: ota_file_path[6]:/spiffs/image_test.jpg.part6
I (1035) file_server: entrypath:/spiffs/test.jpg ota merge...
E (33785) file_server: ota_file_path[5]:/spiffs/image_test.jpg.part5 fwrite error filesize:[8192] tmpsize:[0] errno:[1]
3.这个合并的功能并不是100%成功,有的时候会失败,我将bin文件放在了附件中,使用工具下载完,即可使用。所用的芯片为esp32s3r2.
Attachments
bin.rar
(1.03 MiB) Downloaded 429 times

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp32s3 spiffs读取文件错误

Postby ESP_Gargamel » Thu Aug 18, 2022 7:35 am

每个 image_test.jpg.partx 多大?test.jpg 多大?你给 spiffs 分 3MB试一下。

linshc
Posts: 59
Joined: Mon Feb 21, 2022 2:06 am

Re: esp32s3 spiffs读取文件错误

Postby linshc » Thu Aug 18, 2022 9:04 am

每个 image_test.jpg.partx为100K,最后一包为20K test.jpg为620K。将spiffs分区更改为3M后,前6次都能成功,第7次后出现了失败,之后怎么试都是失败的。出现错误时,能读到分包的数据,但在写入test.jpg时,返回值为0.
如果test.jpg存在时,我再以“wb”的方式往里写。是会先擦除spiffs分区中存储test.jpg的数据,还是再开辟一个空间,等写完后,再擦除原来的空间?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp32s3 spiffs读取文件错误

Postby ESP_Gargamel » Thu Aug 18, 2022 9:29 am

脏块太多了,没地方写了。不会擦掉,只会找可写的地方写。可能是 spiffs 本身的问题。
你可以再试用一下 littlefs,https://github.com/joltwallet/esp_littlefs

linshc
Posts: 59
Joined: Mon Feb 21, 2022 2:06 am

Re: esp32s3 spiffs读取文件错误

Postby linshc » Thu Aug 18, 2022 9:38 am

好的,我尝试一下。

linshc
Posts: 59
Joined: Mon Feb 21, 2022 2:06 am

Re: esp32s3 spiffs读取文件错误

Postby linshc » Thu Aug 25, 2022 3:21 am

将文件系统切换为littlefs后,没有再出现上述的情况。另外再请问一下,littlefs是否有spiffsgen.py类似的工具,能直接制作bin文件,烧入到文件系统分区?

ESP_Gargamel
Posts: 786
Joined: Wed Nov 14, 2018 8:45 am

Re: esp32s3 spiffs读取文件错误

Postby ESP_Gargamel » Thu Aug 25, 2022 3:28 am

esp_littlefs 仓库里带了 mklittlefs,这个就是工具。
参看 https://github.com/joltwallet/esp_littl ... er/example 示例,编译的时候就自动把 flash_data 目录生成为一个 fs 的 bin 了。

linshc
Posts: 59
Joined: Mon Feb 21, 2022 2:06 am

Re: esp32s3 spiffs读取文件错误

Postby linshc » Thu Aug 25, 2022 3:31 am

好的,感谢!

Who is online

Users browsing this forum: No registered users and 25 guests