mirror of
https://github.com/0xFEEDC0DE64/arduino-esp32.git
synced 2025-07-29 10:17:15 +02:00
SDMMC frequency selection based on board type (#5688)
* SDMMC frequency selection based on board type On Olimex ESP32 EVB I/O operations with SD card can cause error when LAN is used in same time. Problem is disappearing if SD MMC frequency lower down from SDMMC_FREQ_HIGHSPEED to SDMMC_FREQ_DEFAULT. No problem if WiFi used instead LAN. * Code rewritten according to https://github.com/espressif/arduino-esp32/pull/5688#pullrequestreview-759359645
This commit is contained in:
committed by
GitHub
parent
67583e84d6
commit
93f10609f4
@ -36,7 +36,7 @@ SDMMCFS::SDMMCFS(FSImplPtr impl)
|
|||||||
: FS(impl), _card(NULL)
|
: FS(impl), _card(NULL)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
bool SDMMCFS::begin(const char * mountpoint, bool mode1bit, bool format_if_mount_failed)
|
bool SDMMCFS::begin(const char * mountpoint, bool mode1bit, bool format_if_mount_failed, int sdmmc_frequency)
|
||||||
{
|
{
|
||||||
if(_card) {
|
if(_card) {
|
||||||
return true;
|
return true;
|
||||||
@ -46,7 +46,7 @@ bool SDMMCFS::begin(const char * mountpoint, bool mode1bit, bool format_if_mount
|
|||||||
sdmmc_host_t host;
|
sdmmc_host_t host;
|
||||||
host.flags = SDMMC_HOST_FLAG_4BIT;
|
host.flags = SDMMC_HOST_FLAG_4BIT;
|
||||||
host.slot = SDMMC_HOST_SLOT_1;
|
host.slot = SDMMC_HOST_SLOT_1;
|
||||||
host.max_freq_khz = SDMMC_FREQ_HIGHSPEED;
|
host.max_freq_khz = sdmmc_frequency;
|
||||||
host.io_voltage = 3.3f;
|
host.io_voltage = 3.3f;
|
||||||
host.init = &sdmmc_host_init;
|
host.init = &sdmmc_host_init;
|
||||||
host.set_bus_width = &sdmmc_host_set_bus_width;
|
host.set_bus_width = &sdmmc_host_set_bus_width;
|
||||||
|
@ -21,6 +21,13 @@
|
|||||||
#include "driver/sdmmc_types.h"
|
#include "driver/sdmmc_types.h"
|
||||||
#include "sd_defines.h"
|
#include "sd_defines.h"
|
||||||
|
|
||||||
|
// If reading/writing to the SD card is unstable,
|
||||||
|
// you can define BOARD_MAX_SDMMC_FREQ with lower value (Ex. SDMMC_FREQ_DEFAULT)
|
||||||
|
// in pins_arduino.h for your board variant.
|
||||||
|
#ifndef BOARD_MAX_SDMMC_FREQ
|
||||||
|
#define BOARD_MAX_SDMMC_FREQ SDMMC_FREQ_HIGHSPEED
|
||||||
|
#endif
|
||||||
|
|
||||||
namespace fs
|
namespace fs
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -31,7 +38,7 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
SDMMCFS(FSImplPtr impl);
|
SDMMCFS(FSImplPtr impl);
|
||||||
bool begin(const char * mountpoint="/sdcard", bool mode1bit=false, bool format_if_mount_failed=false);
|
bool begin(const char * mountpoint="/sdcard", bool mode1bit=false, bool format_if_mount_failed=false, int sdmmc_frequency=BOARD_MAX_SDMMC_FREQ);
|
||||||
void end();
|
void end();
|
||||||
sdcard_type_t cardType();
|
sdcard_type_t cardType();
|
||||||
uint64_t cardSize();
|
uint64_t cardSize();
|
||||||
|
@ -29,5 +29,6 @@ static const uint8_t MISO = 15;
|
|||||||
static const uint8_t SCK = 14;
|
static const uint8_t SCK = 14;
|
||||||
|
|
||||||
#define BOARD_HAS_1BIT_SDMMC
|
#define BOARD_HAS_1BIT_SDMMC
|
||||||
|
#define BOARD_MAX_SDMMC_FREQ SDMMC_FREQ_DEFAULT
|
||||||
|
|
||||||
#endif /* Pins_Arduino_h */
|
#endif /* Pins_Arduino_h */
|
||||||
|
Reference in New Issue
Block a user