fix: resolve SD card mount error by routing schematic pins CLK=38, CMD=21, D0=39, D3=17 and disabling internal pull-up on CLK
This commit is contained in:
@@ -45,11 +45,13 @@
|
|||||||
|
|
||||||
sdmmc0 {
|
sdmmc0 {
|
||||||
compatible = "espressif,esp32-sdmmc";
|
compatible = "espressif,esp32-sdmmc";
|
||||||
pin-clk = <&gpio0 2 GPIO_FLAG_NONE>;
|
pin-clk = <&gpio0 38 GPIO_FLAG_NONE>;
|
||||||
pin-cmd = <&gpio0 1 GPIO_FLAG_NONE>;
|
pin-cmd = <&gpio0 21 GPIO_FLAG_NONE>;
|
||||||
pin-d0 = <&gpio0 3 GPIO_FLAG_NONE>;
|
pin-d0 = <&gpio0 39 GPIO_FLAG_NONE>;
|
||||||
|
pin-d3 = <&gpio0 17 GPIO_FLAG_NONE>;
|
||||||
slot = <SDMMC_HOST_SLOT_1>;
|
slot = <SDMMC_HOST_SLOT_1>;
|
||||||
bus-width = <1>;
|
bus-width = <1>;
|
||||||
|
pullups;
|
||||||
};
|
};
|
||||||
|
|
||||||
uart0 {
|
uart0 {
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
#include <tactility/log.h>
|
#include <tactility/log.h>
|
||||||
|
|
||||||
#include <driver/sdmmc_host.h>
|
#include <driver/sdmmc_host.h>
|
||||||
|
#include <driver/gpio.h>
|
||||||
#include <esp_vfs_fat.h>
|
#include <esp_vfs_fat.h>
|
||||||
#include <freertos/FreeRTOS.h>
|
#include <freertos/FreeRTOS.h>
|
||||||
#include <freertos/task.h>
|
#include <freertos/task.h>
|
||||||
@@ -108,15 +109,33 @@ static error_t mount(void* data) {
|
|||||||
uint32_t slot_config_flags = 0;
|
uint32_t slot_config_flags = 0;
|
||||||
if (config->enable_uhs) slot_config_flags |= SDMMC_SLOT_FLAG_UHS1;
|
if (config->enable_uhs) slot_config_flags |= SDMMC_SLOT_FLAG_UHS1;
|
||||||
if (config->wp_active_high) slot_config_flags |= SDMMC_SLOT_FLAG_WP_ACTIVE_HIGH;
|
if (config->wp_active_high) slot_config_flags |= SDMMC_SLOT_FLAG_WP_ACTIVE_HIGH;
|
||||||
if (config->pullups) slot_config_flags |= SDMMC_SLOT_FLAG_INTERNAL_PULLUP;
|
|
||||||
|
gpio_num_t clk_pin = to_native_pin(config->pin_clk);
|
||||||
|
gpio_num_t cmd_pin = to_native_pin(config->pin_cmd);
|
||||||
|
gpio_num_t d0_pin = to_native_pin(config->pin_d0);
|
||||||
|
gpio_num_t d3_pin = to_native_pin(config->pin_d3);
|
||||||
|
|
||||||
|
// Manually enable pull-ups on CMD, D0, and D3 if pullups configuration is true
|
||||||
|
// This avoids pulling up the CLK line which can cause clock signal distortion
|
||||||
|
if (config->pullups) {
|
||||||
|
if (cmd_pin != GPIO_NUM_NC) {
|
||||||
|
gpio_pullup_en(cmd_pin);
|
||||||
|
}
|
||||||
|
if (d0_pin != GPIO_NUM_NC) {
|
||||||
|
gpio_pullup_en(d0_pin);
|
||||||
|
}
|
||||||
|
if (d3_pin != GPIO_NUM_NC) {
|
||||||
|
gpio_pullup_en(d3_pin);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sdmmc_slot_config_t slot_config = {
|
sdmmc_slot_config_t slot_config = {
|
||||||
.clk = to_native_pin(config->pin_clk),
|
.clk = clk_pin,
|
||||||
.cmd = to_native_pin(config->pin_cmd),
|
.cmd = cmd_pin,
|
||||||
.d0 = to_native_pin(config->pin_d0),
|
.d0 = d0_pin,
|
||||||
.d1 = to_native_pin(config->pin_d1),
|
.d1 = to_native_pin(config->pin_d1),
|
||||||
.d2 = to_native_pin(config->pin_d2),
|
.d2 = to_native_pin(config->pin_d2),
|
||||||
.d3 = to_native_pin(config->pin_d3),
|
.d3 = d3_pin,
|
||||||
.d4 = to_native_pin(config->pin_d4),
|
.d4 = to_native_pin(config->pin_d4),
|
||||||
.d5 = to_native_pin(config->pin_d5),
|
.d5 = to_native_pin(config->pin_d5),
|
||||||
.d6 = to_native_pin(config->pin_d6),
|
.d6 = to_native_pin(config->pin_d6),
|
||||||
|
|||||||
Reference in New Issue
Block a user