ソースを参照

Improve ESP32 HAL (EEPROM, watchdog) (#16228)

Luc 4年前
コミット
9d6b2ebf50

+ 2
- 2
Marlin/src/HAL/HAL_ESP32/HAL.cpp ファイルの表示

@@ -30,7 +30,7 @@
30 30
 
31 31
 #include "../../inc/MarlinConfigPre.h"
32 32
 
33
-#if EITHER(EEPROM_SETTINGS, WEBSUPPORT)
33
+#if ENABLED(WEBSUPPORT)
34 34
   #include "spiffs.h"
35 35
 #endif
36 36
 
@@ -83,7 +83,7 @@ void HAL_init() {
83 83
 }
84 84
 
85 85
 void HAL_init_board() {
86
-  #if EITHER(EEPROM_SETTINGS, WEBSUPPORT)
86
+  #if ENABLED(WEBSUPPORT)
87 87
     spiffs_init();
88 88
   #endif
89 89
 

+ 63
- 0
Marlin/src/HAL/HAL_ESP32/persistent_store_impl.cpp ファイルの表示

@@ -0,0 +1,63 @@
1
+/**
2
+ * Marlin 3D Printer Firmware
3
+ * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
+ *
5
+ * Based on Sprinter and grbl.
6
+ * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
7
+ *
8
+ * This program is free software: you can redistribute it and/or modify
9
+ * it under the terms of the GNU General Public License as published by
10
+ * the Free Software Foundation, either version 3 of the License, or
11
+ * (at your option) any later version.
12
+ *
13
+ * This program is distributed in the hope that it will be useful,
14
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
+ * GNU General Public License for more details.
17
+ *
18
+ * You should have received a copy of the GNU General Public License
19
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
+ *
21
+ */
22
+
23
+#ifdef ARDUINO_ARCH_ESP32
24
+
25
+#include "../../inc/MarlinConfig.h"
26
+
27
+#if ENABLED(EEPROM_SETTINGS) && DISABLED(FLASH_EEPROM_EMULATION)
28
+
29
+#include "../shared/persistent_store_api.h"
30
+#include "EEPROM.h"
31
+
32
+#define EEPROM_SIZE 4096
33
+
34
+bool PersistentStore::access_start() {
35
+  return EEPROM.begin(EEPROM_SIZE);
36
+}
37
+
38
+bool PersistentStore::access_finish() {
39
+  EEPROM.end();
40
+  return true;
41
+}
42
+
43
+bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
44
+  for (size_t i = 0; i < size; i++) {
45
+    EEPROM.write(pos++, value[i]);
46
+    crc16(crc, &value[i], 1);
47
+  }
48
+  return false;
49
+}
50
+
51
+bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
52
+  for (size_t i = 0; i < size; i++) {
53
+    uint8_t c = EEPROM.read(pos++);
54
+    if (writing) value[i] = c;
55
+    crc16(crc, &c, 1);
56
+  }
57
+  return false;
58
+}
59
+
60
+size_t PersistentStore::capacity() { return EEPROM_SIZE; }
61
+
62
+#endif // EEPROM_SETTINGS
63
+#endif // ARDUINO_ARCH_ESP32

+ 0
- 106
Marlin/src/HAL/HAL_ESP32/persistent_store_spiffs.cpp ファイルの表示

@@ -1,106 +0,0 @@
1
-/**
2
- * Marlin 3D Printer Firmware
3
- * Copyright (c) 2019 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
4
- *
5
- * Based on Sprinter and grbl.
6
- * Copyright (c) 2011 Camiel Gubbels / Erik van der Zalm
7
- *
8
- * This program is free software: you can redistribute it and/or modify
9
- * it under the terms of the GNU General Public License as published by
10
- * the Free Software Foundation, either version 3 of the License, or
11
- * (at your option) any later version.
12
- *
13
- * This program is distributed in the hope that it will be useful,
14
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16
- * GNU General Public License for more details.
17
- *
18
- * You should have received a copy of the GNU General Public License
19
- * along with this program.  If not, see <http://www.gnu.org/licenses/>.
20
- *
21
- */
22
-
23
-#ifdef ARDUINO_ARCH_ESP32
24
-
25
-#include "../../inc/MarlinConfig.h"
26
-
27
-#if ENABLED(EEPROM_SETTINGS) && DISABLED(FLASH_EEPROM_EMULATION)
28
-
29
-#include "../shared/persistent_store_api.h"
30
-
31
-#include <SPIFFS.h>
32
-#include <FS.h>
33
-#include "spiffs.h"
34
-
35
-#define HAL_ESP32_EEPROM_SIZE 4096
36
-#define HAL_ESP32_EEPROM_FILE_PATH "/eeprom.dat"
37
-
38
-File eeprom_file;
39
-
40
-bool PersistentStore::access_start() {
41
-  if (spiffs_initialized) {
42
-    eeprom_file = SPIFFS.open(HAL_ESP32_EEPROM_FILE_PATH, "r+");
43
-
44
-    size_t file_size = eeprom_file.size();
45
-    if (file_size < HAL_ESP32_EEPROM_SIZE) {
46
-      SERIAL_ECHO_MSG("SPIFFS EEPROM settings file " HAL_ESP32_EEPROM_FILE_PATH " is too small or did not exist, expanding.");
47
-      SERIAL_ECHO_START(); SERIAL_ECHOLNPAIR(" file size: ", file_size, ", required size: ", HAL_ESP32_EEPROM_SIZE);
48
-
49
-      // mode r+ does not allow to expand the file (at least on ESP32 SPIFFS9, so we close, reopen "a", append, close, reopen "r+"
50
-      eeprom_file.close();
51
-
52
-      eeprom_file = SPIFFS.open(HAL_ESP32_EEPROM_FILE_PATH, "a");
53
-      for (size_t i = eeprom_file.size(); i < HAL_ESP32_EEPROM_SIZE; i++)
54
-        eeprom_file.write(0xFF);
55
-      eeprom_file.close();
56
-
57
-      eeprom_file = SPIFFS.open(HAL_ESP32_EEPROM_FILE_PATH, "r+");
58
-      file_size = eeprom_file.size();
59
-      if (file_size < HAL_ESP32_EEPROM_SIZE) {
60
-        SERIAL_ERROR_MSG("Failed to expand " HAL_ESP32_EEPROM_FILE_PATH " to required size. SPIFFS partition full?");
61
-        SERIAL_ERROR_START(); SERIAL_ECHOLNPAIR(" file size: ", file_size, ", required size: ", HAL_ESP32_EEPROM_SIZE);
62
-        SERIAL_ERROR_START(); SERIAL_ECHOLNPAIR(" SPIFFS used bytes: ", SPIFFS.usedBytes(), ", total bytes: ", SPIFFS.totalBytes());
63
-      }
64
-    }
65
-    return true;
66
-  }
67
-  return false;
68
-}
69
-
70
-bool PersistentStore::access_finish() {
71
-  eeprom_file.close();
72
-  return true;
73
-}
74
-
75
-bool PersistentStore::write_data(int &pos, const uint8_t *value, size_t size, uint16_t *crc) {
76
-  if (!eeprom_file.seek(pos)) return true; // return true for any error
77
-  if (eeprom_file.write(value, size) != size) return true;
78
-
79
-  crc16(crc, value, size);
80
-  pos += size;
81
-
82
-  return false;
83
-}
84
-
85
-bool PersistentStore::read_data(int &pos, uint8_t* value, size_t size, uint16_t *crc, const bool writing/*=true*/) {
86
-  if (!eeprom_file.seek(pos)) return true; // return true for any error
87
-
88
-  if (writing) {
89
-    if (eeprom_file.read(value, size) != size) return true;
90
-    crc16(crc, value, size);
91
-  }
92
-  else {
93
-    uint8_t tmp[size];
94
-    if (eeprom_file.read(tmp, size) != size) return true;
95
-    crc16(crc, tmp, size);
96
-  }
97
-
98
-  pos += size;
99
-
100
-  return false;
101
-}
102
-
103
-size_t PersistentStore::capacity() { return HAL_ESP32_EEPROM_SIZE; }
104
-
105
-#endif // EEPROM_SETTINGS
106
-#endif // ARDUINO_ARCH_ESP32

+ 1
- 1
Marlin/src/HAL/HAL_ESP32/spiffs.cpp ファイルの表示

@@ -24,7 +24,7 @@
24 24
 
25 25
 #include "../../inc/MarlinConfigPre.h"
26 26
 
27
-#if EITHER(WEBSUPPORT, EEPROM_SETTINGS)
27
+#if ENABLED(WEBSUPPORT)
28 28
 
29 29
 #include "../../core/serial.h"
30 30
 

+ 11
- 1
Marlin/src/HAL/HAL_ESP32/watchdog.h ファイルの表示

@@ -21,8 +21,18 @@
21 21
  */
22 22
 #pragma once
23 23
 
24
+#ifdef __cplusplus
25
+  extern "C" {
26
+#endif
27
+
28
+    esp_err_t esp_task_wdt_reset();
29
+
30
+#ifdef __cplusplus
31
+  }
32
+#endif
33
+
24 34
 // Initialize watchdog with a 4 second interrupt time
25 35
 void watchdog_init();
26 36
 
27 37
 // Reset watchdog.
28
-inline void HAL_watchdog_refresh() {}
38
+inline void HAL_watchdog_refresh() { esp_task_wdt_reset(); }

+ 5
- 3
platformio.ini ファイルの表示

@@ -694,14 +694,16 @@ monitor_speed = 250000
694 694
 [env:esp32]
695 695
 platform      = espressif32
696 696
 board         = esp32dev
697
-upload_speed  = 115200
698
-monitor_speed = 115200
699
-upload_port   = /dev/ttyUSB0
697
+build_flags   = ${common.build_flags} -DCORE_DEBUG_LEVEL=0
700 698
 lib_deps      =
701 699
   AsyncTCP=https://github.com/me-no-dev/AsyncTCP/archive/master.zip
702 700
   ESPAsyncWebServer=https://github.com/me-no-dev/ESPAsyncWebServer/archive/master.zip
703 701
 lib_ignore    = LiquidCrystal, LiquidTWI2, SailfishLCD, SailfishRGB_LED
704 702
 src_filter    = ${common.default_src_filter} +<src/HAL/HAL_ESP32>
703
+upload_speed  = 115200
704
+monitor_speed = 250000
705
+#upload_port   = marlinesp.local
706
+#board_build.flash_mode = qio
705 707
 
706 708
 #
707 709
 # Native

読み込み中…
キャンセル
保存