From ff5e2531b728d0e423a1611ebf0e15e3ea3b8810 Mon Sep 17 00:00:00 2001
From: Cameron Goddard <camerongoddard@me.com>
Date: Fri, 22 Nov 2024 17:56:11 -0500
Subject: [PATCH] add FRAM clear tool

---
 tools/fram_clear/CMakeLists.txt | 41 ++++++++++++++++++++++++++++
 tools/fram_clear/fram_clear.cpp | 48 +++++++++++++++++++++++++++++++++
 tools/fram_read/fram_read.cpp   |  3 ---
 tools/perf/CMakeLists.txt       | 10 -------
 4 files changed, 89 insertions(+), 13 deletions(-)
 create mode 100644 tools/fram_clear/CMakeLists.txt
 create mode 100644 tools/fram_clear/fram_clear.cpp

diff --git a/tools/fram_clear/CMakeLists.txt b/tools/fram_clear/CMakeLists.txt
new file mode 100644
index 0000000..d35b056
--- /dev/null
+++ b/tools/fram_clear/CMakeLists.txt
@@ -0,0 +1,41 @@
+cmake_minimum_required(VERSION 3.22)
+
+# Pull in SDK (must be before project)
+include(../../lib/pico-sdk/pico_sdk_init.cmake)
+
+project(fram_clear C CXX ASM)
+set(CMAKE_C_STANDARD 11)
+set(CMAKE_CXX_STANDARD 17)
+
+# Initialize the SDK
+pico_sdk_init()
+
+add_compile_options(
+    -Wall
+    -Wno-format          
+    -Wno-unused-function
+)
+
+add_executable(${PROJECT_NAME}
+    ${PROJECT_NAME}.cpp
+)
+
+add_subdirectory(${PROJECT_SOURCE_DIR}/../../lib/MB85RS-Pico ${CMAKE_BINARY_DIR}/MB85RS-Pico)
+
+# Include project and library headers
+target_include_directories(${PROJECT_NAME}
+    PRIVATE
+    ${PROJECT_SOURCE_DIR}/../../lib/MB85RS-Pico
+)
+
+# Pull in common dependencies
+target_link_libraries(${PROJECT_NAME}
+    pico_stdlib
+    MB85RS-Pico
+)
+
+pico_enable_stdio_usb(${PROJECT_NAME} 1)
+pico_enable_stdio_uart(${PROJECT_NAME} 0)
+
+# Create uf2 file
+pico_add_uf2_output(${PROJECT_NAME})
\ No newline at end of file
diff --git a/tools/fram_clear/fram_clear.cpp b/tools/fram_clear/fram_clear.cpp
new file mode 100644
index 0000000..a3bd46c
--- /dev/null
+++ b/tools/fram_clear/fram_clear.cpp
@@ -0,0 +1,48 @@
+/**
+ * @file fram_clear.cpp
+ * @author csg83
+ * 
+ * @brief Clears the contents of FRAM
+ */
+
+#include "pico/stdlib.h"
+#include "mb85rs.hpp"
+#include "../../src/pins.hpp"
+#include "tusb.h"
+#include <cstdio>
+
+#define BYTES_TO_CLEAR 20
+
+MB85RS fram(SPI_PORT, FRAM_CS);
+
+int main() {
+    stdio_init_all();
+
+    gpio_init(FRAM_CS);
+    gpio_set_dir(FRAM_CS, GPIO_OUT);
+
+    spi_init(SPI_PORT, 125 * 1000000 / 6);
+    gpio_set_function(SPI_MISO, GPIO_FUNC_SPI);
+    gpio_set_function(SPI_MOSI, GPIO_FUNC_SPI);
+    gpio_set_function(SPI_SCK, GPIO_FUNC_SPI);
+    gpio_put(FRAM_CS, 1);
+
+    while (!tud_cdc_connected()) {
+        sleep_ms(500);
+    }
+    printf("Connected\n");
+
+    if (!fram.begin()) {
+        printf("Error: FRAM begin unsuccessful\n");
+    }
+
+    uint8_t clear[BYTES_TO_CLEAR] = {0};
+
+    if (fram.write_bytes(0, clear, BYTES_TO_CLEAR)) {
+        printf("FRAM clear successful!\n");
+    } else {
+        printf("Error: FRAM clear unsuccessful\n");
+    }
+
+    return 0;
+}
\ No newline at end of file
diff --git a/tools/fram_read/fram_read.cpp b/tools/fram_read/fram_read.cpp
index 0e39150..d0f4e78 100644
--- a/tools/fram_read/fram_read.cpp
+++ b/tools/fram_read/fram_read.cpp
@@ -37,9 +37,6 @@ int main() {
     }
 
     uint8_t data[BYTES_TO_READ] = {0};
-    uint8_t temp = 42;
-
-    fram.write_bytes(0, &temp, 1);
 
     if (fram.read_bytes(0, data, BYTES_TO_READ)) {
         for (int i = 0; i < BYTES_TO_READ; i++) {
diff --git a/tools/perf/CMakeLists.txt b/tools/perf/CMakeLists.txt
index 148613e..9e6224b 100644
--- a/tools/perf/CMakeLists.txt
+++ b/tools/perf/CMakeLists.txt
@@ -27,16 +27,6 @@ add_subdirectory(${PROJECT_SOURCE_DIR}/../../lib/LIS3DH-Pico ${CMAKE_BINARY_DIR}
 add_subdirectory(${PROJECT_SOURCE_DIR}/../../lib/Si7021-Pico ${CMAKE_BINARY_DIR}/Si7021-Pico)
 add_subdirectory(${PROJECT_SOURCE_DIR}/../../lib/MB85RS-Pico ${CMAKE_BINARY_DIR}/MB85RS-Pico)
 
-
-# Link library directories
-target_link_directories(${PROJECT_NAME} 
-    PRIVATE
-    ${PROJECT_SOURCE_DIR}/../../lib/BMP388-Pico
-    ${PROJECT_SOURCE_DIR}/../../lib/BNO055-Pico
-    ${PROJECT_SOURCE_DIR}/../../lib/LIS3DH-Pico
-    ${PROJECT_SOURCE_DIR}/../../lib/Si7021-Pico
-)
-
 # Include project and library headers
 target_include_directories(${PROJECT_NAME}
     PRIVATE