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: BSP_DISCO_F746NG
Dependents: DISCO-F746NG_BLOCK_DEVICE_SDCARD DISCO-F746NG_BLOCK_DEVICE_WITH_FAT_FILESYSTEM_ON_SDCARD SDReaderTest
You are viewing an older revision! See the latest version
Homepage
Block device class for creating a block device to access a SD/MMC card via SD/MMC interface on DISCO_F746NG development board. This block device API provides an interface for access to block-based storage. You can use a block device to back a full file system or write to it directly. More about Block Devices
Simple example how to use the block device
#include "mbed.h"
#include "BD_SD_DISCO_F746NG.h"
DigitalOut led (LED1);
// Instantiate the Block Device for sd card on DISCO-F746NG
BD_SD_DISCO_F746NG bd;
uint8_t block[512] = "Hello World!\n";
int
main () {
Serial pc (SERIAL_TX, SERIAL_RX);
pc.baud (115200);
printf ("Start\n");
// Call the BD_SD_DISCO_F746NG instance initialisation method.
printf ("sd card init...\n");
if (0 != bd.init ()) {
printf ("Init failed \n");
return -1;
}
printf ("sd size: %llu\n", bd.size ());
printf ("sd read size: %llu\n", bd.get_read_size ());
printf ("sd program size: %llu\n", bd.get_program_size ());
printf ("sd erase size: %llu\n\n", bd.get_erase_size ());
printf ("sd erase...\n");
if (0 != bd.erase (0, bd.get_erase_size ())) {
printf ("Error Erasing block \n");
}
// Write some the data block to the device
printf ("sd write: %s\n", block);
if (0 == bd.program (block, 0, 512)) {
// read the data block from the device
printf ("sd read: ");
if (0 == bd.read (block, 0, 512)) {
// print the contents of the block
printf ("%s", block);
}
}
// Call the BD_SD_DISCO_F746NG instance de-initialisation method.
printf ("sd card deinit...\n");
if (0 != bd.deinit ()) {
printf ("Deinit failed \n");
return -1;
}
// Blink led with 2 Hz
while (true) {
led = !led;
wait (0.5);
}
}
Simple example how to use the block device to create a file on a FAT file system
/* Example file of using SD/MMC Block device Library for MBED-OS
* Copyright 2017 Roy Krikke
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
#include "mbed.h"
#include "FATFileSystem.h"
#include "SDBlockDeviceDISCOF746NG.h"
#include <stdio.h>
#include <errno.h>
DigitalOut led (LED1);
// Instantiate the Block Device for sd card on DISCO-F746NG
SDBlockDeviceDISCOF746NG bd;
FATFileSystem fs ("fs");
void
return_error (int ret_val)
{
if(ret_val)
printf ("Failure. %d\r\n", ret_val);
else
printf ("done.\r\n");
}
void
errno_error (void* ret_val)
{
if(ret_val == NULL)
printf (" Failure. %d \r\n", errno);
else
printf (" done.\r\n");
}
int
main ()
{
Serial pc (SERIAL_TX, SERIAL_RX);
pc.baud(115200);
printf("Start\n");
int error = 0;
printf("Welcome to the filesystem example.\r\n"
"Formatting a FAT, RAM-backed filesystem. ");
error = FATFileSystem::format(&bd);
return_error(error);
printf("Mounting the filesystem on \"/fs\". ");
error = fs.mount(&bd);
return_error(error);
printf("Opening a new file, numbers.txt.");
FILE* fd = fopen("/fs/numbers.txt", "w");
errno_error(fd);
for (int i = 0; i < 20; i++) {
printf("Writing decimal numbers to a file (%d/20)\r", i);
fprintf(fd, "%d\r\n", i);
}
printf("Writing decimal numbers to a file (20/20) done.\r\n");
printf("Closing file.");
fclose(fd);
printf(" done.\r\n");
printf("Re-opening file read-only.");
fd = fopen("/fs/numbers.txt", "r");
errno_error(fd);
printf("Dumping file to screen.\r\n");
char buff[16] = { 0 };
while(!feof (fd)) {
int size = fread(&buff[0], 1, 15, fd);
fwrite(&buff[0], 1, size, stdout);
}
printf("EOF.\r\n");
printf("Closing file.");
fclose(fd);
printf(" done.\r\n");
printf("Opening root directory.");
DIR* dir = opendir("/fs/");
errno_error(fd);
struct dirent* de;
printf("Printing all filenames:\r\n");
while((de = readdir (dir)) != NULL) {
printf(" %s\r\n", &(de->d_name)[0]);
}
printf("Closeing root directory. ");
error = closedir(dir);
return_error(error);
printf("Filesystem Demo complete.\r\n");
// Blink led with 2 Hz
while(true) {
led = !led;
wait (0.5);
}
}