Просмотр исходного кода

feature: Add reset timing configuration for RST and BOOT pins and unify reset logic and timing across all ports

This enables users to change these as they need, and unifying the reset behaviour across ports should reduce the number of issues we have to solve in the future.
Djordje Nedic 3 лет назад
Родитель
Сommit
268a2c0b83
6 измененных файлов с 57 добавлено и 15 удалено
  1. 21 0
      CMakeLists.txt
  2. 9 0
      Kconfig
  3. 19 3
      README.md
  4. 2 2
      port/esp32_port.c
  5. 3 5
      port/raspberry_port.c
  6. 3 5
      port/stm32_port.c

+ 21 - 0
CMakeLists.txt

@@ -57,3 +57,24 @@ endif()
 if(DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED)
     target_compile_definitions(${target} PUBLIC -DMD5_ENABLED=1)
 endif()
+
+if(DEFINED CONFIG_SERIAL_FLASHER_RESET_HOLD_TIME_MS AND DEFINED CONFIG_SERIAL_FLASHER_BOOT_HOLD_TIME_MS)
+    target_compile_definitions(${target}
+    PUBLIC
+        SERIAL_FLASHER_RESET_HOLD_TIME_MS=${CONFIG_SERIAL_FLASHER_RESET_HOLD_TIME_MS}
+        SERIAL_FLASHER_BOOT_HOLD_TIME_MS=${CONFIG_SERIAL_FLASHER_BOOT_HOLD_TIME_MS}
+    )
+else()
+    if(NOT DEFINED SERIAL_FLASHER_RESET_HOLD_TIME_MS)
+        target_compile_definitions(${target}
+        PUBLIC
+            SERIAL_FLASHER_RESET_HOLD_TIME_MS=100
+        )
+    endif()
+    if(NOT DEFINED SERIAL_FLASHER_BOOT_HOLD_TIME_MS)
+        target_compile_definitions(${target}
+        PUBLIC
+            SERIAL_FLASHER_BOOT_HOLD_TIME_MS=50
+        )
+    endif()
+endif()

+ 9 - 0
Kconfig

@@ -4,4 +4,13 @@ menu "ESP serial flasher"
         default y
         help
             Select this option to enable MD5 hashsum check after flashing.
+
+    config SERIAL_FLASHER_RESET_HOLD_TIME_MS
+        int "Time for which the reset pin is asserted when doing a hard reset"
+        default 100
+
+    config SERIAL_FLASHER_BOOT_HOLD_TIME_MS
+        int "Time for which the boot pin is asserted when doing a hard reset"
+        default 50
+
 endmenu

+ 19 - 3
README.md

@@ -42,7 +42,25 @@ Please refer to ports in `port` directory. Currently, only ports for [ESP32 port
 
 ## Configuration
 
-Apart from writing port (if not available), user can enable flash integrity check functionality by setting MD5_ENABLED option. If enabled, serial flasher is capable of verify flash integrity after writing to memory.
+These are the configuration toggles available to the user:
+* MD5_ENABLED
+
+If enabled, serial flasher is capable of verifying flash integrity after writing to memory.
+
+Default: Enabled
+> Warning: As ROM bootloader of ESP8266 does not support MD5_CHECK, this option has to be disabled!
+
+* SERIAL_FLASHER_RESET_HOLD_TIME_MS
+
+This is the time for which the reset pin is asserted when doing a hard reset in milliseconds.
+
+Default: 100
+
+* SERIAL_FLASHER_BOOT_HOLD_TIME_MS
+
+This is the time for which the boot pin is asserted when doing a hard reset in milliseconds.
+
+Default: 50
 
 Configuration can be passed to `cmake` via command line:
 
@@ -50,8 +68,6 @@ Configuration can be passed to `cmake` via command line:
 cmake -DMD5_ENABLED=1 .. && cmake --build .
 ```
 
-Note: in case, no compile definitions are provided, ESP32 is set as target and MD5 check is enabled by default. As ROM bootloader of ESP8266 does not support MD5_CHECK, `-DMD5_ENABLED=0` has to be passed to command line.
-
 ### STM32 support
 
 STM32 port make use of STM32 HAL libraries, that does not come with CMake support. In order to compile the project, `stm32-cmake` (`cmake` support package) has to be pulled as submodule.

+ 2 - 2
port/esp32_port.c

@@ -154,7 +154,7 @@ void loader_port_enter_bootloader(void)
 {
     gpio_set_level(s_gpio0_trigger_pin, 0);
     loader_port_reset_target();
-    loader_port_delay_ms(50);
+    loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS);
     gpio_set_level(s_gpio0_trigger_pin, 1);
 }
 
@@ -162,7 +162,7 @@ void loader_port_enter_bootloader(void)
 void loader_port_reset_target(void)
 {
     gpio_set_level(s_reset_trigger_pin, 0);
-    loader_port_delay_ms(50);
+    loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS);
     gpio_set_level(s_reset_trigger_pin, 1);
 }
 

+ 3 - 5
port/raspberry_port.c

@@ -261,10 +261,8 @@ esp_loader_error_t loader_port_serial_read(uint8_t *data, uint16_t size, uint32_
 void loader_port_enter_bootloader(void)
 {
     gpioWrite(s_gpio0_trigger_pin, 0);
-    gpioWrite(s_reset_trigger_pin, 0);
-    loader_port_delay_ms(50);
-    gpioWrite(s_reset_trigger_pin, 1);
-    loader_port_delay_ms(50);
+    loader_port_reset_target();
+    loader_port_delay_ms(SERIAL_FLASHER_BOOT_HOLD_TIME_MS);
     gpioWrite(s_gpio0_trigger_pin, 1);
 }
 
@@ -272,7 +270,7 @@ void loader_port_enter_bootloader(void)
 void loader_port_reset_target(void)
 {
     gpioWrite(s_reset_trigger_pin, 0);
-    loader_port_delay_ms(50);
+    loader_port_delay_ms(SERIAL_FLASHER_RESET_HOLD_TIME_MS);
     gpioWrite(s_reset_trigger_pin, 1);
 }
 

+ 3 - 5
port/stm32_port.c

@@ -112,10 +112,8 @@ void loader_port_stm32_init(loader_stm32_config_t *config)
 void loader_port_enter_bootloader(void)
 {
     HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_RESET);
-    HAL_GPIO_WritePin(gpio_port_io0, gpio_num_io0, GPIO_PIN_RESET);
-    HAL_Delay(1);
-    HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_SET);
-    HAL_Delay(100);
+    loader_port_reset_target();
+    HAL_Delay(SERIAL_FLASHER_BOOT_HOLD_TIME_MS);
     HAL_GPIO_WritePin(gpio_port_io0, gpio_num_io0, GPIO_PIN_SET);
 }
 
@@ -123,7 +121,7 @@ void loader_port_enter_bootloader(void)
 void loader_port_reset_target(void)
 {
     HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_RESET);
-    HAL_Delay(100);
+    HAL_Delay(SERIAL_FLASHER_RESET_HOLD_TIME_MS);
     HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_SET);
 }