hi there. i want to use ESP32S as Mass Storage device and modified example code. code compiled with no error but Windows 10 says "insert disk".
ESP32S3 Dev Module Selected
USB-Mode -> USB OTG (tiny USB)
USB CDC Disabled
Firmware Enabled
Can you help me?
#ifndef ARDUINO_USB_MODE
#error This ESP32 SoC has no Native USB interface
#elif ARDUINO_USB_MODE == 1
#warning This sketch should be used when USB is in OTG mode
void setup() {}
void loop() {}
#else
#include "Arduino.h"
#include "USB.h"
#include "USBMSC.h"
#include "FFat.h"
USBMSC usb_msc; // USB Mass Storage nesnesi
static void onUSBChange(void *arg, esp_event_base_t event_base, int32_t event_id, void *event_data) {
if (event_base == ARDUINO_USB_EVENTS) {
arduino_usb_event_data_t *data = (arduino_usb_event_data_t *)event_data;
switch (event_id) {
case ARDUINO_USB_STARTED_EVENT: Serial.println("USB PLUGGED"); break;
case ARDUINO_USB_STOPPED_EVENT: Serial.println("USB UNPLUGGED"); break;
case ARDUINO_USB_SUSPEND_EVENT: Serial.printf("USB SUSPENDED: remote_wakeup_en: %u\n", data->suspend.remote_wakeup_en); break;
case ARDUINO_USB_RESUME_EVENT: Serial.println("USB RESUMED"); break;
default: break;
}
}
}
static bool onStartStop(uint8_t power_condition, bool start, bool load_eject) {
Serial.printf("MSC START/STOP: power: %u, start: %u, eject: %u\n", power_condition, start, load_eject);
return true;
}
static int32_t onWrite(uint32_t lba, uint32_t offset, uint8_t *buffer, uint32_t bufsize) {
Serial.printf("MSC WRITE: lba: %lu, offset: %lu, bufsize: %lu\n", lba, offset, bufsize);
File file = FFat.open("/mscfile");
if (file) {
file.seek(lba * 512 + offset);
file.write(buffer, bufsize);
file.close();
} else {
Serial.println("Failed to open file for writing");
return -1;
}
Serial.printf("MSC WRITE: lba: %lu, offset: %lu, bufsize: %lu\n", lba, offset, bufsize);
return bufsize;
}
static int32_t onRead(uint32_t lba, uint32_t offset, void *buffer, uint32_t bufsize) {
Serial.printf("MSC READ: lba: %lu, offset: %lu, bufsize: %lu\n", lba, offset, bufsize);
File file = FFat.open("/mscfile");
if (file) {
file.seek(lba * 512 + offset);
file.read((uint8_t*)buffer, bufsize);
file.close();
} else {
Serial.println("Failed to open file for reading");
return -1;
}
Serial.printf("MSC READ: lba: %lu, offset: %lu, bufsize: %lu\n", lba, offset, bufsize);
return bufsize;
}
void setup() {
Serial.begin(115200);
if (!FFat.begin(true)) { // true = format if needed
Serial.println("FFat cannot be started!");
return;
}
Serial.println("FFat started!");
if (!FFat.format()) {
Serial.println("formatted");
return;
}
else {
Serial.println("NOT formatted ");
}
Serial.print("fat size ");
Serial.println(FFat.totalBytes());
Serial.print("usable ");
Serial.println(FFat.freeBytes());
File file = FFat.open("/mscfile", FILE_WRITE);
if (file) {
file.close();
Serial.println("mscfile created.");
} else {
Serial.println("mscfile cannot be created!");
return;
}
// USB Mass Storage başlatma
usb_msc.vendorID("ESP32"); //max 8 chars
usb_msc.productID("USB_MSC"); //max 16 chars
usb_msc.productRevision("1.0"); //max 4 chars
usb_msc.onStartStop(onStartStop);
usb_msc.onRead(onRead);
usb_msc.onWrite(onWrite);
Serial.println("written!");
usb_msc.mediaPresent(true);
usb_msc.isWritable(true); // true if writable, false if read-only
usb_msc.begin(32, 512); // Root dizinini paylaş
USB.onEvent(onUSBChange); // USB bağlantı durumunu takip et
USB.begin();
Serial.println("USB MSC started!");
}
void loop() {
}
#endif