Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

sd mmc init faild #439

Closed
niuhuan opened this issue Jun 24, 2024 · 5 comments
Closed

sd mmc init faild #439

niuhuan opened this issue Jun 24, 2024 · 5 comments

Comments

@niuhuan
Copy link

niuhuan commented Jun 24, 2024

I am truly certain that my hardware is not faulty, and I can use the tf card normally with other firmware.

I have checked the correctness of the PINs, but still cannot read the tfcard

image

My code is copy lot of https://github.com/esp-rs/esp-idf-svc/blob/master/examples/sd_mmc.rs

    use esp_idf_svc::{
        fs::{Fat, FatConfiguration},
        hal::{
            gpio::{self, AnyIOPin},
            prelude::*,
        },
        sd::{host::SdHost, mmc::SlotConfiguration, SdConfiguration},
    };
    use std::{fs::File, io::Write};

    let slot = SlotConfiguration::new(
        pins.gpio16,
        pins.gpio12,
        pins.gpio14,
        Some(pins.gpio17),
        Some(pins.gpio21),
        Some(pins.gpio18),
        Option::<gpio::Gpio16>::None,
        Option::<gpio::Gpio17>::None,
        Option::<gpio::Gpio15>::None,
        Option::<gpio::Gpio18>::None,
        Option::<AnyIOPin>::None,
        Option::<AnyIOPin>::None,
    );

    log::info!("INIT MMC");

    let host_config = SdConfiguration::new();

    let host = SdHost::new_with_mmc(&host_config, slot);

    let fat_config = FatConfiguration::new();

    let _fat = Fat::mount(fat_config, host, "/")?;

    let mut  read = fs::read_dir("/")?;
    while let Some(entry) = read.next() {
        let entry = entry?;
        let path = entry.path();
        log::info!("File: {:?}", path);
    }

    let mut file = File::create("/test.txt")?;

    file.write_all(b"Hello, world!")?;
I (434) cpu_start: cpu freq: 160000000 Hz
I (435) cpu_start: Application information:
I (437) cpu_start: Project name:     libespidf
I (443) cpu_start: App version:      1
I (447) cpu_start: Compile time:     Jun 23 2024 21:51:15
I (453) cpu_start: ELF file SHA256:  0000000000000000...
I (459) cpu_start: ESP-IDF:          v5.1.3
I (464) cpu_start: Min chip rev:     v0.0
I (469) cpu_start: Max chip rev:     v0.99
I (473) cpu_start: Chip rev:         v0.2
I (478) heap_init: Initializing. RAM available for dynamic allocation:
I (485) heap_init: At 3FC9F3F8 len 0004A318 (296 KiB): DRAM
I (492) heap_init: At 3FCE9710 len 00005724 (21 KiB): STACK/DRAM
I (498) heap_init: At 3FCF0000 len 00008000 (32 KiB): DRAM
I (504) heap_init: At 600FE010 len 00001FD8 (7 KiB): RTCRAM
I (512) spi_flash: detected chip: winbond
I (515) spi_flash: flash io: dio
W (520) timer_group: legacy driver is deprecated, please migrate to `driver/gptimer.h`
I (528) sleep: Configure to isolate all GPIO pins in sleep state
I (535) sleep: Enable automatic switching of GPIO sleep configuration
I (542) app_start: Starting scheduler on CPU0
I (547) app_start: Starting scheduler on CPU1
I (547) main_task: Started on CPU0
I (557) main_task: Calling app_main()
I (567) myesp: MCU STARTED!
I (587) myesp::mmc_controller: INIT MMC
I (587) gpio: GPIO[12]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (587) gpio: GPIO[16]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (597) gpio: GPIO[14]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (607) gpio: GPIO[17]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (617) gpio: GPIO[21]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (627) gpio: GPIO[18]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
E (657) vfs_fat_sdmmc: sdmmc_card_init failed (0x107).
I (657) esp_idf_svc::nvs: NvsDefault dropped
I (657) esp_idf_svc::eventloop: System event loop dropped
Error: ESP_ERR_TIMEOUT
I (657) main_task: Returned from app_main()

@niuhuan
Copy link
Author

niuhuan commented Jun 24, 2024

this code has been panic at let _fat = Fat::mount(fat_configuration, host, "/")?;


    let pins = peripherals.pins;
    let spi3 = peripherals.spi3;
    let device = esp_idf_svc::hal::spi::SpiDriver::new(
        spi3,
        pins.gpio12,
        pins.gpio14,
        Some(pins.gpio16),
        &esp_idf_svc::hal::spi::config::DriverConfig::default(),
    )?;
    let sd_device = esp_idf_svc::sd::spi::SpiDevice::new(
        device,
        pins.gpio18,
        Option::<esp_idf_svc::hal::gpio::AnyInputPin>::None,
        Option::<esp_idf_svc::hal::gpio::AnyInputPin>::None,
        Option::<esp_idf_svc::hal::gpio::AnyInputPin>::None,
    );
    let host_config = SdConfiguration::new();
    let host = SdHost::new_with_spi(&host_config, sd_device);
    let fat_configuration = FatConfiguration::new();
    let _fat = Fat::mount(fat_configuration, host, "/")?;
    let mut file = File::create("/test.txt")?;
    file.write_all(b"Hello, world!")?;

I (548) main_task: Started on CPU0
I (558) main_task: Calling app_main()
I (568) myesp: MCU STARTED!
I (588) myesp::mmc_controller: INIT MMC
I (588) gpio: GPIO[18]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
E (618) vfs_fat_sdmmc: sdmmc_card_init failed (0x107).
I (618) gpio: GPIO[18]| InputEn: 1| OutputEn: 0| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (618) gpio: GPIO[14]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
I (628) gpio: GPIO[16]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0
I (638) gpio: GPIO[12]| InputEn: 0| OutputEn: 0| OpenDrain: 0| Pullup: 1| Pulldown: 0| Intr:0 
thread 'main' panicked at D:\Developments\Runtimes\.cargo\registry\src\index.crates.io-6f17d22bba15001f\esp-idf-hal-0.44.0\src\spi.rs:482:52:
called `Result::unwrap()` on an `Err` value: ESP_ERR_INVALID_STATE (error code 259)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

abort() was called at PC 0x4202f1da on core 0
0x4202f1da - panic_abort::__rust_start_panic::abort
    at D:\Developments\Runtimes\.rustup\toolchains\esp\lib\rustlib\src\rust\library\panic_abort\src\lib.rs:48

@niuhuan
Copy link
Author

niuhuan commented Jun 24, 2024

panic on this unwrap

impl<'d> Drop for SpiDriver<'d> {
    fn drop(&mut self) {
        esp!(unsafe { spi_bus_free(self.host()) }).unwrap();
    }
}

@AlixANNERAUD
Copy link
Contributor

AlixANNERAUD commented Jul 9, 2024

Hello,
Sorry for the delay, I am currently traveling.
I just made a fix for the SD SPI part, I invite you to try with my branch that fixes the encountered bugs. Here is the hardware configuration I used. If this is okay with you, I will continue with the SD MMC part.

@matt-agius
Copy link

I was having the same issue. Your branch fixed it.

Using:

  • esp32s3
  • SD SPI Device: ATOM TF-CARD

@Vollbrecht
Copy link
Collaborator

closing since esp-rs/esp-idf-hal#457 landed. If you still got problems please report back.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Archived in project
Development

No branches or pull requests

4 participants