Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed SDFileSystem
Revision 26:86476a8438cb, committed 2021-08-31
- Comitter:
- greenoaktree
- Date:
- Tue Aug 31 04:54:03 2021 +0000
- Parent:
- 25:444d09fee172
- Commit message:
- SDFileSytstem library does not work in Mbed6,this mbed version is ok.; greenoaktree
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon Aug 29 15:06:56 2016 +0000
+++ b/main.cpp Tue Aug 31 04:54:03 2021 +0000
@@ -1,41 +1,51 @@
#include "mbed.h"
#include "SDFileSystem.h"
+
+Serial pc(USBTX,USBRX);
+//SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd",NC,SWITCH_NONE,25000000);
+
+//使用Nucleo-L476RG 的 SPI2
+// mosi miso sclk cs
+SDFileSystem sd(PB_15, PB_14, PB_13, PB_12, "sd");
+//文档里说SDFileSystem 的最高频率就是1MHz,即构造函数的默认参数,这个需要确认一下
+
Timer timer;
-DigitalIn button(p21, PullUp);
-SDFileSystem sd(p5, p6, p7, p20, "sd", p22, SDFileSystem::SWITCH_NEG_NO, 25000000);
+DigitalIn button(PC_13, PullUp); //使用Nucleo-L476RG 的 User button 就在PC_13上
+
char buffer[4096];
+
void writeTest()
{
//Test write performance by creating a 1MB file
- printf("Testing %iB write performance...", sizeof(buffer));
+ pc.printf("Testing %iB write performance...", sizeof(buffer));
FileHandle* file = sd.open("Test File.bin", O_WRONLY | O_CREAT | O_TRUNC);
if (file != NULL) {
timer.start();
for (int i = 0; i < (1048576 / sizeof(buffer)); i++) {
if (file->write(buffer, sizeof(buffer)) != sizeof(buffer)) {
timer.stop();
- printf("write error!\n");
+ pc.printf("write error!\n");
timer.reset();
return;
}
}
timer.stop();
if (file->close())
- printf("failed to close file!\n");
+ pc.printf("failed to close file!\n");
else
- printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0));
+ pc.printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0));
timer.reset();
} else {
- printf("failed to create file!\n");
+ pc.printf("failed to create file!\n");
}
}
void readTest()
{
//Test read performance by reading the 1MB file created by writeTest()
- printf("Testing %iB read performance...", sizeof(buffer));
+ pc.printf("Testing %iB read performance...", sizeof(buffer));
FileHandle* file = sd.open("Test File.bin", O_RDONLY);
if (file != NULL) {
timer.start();
@@ -44,20 +54,20 @@
iterations++;
timer.stop();
if (iterations != (1048576 / sizeof(buffer)))
- printf("read error!\n");
+ pc.printf("read error!\n");
else if (file->close())
- printf("failed to close file!\n");
+ pc.printf("failed to close file!\n");
else if (sd.remove("Test File.bin"))
- printf("failed to delete file!\n");
+ pc.printf("failed to delete file!\n");
else
- printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0));
+ pc.printf("done!\n\tResult: %.2fKB/s\n", 1024 / (timer.read_us() / 1000000.0));
timer.reset();
} else {
- printf("failed to open file!\n");
+ pc.printf("failed to open file!\n");
}
}
-int main()
+int main1()
{
//Configure CRC, large frames, and write validation
sd.crc(true);
@@ -74,44 +84,52 @@
wait(0.5);
//Print the start message
- printf("\nPress the button to perform tests: ");
+ pc.printf("\nPress the button to perform tests: ");
//Wait for the button to be pressed
while(button);
//Make sure a card is present
if (!sd.card_present()) {
- printf("\nNo card present!\n");
+ pc.printf("\nNo card present!\n");
continue;
}
-
+
+ //挂载SD卡,失败,原因不明,但是即使不挂载,后续的读写文件操作也能正常进行
+/*
//Try to mount the SD card
printf("\nMounting SD card...");
if (sd.mount() != 0) {
- printf("failed!\n");
+ pc.printf("failed!\n");
continue;
}
- printf("success!\n");
-
+ pc.printf("success!\n");
+*/
+
+
+ //卡类型也不能识别,原因不明
//Display the card type
- printf("\tCard type: ");
+ pc.printf("\tCard type: ");
SDFileSystem::CardType cardType = sd.card_type();
if (cardType == SDFileSystem::CARD_NONE)
- printf("None\n");
+ pc.printf("None\n");
else if (cardType == SDFileSystem::CARD_MMC)
- printf("MMC\n");
+ pc.printf("MMC\n");
else if (cardType == SDFileSystem::CARD_SD)
- printf("SD\n");
+ pc.printf("SD\n");
else if (cardType == SDFileSystem::CARD_SDHC)
- printf("SDHC\n");
+ pc.printf("SDHC\n");
else
- printf("Unknown\n");
+ pc.printf("Unknown\n");
+ //卡的扇区数,容量也不能正确获取,原因不明
//Display the card capacity
- printf("\tSectors: %u\n", sd.disk_sectors());
- printf("\tCapacity: %.1fMB\n", sd.disk_sectors() / 2048.0);
+ pc.printf("\tSectors: %u\n", sd.disk_sectors());
+ pc.printf("\tCapacity: %.1fMB\n", sd.disk_sectors() / 2048.0);
- /*//Format the card
+
+ //格式化,但是格式化一个8G的盘我是没等到结束
+ /* //Format the card
printf("Formatting SD card...");
if (sd.format() != 0) {
printf("failed!\n");
@@ -119,6 +137,7 @@
}
printf("success!\n");*/
+ //读写测试,即使前面的挂载等操作不能正常运行,读写测试也可以正常运行
//Perform a read/write test
writeTest();
readTest();
@@ -127,3 +146,26 @@
sd.unmount();
}
}
+
+
+int main() {
+
+ pc.printf("SD card test!\r\n");
+
+ //建立文件夹
+ mkdir("/sd/mydir", 0777);
+
+ //追加方式打开或创建文件,写入数据
+ FILE *fp = fopen("/sd/1.txt", "a");
+ if(fp == NULL) {
+ pc.printf("Could not open file for write\r\n");
+ }
+ fprintf(fp, "Hello fun SD Card World!\r\n");
+ fclose(fp);
+ pc.printf("File successfully written and closed!\r\n");
+
+ //写测试
+ writeTest();
+ //读测试
+ readTest();
+}
\ No newline at end of file