Make SD-card work

This commit is contained in:
Tobias Gunkel
2025-08-20 01:26:12 +02:00
parent f7c5959b0a
commit 66c521fcc0
53 changed files with 721 additions and 28938 deletions
+50
View File
@@ -0,0 +1,50 @@
#if ENABLE_USB_STORAGE_DEVICE
#include <Adafruit_TinyUSB.h>
#include "card_loader.h"
static Adafruit_USBD_MSC usb_msc;
// Callback invoked when received READ10 command.
static int32_t msc_read_cb (uint32_t lba, void* buffer, uint32_t bufsize) {
auto scope = UseSDPinFunctionScope();
bool rc = sd.card()->readSectors(lba, (uint8_t*) buffer, bufsize/512);
return rc ? bufsize : -1;
}
// Callback invoked when received WRITE10 command.
static int32_t msc_write_cb (uint32_t lba, uint8_t* buffer, uint32_t bufsize) {
auto scope = UseSDPinFunctionScope();
bool rc = sd.card()->writeSectors(lba, buffer, bufsize/512);
return rc ? bufsize : -1;
}
// Callback invoked when WRITE10 command is completed (status received and accepted by host).
static void msc_flush_cb (void) {
auto scope = UseSDPinFunctionScope();
sd.card()->syncDevice();
}
void initUsbStorageDevice() {
usb_msc.setID("GB", "SD Card", "1.0");
usb_msc.setReadWriteCallback(msc_read_cb, msc_write_cb, msc_flush_cb);
usb_msc.setUnitReady(false);
usb_msc.begin();
if (TinyUSBDevice.mounted()) {
TinyUSBDevice.detach();
delay(10);
TinyUSBDevice.attach();
}
auto scope = UseSDPinFunctionScope();
uint32_t block_count = sd.card()->sectorCount();
usb_msc.setCapacity(block_count, 512);
usb_msc.setUnitReady(true);
}
#endif