Update develop. Ready for pre-release v0.4 #49
42
stm-firmware/include/reflow-controller/sd.h
Normal file
42
stm-firmware/include/reflow-controller/sd.h
Normal file
@ -0,0 +1,42 @@
|
||||
/* Reflow Oven Controller
|
||||
*
|
||||
* Copyright (C) 2022 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* This file is part of the Reflow Oven Controller Project.
|
||||
*
|
||||
* The reflow oven controller is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* GDSII-Converter is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with the reflow oven controller project.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#ifndef _SD_H_
|
||||
#define _SD_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
#include <fatfs/ff.h>
|
||||
|
||||
/**
|
||||
* @brief Mount the SD card if available and not already mounted
|
||||
* @param fs Filesystem to mount to.
|
||||
* @return true if mounted, false if an error occured or the SD is not inserted and cannot be mounted
|
||||
*/
|
||||
bool mount_sd_card_if_avail(FATFS *fs);
|
||||
|
||||
/**
|
||||
* @brief Return whether an SD card is inserted and mounted
|
||||
*
|
||||
* @return true SD inserted and mounted
|
||||
* @return false No SD inserted or not mounted
|
||||
*/
|
||||
bool sd_card_is_mounted(void);
|
||||
|
||||
#endif /* _SD_H_ */
|
@ -32,13 +32,13 @@
|
||||
#include <reflow-controller/systick.h>
|
||||
#include <reflow-controller/adc-meas.h>
|
||||
#include <reflow-controller/digio.h>
|
||||
#include "fatfs/shimatta_sdio_driver/shimatta_sdio.h"
|
||||
#include <stm-periph/stm32-gpio-macros.h>
|
||||
#include <stm-periph/rcc-manager.h>
|
||||
#include <stm-periph/uart.h>
|
||||
#include <reflow-controller/periph-config/shell-uart-config.h>
|
||||
#include <reflow-controller/oven-driver.h>
|
||||
#include <fatfs/ff.h>
|
||||
#include <reflow-controller/sd.h>
|
||||
#include <reflow-controller/ui/gui.h>
|
||||
#include <reflow-controller/ui/shell.h>
|
||||
#include <reflow-controller/ui/shell-uart.h>
|
||||
@ -88,40 +88,6 @@ static inline void uart_gpio_config(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Mount the SD card if available and not already mounted
|
||||
* @param mounted The current mounting state of the SD card
|
||||
* @return true if mounted, false if an error occured or the SD is not inserted and cannot be mounted
|
||||
*/
|
||||
static bool mount_sd_card_if_avail(bool mounted)
|
||||
{
|
||||
FRESULT res;
|
||||
static uint8_t IN_SECTION(.ccm.bss) inserted_counter = 0;
|
||||
|
||||
if (sdio_check_inserted() && mounted) {
|
||||
memset(fs_ptr, 0, sizeof(FATFS));
|
||||
sdio_stop_clk();
|
||||
inserted_counter = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!sdio_check_inserted() && inserted_counter < 255)
|
||||
inserted_counter++;
|
||||
|
||||
if (!sdio_check_inserted() && !mounted && inserted_counter > 4) {
|
||||
inserted_counter = 0;
|
||||
res = f_mount(fs_ptr, "0:/", 1);
|
||||
if (res == FR_OK) {
|
||||
led_set(1, 1);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return mounted;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Process the boot status structure in the safety (backup) RAM
|
||||
* Depending on the flags set there, this function will:
|
||||
@ -315,7 +281,7 @@ int main(void)
|
||||
if (systick_ticks_have_passed(quarter_sec_timestamp, 250)) {
|
||||
led_set(1u, 0);
|
||||
sd_old = sd_card_mounted;
|
||||
sd_card_mounted = mount_sd_card_if_avail(sd_card_mounted);
|
||||
sd_card_mounted = mount_sd_card_if_avail(fs_ptr);
|
||||
|
||||
if (sd_card_mounted && !sd_old) {
|
||||
adc_pt1000_get_resistance_calibration(NULL, NULL, &cal_active);
|
||||
|
62
stm-firmware/sd.c
Normal file
62
stm-firmware/sd.c
Normal file
@ -0,0 +1,62 @@
|
||||
/* Reflow Oven Controller
|
||||
*
|
||||
* Copyright (C) 2022 Mario Hüttel <mario.huettel@gmx.net>
|
||||
*
|
||||
* This file is part of the Reflow Oven Controller Project.
|
||||
*
|
||||
* The reflow oven controller is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* GDSII-Converter is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with the reflow oven controller project.
|
||||
* If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
#include <reflow-controller/sd.h>
|
||||
#include "fatfs/ff.h"
|
||||
#include "fatfs/shimatta_sdio_driver/shimatta_sdio.h"
|
||||
#include <stdint.h>
|
||||
#include <helper-macros/helper-macros.h>
|
||||
#include <reflow-controller/digio.h>
|
||||
|
||||
static bool sd_card_mounted_state = false;
|
||||
|
||||
bool mount_sd_card_if_avail(FATFS *fs)
|
||||
{
|
||||
FRESULT res;
|
||||
static uint8_t IN_SECTION(.ccm.bss) inserted_counter = 0;
|
||||
|
||||
if (sdio_check_inserted() && sd_card_mounted_state) {
|
||||
memset(fs, 0, sizeof(FATFS));
|
||||
sdio_stop_clk();
|
||||
inserted_counter = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!sdio_check_inserted() && inserted_counter < 255)
|
||||
inserted_counter++;
|
||||
|
||||
if (!sdio_check_inserted() && !sd_card_mounted_state && inserted_counter > 4) {
|
||||
inserted_counter = 0;
|
||||
res = f_mount(fs, "0:/", 1);
|
||||
if (res == FR_OK) {
|
||||
led_set(1, 1);
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return sd_card_mounted_state;
|
||||
}
|
||||
|
||||
bool sd_card_is_mounted(void)
|
||||
{
|
||||
return sd_card_mounted_state;
|
||||
}
|
Loading…
Reference in New Issue
Block a user