Open MihaNN52 opened 2 years ago
To be honest i dont know, i didnt see anything like that.
maybe @tobozo
https://youtu.be/rH9Ssxi9uwI I made a video 1 first I put the card in a regular card reader and check that there are files on the card 2 I put a flash card in ESP32S2 and an empty card opens 3 I write files to a flash drive 4 turn off the microcontroller and turn it on again 5 is empty again.
The most interesting thing is that I get this result on three computers where I have the arduino IDE installed
hey @MihaNN52, in your video you do not seem to cleanly unmount the drive, and this may be the cause of the files disappearing.
FAT32 has two copies of its file allocation table, when restarting your ESP without unmounting only one of the copies is updated. As a security measure only the oldest considered by the OS until repaired.
You can try to repair the disk with chkdsk, if the previous errors has marked your partition as dirty it should restore the files.
More importantly: you should unmount the drive properly after every file creation/modification to prevent that from happening again.
The exact same problem can occur if your sketch writes to the SD card outside the scope of the MSC context while the SD card is mounted by windows.
https://youtu.be/0buvQBnvznE I try different drives but they all behave the same
In search of a malfunction, I connected a separate card to the contacts that are listed in the library.
Didn't give any effect.
whelp I could reproduce the issue, here's what it looks like when the SD card becomes corrupted:
After formatting the SD Card the files/folders I create on the SD are now persisting on the filesystem ... ish.
This is after uploading a 70MB file on the SD, and umounting/remounting from the OS without power-cycling the ESP.
Main file allocation table is corrupted, pressing reset on the ESP and remounting from the OS confirms the backup is fine, however it does not point to the data blocks anymore.
I'm now quite sure something is corrupting one of the two FAT every time it is modified, so I'd suggest to limit your sketch to readonly operations until a more stable combination of esp-idf and arduino framework is produced.
I believe it is due to OSs are not modifying FAT partition during operations on files, just keep it cached. It is finalized on device being unmounted. The MSC API works similar to PPPoS, it is only passing raw data between SD card and OS.
Maybe there is some way to handle it on esp32, but i dont know how.
I bought new cards and I do and dismantle every time I write files in windows. But the files also disappear. It has never happened that the halyards were preserved.
What flash cards do you use and how do you format them. What cluster size do you set?
Could you try MSC example from arduino-esp32 to confirm it is problem with library?
Installed an example of launching the USBMSC README file. When creating a new file from windows. The file is created but also disappears after I turn off and turn on the power.
@MihaNN52 the official example does not mount the SD, so the file isn't really saved and it's normal it disappears after a reset or power cycle.
@chegewara I've tried both the example from this repo and a the one from arduino sdk 2.0.2, the problem is not with your library.
Write Arduino ide version and kernel version. What manufacturer is your memory card and how is it formatted. There are no miracles in this business.
@MihaNN52 incomplete translation? I'm not sure what you mean but I'm using the latest arduino ide along with sdk 2.0.2, and using kingston or sandisk 4GB/16GB partitions
SDK 2.0.2 error C:\Users\Miha\Documents\Arduino\libraries\EspTinyUSB-master\src\host\common\usb_host.cpp: In member function 'bool USBhost::init(bool)': C:\Users\Miha\Documents\Arduino\libraries\EspTinyUSB-master\src\host\common\usb_host.cpp:68:31: error: 'const usb_host_client_config_t' has no non-static data member named 'client_event_callback' .max_num_event_msg = 5}; ^ exit status 1 Compilation error for board ESP32S2 Dev Module.
use this instead:
const usb_host_client_config_t client_config = {
//.is_synchronous = false,
.max_num_event_msg = 5,
.async = {
.client_event_callback = _client_event_callback,
.callback_arg = this
}
};
[edit] the full Init function I'm using:
bool USBhost::init(bool create_tasks)
{
const usb_host_config_t config = {
.intr_flags = ESP_INTR_FLAG_LEVEL1,
};
esp_err_t err = usb_host_install(&config);
ESP_LOGI("", "install status: %d", err);
const usb_host_client_config_t client_config = {
//.is_synchronous = false,
.max_num_event_msg = 5,
.async = {
.client_event_callback = _client_event_callback,
.callback_arg = this
}
};
err = usb_host_client_register(&client_config, &client_hdl);
ESP_LOGI("", "client register status: %d", err);
if (create_tasks)
{
xTaskCreate(client_async_seq_task, "async", 4 * 512, &client_hdl, 20, NULL);
}
return true;
}
The code has compiled. Thank you. I'm still experiencing the problem with the memory card. The fact is that Windows allows you to format a memory card in FAT32 format in 5 options. This is 8192 4096 64 32 14k and I would like to know which one you are using.
4GB is the safe spot, but smaller is better when experimenting.
Please note that sdk 2.0.2 needs some patching to fix some problems with SD library failing to mount the sd card.
Good afternoon. I have a problem)). I am using the example EspTinyUSB/examples/device/msc/sd_msc/ My board https://github.com/Xinyuan-LilyGO/LilyGo-esp32s2-base/blob/master/schematic/ESP32_S2(2021-1-16).pdf I use contacts
define SD_MISO 13
define SD_MOSI 11
define SD_SCK 12
define SD_CS 10
SD card 16GB FAT 32 class 10 Arduino 1.8.16 core esp 32- 2.0.1
The problem is that the flash card is displayed and I can write files to it at a speed of 500kb.s. BUT after I disconnect the device and connect it again, the files on the flash card disappear.
Tell me what I can do wrong. Thank you.