You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
105 lines
3.2 KiB
105 lines
3.2 KiB
1 year ago
|
#include <USBHost_t36.h>
|
||
|
|
||
|
// Setup USBHost_t36 and as many HUB ports as needed.
|
||
|
USBHost myusb;
|
||
|
USBHub hub1(myusb);
|
||
|
|
||
|
// Instances for one drive
|
||
|
USBDrive myDrive(myusb);
|
||
|
|
||
|
// Instances for accessing the files on the drive
|
||
|
USBFilesystem myFiles(myusb);
|
||
|
|
||
|
// Show USB drive information for the selected USB drive.
|
||
|
void printDriveInfo(USBDrive &drive) {
|
||
|
// Print USB drive information.
|
||
|
Serial.printf(F(" connected: %d\n"), drive.msDriveInfo.connected);
|
||
|
Serial.printf(F(" initialized: %d\n"), drive.msDriveInfo.initialized);
|
||
|
Serial.printf(F(" USB Vendor ID: %4.4x\n"), drive.msDriveInfo.idVendor);
|
||
|
Serial.printf(F(" USB Product ID: %4.4x\n"), drive.msDriveInfo.idProduct);
|
||
|
Serial.printf(F(" HUB Number: %d\n"), drive.msDriveInfo.hubNumber);
|
||
|
Serial.printf(F(" HUB Port: %d\n"), drive.msDriveInfo.hubPort);
|
||
|
Serial.printf(F(" Device Address: %d\n"), drive.msDriveInfo.deviceAddress);
|
||
|
Serial.printf(F("Removable Device: "));
|
||
|
if(drive.msDriveInfo.inquiry.Removable == 1) {
|
||
|
Serial.printf(F("YES\n"));
|
||
|
} else {
|
||
|
Serial.printf(F("NO\n"));
|
||
|
}
|
||
|
Serial.printf(F(" VendorID: %8.8s\n"), drive.msDriveInfo.inquiry.VendorID);
|
||
|
Serial.printf(F(" ProductID: %16.16s\n"), drive.msDriveInfo.inquiry.ProductID);
|
||
|
Serial.printf(F(" RevisionID: %4.4s\n"), drive.msDriveInfo.inquiry.RevisionID);
|
||
|
Serial.printf(F(" Version: %d\n"), drive.msDriveInfo.inquiry.Version);
|
||
|
Serial.printf(F(" Sector Count: %ld\n"), drive.msDriveInfo.capacity.Blocks);
|
||
|
Serial.printf(F(" Sector size: %ld\n"), drive.msDriveInfo.capacity.BlockSize);
|
||
|
uint64_t drivesize = drive.msDriveInfo.capacity.Blocks;
|
||
|
drivesize *= drive.msDriveInfo.capacity.BlockSize;
|
||
|
Serial.print(F(" Disk Capacity: "));
|
||
|
Serial.print(drivesize);
|
||
|
Serial.println(" Bytes");
|
||
|
drive.printPartionTable(Serial);
|
||
|
Serial.println();
|
||
|
}
|
||
|
|
||
|
// Show USB filesystem information
|
||
|
void printFilesystemInfo(USBFilesystem &fs) {
|
||
|
// print the type and size of the first FAT-type volume
|
||
|
char volname[32];
|
||
|
fs.mscfs.getVolumeLabel(volname, sizeof(volname));
|
||
|
Serial.print("Volume name: ");
|
||
|
Serial.println(volname);
|
||
|
Serial.print("Volume type: FAT");
|
||
|
Serial.println(fs.mscfs.fatType(), DEC);
|
||
|
Serial.print("Cluster Size: ");
|
||
|
Serial.print(fs.mscfs.bytesPerCluster());
|
||
|
Serial.println(" bytes");
|
||
|
Serial.print("Volume size: ");
|
||
|
Serial.print(fs.totalSize());
|
||
|
Serial.println(" bytes");
|
||
|
Serial.print(" Space used: ");
|
||
|
elapsedMillis ms = 0;
|
||
|
Serial.print(fs.usedSize());
|
||
|
Serial.print(" bytes (");
|
||
|
Serial.print(ms);
|
||
|
Serial.println(" ms to compute)");
|
||
|
Serial.println();
|
||
|
Serial.println("Files:");
|
||
|
fs.mscfs.ls(LS_R | LS_DATE | LS_SIZE);
|
||
|
Serial.println();
|
||
|
}
|
||
|
|
||
|
|
||
|
void setup()
|
||
|
{
|
||
|
Serial.begin(9600);
|
||
|
while (!Serial) {
|
||
|
; // wait for Arduino Serial Monitor to connect.
|
||
|
}
|
||
|
|
||
|
myusb.begin();
|
||
|
Serial.println("\nWaiting for Drive to initialize...");
|
||
|
|
||
|
// Wait for the drive to start.
|
||
|
while (!myFiles) {
|
||
|
myusb.Task();
|
||
|
}
|
||
|
|
||
|
Serial.printf("Device Info:\n");
|
||
|
printDriveInfo(myDrive);
|
||
|
|
||
|
elapsedMillis em;
|
||
|
while (!myFiles && (em < 1000)) {
|
||
|
myusb.Task();
|
||
|
}
|
||
|
if (myFiles) {
|
||
|
printFilesystemInfo(myFiles);
|
||
|
} else {
|
||
|
Serial.println("\n*** No Fat Filesystem Partitions found on drive **");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void loop(void) {
|
||
|
|
||
|
}
|