Browse Source

Merge branch 'feature/add_reset_timing_config' into 'master'

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

Closes ESF-27 and ESF-28

See merge request espressif/esp-serial-flasher!50
Roland Dobai 3 years ago
parent
commit
0dca7c41e6
6 changed files with 57 additions and 15 deletions
  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)
 if(DEFINED MD5_ENABLED OR CONFIG_SERIAL_FLASHER_MD5_ENABLED)
     target_compile_definitions(${target} PUBLIC -DMD5_ENABLED=1)
     target_compile_definitions(${target} PUBLIC -DMD5_ENABLED=1)
 endif()
 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
         default y
         help
         help
             Select this option to enable MD5 hashsum check after flashing.
             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
 endmenu

+ 19 - 3
README.md

@@ -42,7 +42,25 @@ Please refer to ports in `port` directory. Currently, only ports for [ESP32 port
 
 
 ## Configuration
 ## 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:
 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 .
 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 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.
 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);
     gpio_set_level(s_gpio0_trigger_pin, 0);
     loader_port_reset_target();
     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);
     gpio_set_level(s_gpio0_trigger_pin, 1);
 }
 }
 
 
@@ -162,7 +162,7 @@ void loader_port_enter_bootloader(void)
 void loader_port_reset_target(void)
 void loader_port_reset_target(void)
 {
 {
     gpio_set_level(s_reset_trigger_pin, 0);
     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);
     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)
 void loader_port_enter_bootloader(void)
 {
 {
     gpioWrite(s_gpio0_trigger_pin, 0);
     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);
     gpioWrite(s_gpio0_trigger_pin, 1);
 }
 }
 
 
@@ -272,7 +270,7 @@ void loader_port_enter_bootloader(void)
 void loader_port_reset_target(void)
 void loader_port_reset_target(void)
 {
 {
     gpioWrite(s_reset_trigger_pin, 0);
     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);
     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)
 void loader_port_enter_bootloader(void)
 {
 {
     HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_RESET);
     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);
     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)
 void loader_port_reset_target(void)
 {
 {
     HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_RESET);
     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);
     HAL_GPIO_WritePin(gpio_port_rst, gpio_num_rst, GPIO_PIN_SET);
 }
 }