diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index c7922630..d1db2eda 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -7,6 +7,7 @@ }, "runArgs": [ + "--device=/dev/ttyACM0", "--privileged" ], @@ -35,4 +36,4 @@ "IDF_PATH": "/opt/esp/idf", "PATH": "/opt/esp/idf/tools:${env:PATH}" } -} +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 0e7edddb..7c08a3e6 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,6 @@ sdkconfig.old solaris-v1/sdkconfig settings.json /solaris-v1/sdkconfig -.espidf/ \ No newline at end of file +.espidf/ +*.cache* +launch.json \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json index 18234174..8de04d19 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -8,8 +8,8 @@ "program": "${workspaceFolder}/solaris-v1/build/solaris-v1.elf", "cwd": "${workspaceFolder}/solaris-v1", "MIMode": "gdb", - "miDebuggerPath": "/opt/esp/tools/xtensa-esp-elf-gdb/16.2_20250324/xtensa-esp-elf-gdb/bin/xtensa-esp32s3-elf-gdb", - "miDebuggerServerAddress": "192.168.20.236:3333", + "miDebuggerPath": "/home/user/.espressif/tools/xtensa-esp-elf-gdb/16.3_20250913/xtensa-esp-elf-gdb/bin/xtensa-esp32s3-elf-gdb", + "miDebuggerServerAddress": "192.168.20.236:3334", "externalConsole": false, "stopAtEntry": true, "preLaunchTask": "gdb-prepare", diff --git a/solaris-v1/components/pressure_sensor_driver/bmp390.c b/solaris-v1/components/pressure_sensor_driver/bmp390.c index 96356a55..a9ab2367 100644 --- a/solaris-v1/components/pressure_sensor_driver/bmp390.c +++ b/solaris-v1/components/pressure_sensor_driver/bmp390.c @@ -4,6 +4,7 @@ #include "core/returntypes.h" #include "spi.h" #include "task.h" +#include "spp_log.h" static const char* TAG = "BMP390"; spp_uint8_t id, ifc; @@ -81,7 +82,7 @@ retval_t bmp390_soft_reset(void *p_spi) }; retval_t ret = SPP_HAL_SPI_Transmit(p_spi, buf, (spp_uint8_t)sizeof(buf)); - //vTaskDelay(pdMS_TO_TICKS(100)); + SPP_OSAL_TaskDelay(pdMS_TO_TICKS(100)); return ret; } @@ -101,7 +102,7 @@ retval_t bmp390_enable_spi_mode(void *p_spi) }; retval_t ret = SPP_HAL_SPI_Transmit(p_spi, buf, (spp_uint8_t)sizeof(buf)); - //vTaskDelay(pdMS_TO_TICKS(100)); + SPP_OSAL_TaskDelay(pdMS_TO_TICKS(100)); return ret; } @@ -114,13 +115,29 @@ retval_t bmp390_enable_spi_mode(void *p_spi) */ retval_t bmp390_config_check(void *p_spi) { - spp_uint8_t buf[4] = + spp_uint8_t buf[9] = { - (spp_uint8_t)(READ_OP | BMP390_IF_CONF_REG), EMPTY_MESSAGE, - (spp_uint8_t)(READ_OP | BMP390_SOFT_RESET_REG), EMPTY_MESSAGE + (spp_uint8_t)(READ_OP | BMP390_IF_CONF_REG), EMPTY_MESSAGE, EMPTY_MESSAGE, + (spp_uint8_t)(READ_OP | BMP390_SOFT_RESET_REG), EMPTY_MESSAGE, EMPTY_MESSAGE, + (spp_uint8_t)(READ_OP | BMP390_CHIP_ID_REG), EMPTY_MESSAGE, EMPTY_MESSAGE }; + + retval_t ret; + ret = SPP_HAL_SPI_Transmit(p_spi, buf, (spp_uint8_t)sizeof(buf)); + + if (ret != SPP_OK) { + return ret; + } + + SPP_LOGI(TAG, "ID: 0x%02X", buf[8]); + - return SPP_HAL_SPI_Transmit(p_spi, buf, (spp_uint8_t)sizeof(buf)); + if (buf[8] != 0x60) { + SPP_LOGE(TAG, "BMP390 not detected! Expected ID: 0x%02X, Read ID: 0x%02X", 0x60, buf[5]); + return SPP_ERROR; + } + + return ret; } /** @@ -137,9 +154,12 @@ retval_t bmp390_aux_config(void *p_spi) if (ret != SPP_OK) return ret; ret = bmp390_enable_spi_mode(p_spi); - if (ret != SPP_OK) return ret; + if (ret != SPP_OK) return ret; - return bmp390_config_check(p_spi); + ret = bmp390_config_check(p_spi); + if (ret != SPP_OK) return ret; + + return ret; } //--------------------PREPARE READ--------------------------- diff --git a/solaris-v1/components/spp_port_wrapper/CMakeLists.txt b/solaris-v1/components/spp_port_wrapper/CMakeLists.txt index ac326c8d..2442af0d 100644 --- a/solaris-v1/components/spp_port_wrapper/CMakeLists.txt +++ b/solaris-v1/components/spp_port_wrapper/CMakeLists.txt @@ -42,5 +42,5 @@ list(REMOVE_DUPLICATES SPP_EXT_INCLUDE_DIRS) idf_component_register( SRCS ${SPP_EXT_SOURCES} INCLUDE_DIRS ${SPP_EXT_INCLUDE_DIRS} - REQUIRES spp_wrapper esp_driver_spi esp_driver_gpio esp_driver_sdspi fatfs fatfs + REQUIRES spp_wrapper esp_driver_spi esp_driver_gpio esp_driver_sdspi fatfs fatfs freertos ) diff --git a/solaris-v1/components/spp_wrapper/CMakeLists.txt b/solaris-v1/components/spp_wrapper/CMakeLists.txt index 0bd3c3c9..30ddec03 100644 --- a/solaris-v1/components/spp_wrapper/CMakeLists.txt +++ b/solaris-v1/components/spp_wrapper/CMakeLists.txt @@ -40,7 +40,10 @@ endif() # --------------------------------------------------------- # Solo .c directamente en external/spp (sin recursión) -file(GLOB SPP_EXT_SOURCES "${SPP_ROOT}/*.c") +file(GLOB_RECURSE SPP_EXT_SOURCES + "${SPP_ROOT}/*.c" +) + # No cogemos ni external/spp/hal/*.c # ni external/spp/osal/*.c diff --git a/solaris-v1/external/spp b/solaris-v1/external/spp index d461a489..ed1f09e0 160000 --- a/solaris-v1/external/spp +++ b/solaris-v1/external/spp @@ -1 +1 @@ -Subproject commit d461a489492e9a077416df909e472d2c1d8e7b60 +Subproject commit ed1f09e0bf5943778b73f125d1eafd6651ac3585 diff --git a/solaris-v1/external/spp-ports b/solaris-v1/external/spp-ports index 10b63610..2bd09208 160000 --- a/solaris-v1/external/spp-ports +++ b/solaris-v1/external/spp-ports @@ -1 +1 @@ -Subproject commit 10b63610f4fe644b52061c0e49849baa810e4000 +Subproject commit 2bd09208fba1d3d2c99249afdb2c6a443a8048a3 diff --git a/solaris-v1/main/main.c b/solaris-v1/main/main.c index 0dc50248..dfd28387 100644 --- a/solaris-v1/main/main.c +++ b/solaris-v1/main/main.c @@ -1,73 +1,60 @@ -#include "freertos/FreeRTOS.h" -#include "freertos/task.h" - -#include "core/returntypes.h" +#include "storage.h" #include "spi.h" -#include "bmp390.h" - -#include "gpio_int.h" -#include "driver/gpio.h" +#include "macros_esp.h" +#include "spp_log.h" +#include "osal/task.h" -static bmp_data_t s_bmp; +#include +#include -static void bmp_init_task(void *arg) -{ - BmpInit(arg); -} +#define TAG "MAIN" void app_main(void) { + SPP_OSAL_TaskDelay(2000); retval_t ret; - // Step 1: Initialize SPI Bus + // 1) SPI Bus Init ret = SPP_HAL_SPI_BusInit(); - if (ret != SPP_OK) while (1) {} - - // Step 2: Initialize ICM SPI Device - void *p_spi_icm = SPP_HAL_SPI_GetHandler(); - ret = SPP_HAL_SPI_DeviceInit(p_spi_icm); - if (ret != SPP_OK) while (1) {} - - // Step 3: Initialize BMP SPI Device - void *p_spi_bmp = SPP_HAL_SPI_GetHandler(); - ret = SPP_HAL_SPI_DeviceInit(p_spi_bmp); - if (ret != SPP_OK) while (1) {} - - // Step 4: Assign SPI Handler to BMP Structure - s_bmp.p_handler_spi = p_spi_bmp; - - // Step 5: Configure BMP390 Auxiliary Settings - ret = bmp390_aux_config(p_spi_bmp); - if (ret != SPP_OK) while (1) {} - - // Step 6: Prepare BMP390 Measurement - ret = bmp390_prepare_measure(p_spi_bmp); - if (ret != SPP_OK) while (1) {} + if (ret != SPP_OK) { + SPP_LOGE(TAG, "SPI Bus Init failed"); + } - // Step 7: Configure Control Register - { - spp_uint8_t buf[2] = { (spp_uint8_t)0x19u, (spp_uint8_t)(1u << 6) }; - ret = SPP_HAL_SPI_Transmit(p_spi_bmp, buf, (spp_uint8_t)sizeof(buf)); - if (ret != SPP_OK) while (1) {} + // 2) Config + static SPP_Storage_InitCfg sd_cfg = { + .base_path = "/sdcard", + .spi_host_id = USED_HOST, + .pin_cs = CS_PIN_SDC, + .max_files = 5, + .allocation_unit_size = 16 * 1024, + .format_if_mount_failed = false + }; + + // 3) Mount + ret = SPP_HAL_Storage_Mount((void*)&sd_cfg); + if (ret != SPP_OK) { + SPP_LOGE(TAG, "Storage Mount failed"); } - // Step 8: Configure Interrupt Pin Settings - s_bmp.int_pin = (spp_uint32_t)INT_GPIO; - s_bmp.int_intr_type = (spp_uint32_t)GPIO_INTR_POSEDGE; - s_bmp.int_pull = 0; + // 4) Write Test + FILE* f = fopen("/sdcard/test.txt", "w"); + if (f == NULL) { + (void)SPP_HAL_Storage_Unmount((void*)&sd_cfg); + SPP_LOGE(TAG, "Failed to open file for writing"); + } - // Step 9: Create BMP Initialization Task - xTaskCreate(bmp_init_task, "bmp_init", BMP_INIT_TASK_STACK_SIZE, &s_bmp, BMP_INIT_PRIO, NULL); + const char* msg = "hola sd\n"; + size_t wr = fwrite(msg, 1, strlen(msg), f); + fclose(f); - vTaskDelay(pdMS_TO_TICKS(100)); + if (wr != strlen(msg)) { + (void)SPP_HAL_Storage_Unmount((void*)&sd_cfg); + SPP_LOGE(TAG, "Failed to write to file"); + } - // Step 10: Read Altitude Measurement - float altitude = 0.0f; - ret = bmp390_get_altitude(p_spi_bmp, &s_bmp, &altitude); + // 5) Unmount + ret = SPP_HAL_Storage_Unmount((void*)&sd_cfg); if (ret != SPP_OK) { - while (1) {} + SPP_LOGE(TAG, "Storage Unmount failed"); } - - vTaskDelay(pdMS_TO_TICKS(50)); - } \ No newline at end of file diff --git a/solaris-v1/sdkconfig b/solaris-v1/sdkconfig index fa287dfe..eea4ceaf 100644 --- a/solaris-v1/sdkconfig +++ b/solaris-v1/sdkconfig @@ -1248,6 +1248,7 @@ CONFIG_ESP_SYSTEM_PANIC_PRINT_REBOOT=y # CONFIG_ESP_SYSTEM_PANIC_SILENT_REBOOT is not set # CONFIG_ESP_SYSTEM_PANIC_GDBSTUB is not set CONFIG_ESP_SYSTEM_PANIC_REBOOT_DELAY_SECONDS=0 +CONFIG_ESP_SYSTEM_SINGLE_CORE_MODE=y CONFIG_ESP_SYSTEM_RTC_FAST_MEM_AS_HEAP_DEPCHECK=y CONFIG_ESP_SYSTEM_ALLOW_RTC_FAST_MEM_AS_HEAP=y @@ -1262,7 +1263,6 @@ CONFIG_ESP_SYSTEM_EVENT_QUEUE_SIZE=32 CONFIG_ESP_SYSTEM_EVENT_TASK_STACK_SIZE=2304 CONFIG_ESP_MAIN_TASK_STACK_SIZE=3584 CONFIG_ESP_MAIN_TASK_AFFINITY_CPU0=y -# CONFIG_ESP_MAIN_TASK_AFFINITY_CPU1 is not set # CONFIG_ESP_MAIN_TASK_AFFINITY_NO_AFFINITY is not set CONFIG_ESP_MAIN_TASK_AFFINITY=0x0 CONFIG_ESP_MINIMAL_SHARED_STACK_SIZE=2048 @@ -1280,13 +1280,11 @@ CONFIG_ESP_CONSOLE_ROM_SERIAL_PORT_NUM=0 CONFIG_ESP_CONSOLE_UART_BAUDRATE=115200 CONFIG_ESP_INT_WDT=y CONFIG_ESP_INT_WDT_TIMEOUT_MS=300 -CONFIG_ESP_INT_WDT_CHECK_CPU1=y CONFIG_ESP_TASK_WDT_EN=y CONFIG_ESP_TASK_WDT_INIT=y # CONFIG_ESP_TASK_WDT_PANIC is not set CONFIG_ESP_TASK_WDT_TIMEOUT_S=5 CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_ESP_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP_PANIC_HANDLER_IRAM is not set # CONFIG_ESP_DEBUG_STUBS_ENABLE is not set CONFIG_ESP_DEBUG_OCDAWARE=y @@ -1298,8 +1296,6 @@ CONFIG_ESP_SYSTEM_BBPLL_RECALIB=y # IPC (Inter-Processor Call) # CONFIG_ESP_IPC_TASK_STACK_SIZE=1280 -CONFIG_ESP_IPC_USES_CALLERS_PRIORITY=y -CONFIG_ESP_IPC_ISR_ENABLE=y # end of IPC (Inter-Processor Call) # @@ -1339,8 +1335,6 @@ CONFIG_ESP_WIFI_TX_BA_WIN=6 CONFIG_ESP_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP_WIFI_RX_BA_WIN=6 CONFIG_ESP_WIFI_NVS_ENABLED=y -CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP_WIFI_TASK_PINNED_TO_CORE_1 is not set CONFIG_ESP_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP_WIFI_MGMT_SBUF_NUM=32 CONFIG_ESP_WIFI_IRAM_OPT=y @@ -1455,8 +1449,9 @@ CONFIG_FATFS_DONT_TRUST_LAST_ALLOC=0 # Kernel # # CONFIG_FREERTOS_SMP is not set -# CONFIG_FREERTOS_UNICORE is not set +CONFIG_FREERTOS_UNICORE=y CONFIG_FREERTOS_HZ=100 +CONFIG_FREERTOS_OPTIMIZED_SCHEDULER=y # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_NONE is not set # CONFIG_FREERTOS_CHECK_STACKOVERFLOW_PTRVAL is not set CONFIG_FREERTOS_CHECK_STACKOVERFLOW_CANARY=y @@ -1469,7 +1464,6 @@ CONFIG_FREERTOS_MAX_TASK_NAME_LEN=16 CONFIG_FREERTOS_USE_TIMERS=y CONFIG_FREERTOS_TIMER_SERVICE_TASK_NAME="Tmr Svc" # CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU0 is not set -# CONFIG_FREERTOS_TIMER_TASK_AFFINITY_CPU1 is not set CONFIG_FREERTOS_TIMER_TASK_NO_AFFINITY=y CONFIG_FREERTOS_TIMER_SERVICE_TASK_CORE_AFFINITY=0x7FFFFFFF CONFIG_FREERTOS_TIMER_TASK_PRIORITY=1 @@ -1513,7 +1507,7 @@ CONFIG_FREERTOS_SUPPORT_STATIC_ALLOCATION=y CONFIG_FREERTOS_DEBUG_OCDAWARE=y CONFIG_FREERTOS_ENABLE_TASK_SNAPSHOT=y CONFIG_FREERTOS_PLACE_SNAPSHOT_FUNS_INTO_FLASH=y -CONFIG_FREERTOS_NUMBER_OF_CORES=2 +CONFIG_FREERTOS_NUMBER_OF_CORES=1 CONFIG_FREERTOS_IN_IRAM=y # end of FreeRTOS @@ -1707,7 +1701,6 @@ CONFIG_LWIP_CHECKSUM_CHECK_ICMP=y CONFIG_LWIP_TCPIP_TASK_STACK_SIZE=3072 CONFIG_LWIP_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_LWIP_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_LWIP_TCPIP_TASK_AFFINITY=0x7FFFFFFF CONFIG_LWIP_IPV6_MEMP_NUM_ND6_QUEUE=3 CONFIG_LWIP_IPV6_ND6_NUM_NEIGHBORS=5 @@ -1993,9 +1986,6 @@ CONFIG_ESP_PROTOCOMM_SUPPORT_SECURITY_PATCH_VERSION=y CONFIG_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_PTHREAD_STACK_MIN=768 -CONFIG_PTHREAD_DEFAULT_CORE_NO_AFFINITY=y -# CONFIG_PTHREAD_DEFAULT_CORE_0 is not set -# CONFIG_PTHREAD_DEFAULT_CORE_1 is not set CONFIG_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_PTHREAD_TASK_NAME_DEFAULT="pthread" # end of PThreads @@ -2320,13 +2310,11 @@ CONFIG_CONSOLE_UART_NUM=0 CONFIG_CONSOLE_UART_BAUDRATE=115200 CONFIG_INT_WDT=y CONFIG_INT_WDT_TIMEOUT_MS=300 -CONFIG_INT_WDT_CHECK_CPU1=y CONFIG_TASK_WDT=y CONFIG_ESP_TASK_WDT=y # CONFIG_TASK_WDT_PANIC is not set CONFIG_TASK_WDT_TIMEOUT_S=5 CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU0=y -CONFIG_TASK_WDT_CHECK_IDLE_TASK_CPU1=y # CONFIG_ESP32_DEBUG_STUBS_ENABLE is not set CONFIG_ESP32S3_DEBUG_OCDAWARE=y CONFIG_IPC_TASK_STACK_SIZE=1280 @@ -2344,8 +2332,6 @@ CONFIG_ESP32_WIFI_TX_BA_WIN=6 CONFIG_ESP32_WIFI_AMPDU_RX_ENABLED=y CONFIG_ESP32_WIFI_RX_BA_WIN=6 CONFIG_ESP32_WIFI_NVS_ENABLED=y -CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_0=y -# CONFIG_ESP32_WIFI_TASK_PINNED_TO_CORE_1 is not set CONFIG_ESP32_WIFI_SOFTAP_BEACON_MAX_LEN=752 CONFIG_ESP32_WIFI_MGMT_SBUF_NUM=32 CONFIG_ESP32_WIFI_IRAM_OPT=y @@ -2391,7 +2377,6 @@ CONFIG_UDP_RECVMBOX_SIZE=6 CONFIG_TCPIP_TASK_STACK_SIZE=3072 CONFIG_TCPIP_TASK_AFFINITY_NO_AFFINITY=y # CONFIG_TCPIP_TASK_AFFINITY_CPU0 is not set -# CONFIG_TCPIP_TASK_AFFINITY_CPU1 is not set CONFIG_TCPIP_TASK_AFFINITY=0x7FFFFFFF # CONFIG_PPP_SUPPORT is not set CONFIG_NEWLIB_STDOUT_LINE_ENDING_CRLF=y @@ -2414,9 +2399,6 @@ CONFIG_ESP32S3_TIME_SYSCALL_USE_RTC_FRC1=y CONFIG_ESP32_PTHREAD_TASK_PRIO_DEFAULT=5 CONFIG_ESP32_PTHREAD_TASK_STACK_SIZE_DEFAULT=3072 CONFIG_ESP32_PTHREAD_STACK_MIN=768 -CONFIG_ESP32_DEFAULT_PTHREAD_CORE_NO_AFFINITY=y -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_0 is not set -# CONFIG_ESP32_DEFAULT_PTHREAD_CORE_1 is not set CONFIG_ESP32_PTHREAD_TASK_CORE_DEFAULT=-1 CONFIG_ESP32_PTHREAD_TASK_NAME_DEFAULT="pthread" CONFIG_SPI_FLASH_WRITING_DANGEROUS_REGIONS_ABORTS=y