Add Core1 refresh recovery and shared SPI arbitration

This commit is contained in:
Adolfo Reyna
2026-02-18 15:43:35 -05:00
parent ebc58d7e4d
commit 3e54466752
5 changed files with 188 additions and 32 deletions

View File

@@ -5,6 +5,7 @@
#include "sd_card.h"
#include "hardware/gpio.h"
#include "board_config.h"
#include "shared_spi_bus.h"
#include "ff.h" // FatFS
#include <string.h>
#include <stdio.h>
@@ -430,7 +431,10 @@ bool sd_card_init_with_board_config(void) {
uint sd_card_set_spi_speed(void) {
if (!g_config) return 0;
// SD file operations run with exclusive ownership of shared SPI bus.
shared_spi_bus_lock();
// Save current speed and set to SD card speed
uint current_speed = spi_get_baudrate(g_config->spi);
spi_set_baudrate(g_config->spi, 12500 * 1000); // 12.5 MHz for SD card
@@ -438,8 +442,18 @@ uint sd_card_set_spi_speed(void) {
}
void sd_card_restore_spi_speed(uint baudrate) {
if (!g_config || baudrate == 0) return;
spi_set_baudrate(g_config->spi, baudrate);
if (!g_config) {
shared_spi_bus_unlock();
return;
}
if (baudrate != 0) {
spi_set_baudrate(g_config->spi, baudrate);
}
// Leave SD deselected before releasing bus.
gpio_put(g_config->gpio_cs, 1);
shared_spi_bus_unlock();
}
bool sd_card_test_fatfs(void) {