-
Notifications
You must be signed in to change notification settings - Fork 0
/
sdcard.cpp
91 lines (82 loc) · 2.31 KB
/
sdcard.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <SdFat.h>
#include <M5Unified.h>
#include <M5GFX.h>
#include <string>
#include "logging.hpp"
using namespace std;
#ifdef ARDUINO_M5STACK_CORES3
#define TFCARD_CS_PIN 4
#define SPI_CLOCK 40000000L
#endif
#ifdef ARDUINO_M5STACK_Core2
#define TFCARD_CS_PIN 4
#define SPI_CLOCK 25000000L
#endif
#ifdef ARDUINO_M5STACK_Paper
#define TFCARD_CS_PIN 4
#define SPI_CLOCK 25000000L
#endif
SdFs sd;
#define display M5.Display
void describeCard(SdFs &sdfs) {
LOG_INFO("SD card mounted successfully");
LOG_INFO("card size: %.0f GB", sd.card()->sectorCount() * 512E-9);
switch (sdfs.card()->type()) {
case SD_CARD_TYPE_SD1:
LOG_INFO("Card type: SD1");
break;
case SD_CARD_TYPE_SD2:
LOG_INFO("Card type: SD2");
break;
case SD_CARD_TYPE_SDHC:
LOG_INFO("Card type: SDHC/SDXC");
break;
default:
LOG_INFO("Card type unknown");
break;
}
switch (sdfs.fatType()) {
case FAT_TYPE_EXFAT:
LOG_INFO("FS type: exFat");
break;
case FAT_TYPE_FAT32:
LOG_INFO("FS type: FAT32");
break;
case FAT_TYPE_FAT16:
LOG_INFO("FS type: FAT16");
break;
case FAT_TYPE_FAT12:
LOG_INFO("FS type: FAT12");
break;
}
cid_t cid;
if (!sdfs.card()->readCID(&cid)) {
LOG_ERROR("readCID failed");
return;
}
LOG_INFO("Manufacturer ID: 0x%x", int(cid.mid));
LOG_INFO("OEM ID: 0x%x 0x%x", cid.oid[0], cid.oid[1]);
LOG_INFO("Product: '%s'", string(cid.pnm, sizeof(cid.pnm)).c_str());
LOG_INFO("Revision: %d.%d", cid.prvN(), cid.prvM());
LOG_INFO("Serial number: %lu", cid.psn());
LOG_INFO("Manufacturing date: %d/%d", cid.mdtMonth(), cid.mdtYear());
}
bool init_sd_card(void) {
int retry = 3;
bool mounted{};
while(retry-- && !(mounted = sd.begin((unsigned)TFCARD_CS_PIN, SD_SCK_MHZ(25))) ) {
delay(100);
}
if(!mounted) {
M5_LOGE("Failed to mount 0x%x", sd.sdErrorCode());
display.startWrite();
display.clear(TFT_RED);
display.endWrite();
return false;
}
display.startWrite();
display.clear(TFT_GREEN);
display.endWrite();
describeCard(sd);
return true;
}