Skip to content

Commit 31e9b15

Browse files
authored
Merge pull request #9553 from dhalbert/9.1.x-correct-board-special-pin-setup
correct board special pin setup
2 parents f4ca293 + 6759007 commit 31e9b15

File tree

26 files changed

+63
-55
lines changed

26 files changed

+63
-55
lines changed

.github/workflows/build.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -255,10 +255,13 @@ jobs:
255255
wget --no-verbose -O gcc-arm.zip https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-mingw-w64-i686-arm-none-eabi.zip
256256
unzip -q -d /tmp gcc-arm.zip
257257
tar -C /tmp/arm-gnu-toolchain* -cf - . | tar -C /usr/local -xf -
258-
pip install wheel
259-
# requirements_dev.txt doesn't install on windows. (with msys2 python)
258+
# We could use a venv instead, but that requires entering the venv on each run step
259+
# that runs in its own shell. There are some actions that help with that, but not for msys2
260+
# that I can find. (dhalbert)
261+
pip install --break-system-packages wheel
262+
# requirements-dev.txt doesn't install on windows. (with msys2 python)
260263
# instead, pick a subset for what we want to do
261-
pip install cascadetoml jinja2 typer click intelhex
264+
pip install --break-system-packages cascadetoml jinja2 typer click intelhex
262265
# check that installed packages work....?
263266
which python; python --version; python -c "import cascadetoml"
264267
which python3; python3 --version; python3 -c "import cascadetoml"

ports/espressif/boards/adafruit_feather_esp32_v2/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1515
if (pin_number == 2) {
1616
// Turn on NeoPixel and I2C power by default.
17-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
18-
gpio_set_level(pin_number, true);
17+
config_pin_as_output_with_level(pin_number, true);
1918
return true;
2019
}
2120

ports/espressif/boards/adafruit_feather_esp32c6_4mbflash_nopsram/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1515
if (pin_number == 20) {
1616
// Turn on I2C power by default.
17-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
18-
gpio_set_level(pin_number, true);
17+
config_pin_as_output_with_level(pin_number, true);
1918
return true;
2019
}
2120

ports/espressif/boards/adafruit_feather_esp32s2_reverse_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 7) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_feather_esp32s2_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 21) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_feather_esp32s3_reverse_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 7) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_feather_esp32s3_tft/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 21) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(pin_number, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/adafruit_itsybitsy_esp32/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1515
if (pin_number == 2) {
1616
// Turn on NeoPixel and I2C power by default.
17-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
18-
gpio_set_level(pin_number, true);
17+
config_pin_as_output_with_level(pin_number, true);
1918
return true;
2019
}
2120

ports/espressif/boards/arduino_nano_esp32s3/board.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@
1212
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1313
if (pin_number == 13) {
1414
// Set D13 LED to input when not in use
15-
gpio_set_direction(pin_number, GPIO_MODE_DEF_INPUT);
16-
gpio_set_pull_mode(pin_number, GPIO_PULLDOWN_ONLY);
15+
gpio_config_t cfg = {
16+
.pin_bit_mask = BIT64(pin_number),
17+
.mode = GPIO_MODE_INPUT,
18+
.pull_up_en = false,
19+
.pull_down_en = true,
20+
.intr_type = GPIO_INTR_DISABLE,
21+
};
22+
gpio_config(&cfg);
1723
return true;
1824
}
1925

ports/espressif/boards/arduino_nano_esp32s3_inverted_statusled/board.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@
1212
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1313
if (pin_number == 13) {
1414
// Set D13 LED to input when not in use
15-
gpio_set_direction(pin_number, GPIO_MODE_DEF_INPUT);
16-
gpio_set_pull_mode(pin_number, GPIO_PULLDOWN_ONLY);
15+
gpio_config_t cfg = {
16+
.pin_bit_mask = BIT64(pin_number),
17+
.mode = GPIO_MODE_INPUT,
18+
.pull_up_en = false,
19+
.pull_down_en = true,
20+
.intr_type = GPIO_INTR_DISABLE,
21+
};
22+
gpio_config(&cfg);
1723
return true;
1824
}
1925

ports/espressif/boards/cytron_maker_feather_aiot_s3/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
5858

5959
void reset_board(void) {
6060
// Turn on VP by default.
61-
gpio_set_direction(11, GPIO_MODE_DEF_OUTPUT);
62-
gpio_set_level(11, true);
61+
config_pin_as_output_with_level(11, true);
6362
}
6463

6564
// Use the MP_WEAK supervisor/shared/board.c versions of routines not defined here.

ports/espressif/boards/hexky_s2/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
103103
// Override the I2C/TFT power pin reset to prevent resetting the display.
104104
if (pin_number == 21) {
105105
// Turn on TFT and I2C
106-
gpio_set_direction(21, GPIO_MODE_DEF_OUTPUT);
107-
gpio_set_level(21, true);
106+
config_pin_as_output_with_level(pin_number, true);
108107
return true;
109108
}
110109
return false;

ports/espressif/boards/lilygo_tdisplay_s3/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
101101
// Override the I2C/TFT power pin reset to prevent resetting the display.
102102
if (pin_number == 15) {
103103
// Turn on TFT
104-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
105-
gpio_set_level(pin_number, true);
104+
config_pin_as_output_with_level(pin_number, true);
106105
return true;
107106
}
108107
return false;

ports/espressif/boards/lilygo_twatch_2020_v3/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,7 @@ void board_init(void) {
131131
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
132132
if (pin_number == MOTOR_PIN) {
133133
// no motor
134-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
135-
gpio_set_level(pin_number, false);
134+
config_pin_as_output_with_level(pin_number, false);
136135
return true;
137136
}
138137
return false;

ports/espressif/boards/m5stack_core_basic/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ void board_init(void) {
8989
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9090
// Set speaker gpio to ground to prevent noise from the speaker
9191
if (pin_number == 25) {
92-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
93-
gpio_set_level(pin_number, false);
92+
config_pin_as_output_with_level(pin_number, false);
9493
return true;
9594
}
9695
return false;

ports/espressif/boards/m5stack_core_fire/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,8 +89,7 @@ void board_init(void) {
8989
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9090
// Set speaker gpio to ground to prevent noise from the speaker
9191
if (pin_number == 25) {
92-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
93-
gpio_set_level(pin_number, false);
92+
config_pin_as_output_with_level(pin_number, false);
9493
return true;
9594
}
9695
return false;

ports/espressif/boards/m5stack_dial/board.c

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,11 +92,10 @@ void board_init(void) {
9292
}
9393

9494
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
95-
// Hold pind must be set high to avoid a power off when battery powered
95+
// Hold pin must be set high to avoid a power off when battery powered
9696
if (pin_number == 46) {
9797
// Turn on hold output
98-
gpio_set_direction(46, GPIO_MODE_DEF_OUTPUT);
99-
gpio_set_level(46, true);
98+
config_pin_as_output_with_level(pin_number, true);
10099
return true;
101100
}
102101
return false;

ports/espressif/boards/m5stack_stick_c/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,7 @@ void board_init(void) {
217217
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
218218
// Set IR led gpio high to prevent power drain from the led
219219
if (pin_number == 9) {
220-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
221-
gpio_set_level(pin_number, true);
220+
config_pin_as_output_with_level(pin_number, true);
222221
return true;
223222
}
224223
return false;

ports/espressif/boards/m5stack_stick_c_plus/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,8 +217,7 @@ void board_init(void) {
217217
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
218218
// Set IR led gpio high to prevent power drain from the led
219219
if (pin_number == 9) {
220-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
221-
gpio_set_level(pin_number, true);
220+
config_pin_as_output_with_level(pin_number, true);
222221
return true;
223222
}
224223
return false;

ports/espressif/boards/m5stack_timer_camera_x/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
1919
* when usb is disconnected or
2020
* the power button is released.
2121
*/
22-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
23-
gpio_set_level(pin_number, true);
22+
config_pin_as_output_with_level(pin_number, true);
2423
return true;
2524
}
2625
return false;

ports/espressif/boards/seeed_xiao_esp32c6/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@
3434
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
3535
if (pin_number == 16) {
3636
// Turn on I2C power by default.
37-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
38-
gpio_set_level(pin_number, true);
37+
config_pin_as_output_with_level(pin_number, true);
3938
return true;
4039
}
4140

ports/espressif/boards/sqfmi_watchy/board.c

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -202,20 +202,16 @@ bool board_requests_safe_mode(void) {
202202

203203
bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
204204
if (pin_number == 13) {
205-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
206-
gpio_set_level(pin_number, false);
205+
config_pin_as_output_with_level(pin_number, false);
207206
return true;
208207
}
209208
return false;
210209
}
211210

212211
void reset_board(void) {
213-
gpio_set_direction(13, GPIO_MODE_OUTPUT);
214-
gpio_set_level(13, false);
215-
212+
config_pin_as_output_with_level(13, false);
216213
}
217214

218215
void board_deinit(void) {
219-
gpio_set_direction(13, GPIO_MODE_DEF_OUTPUT);
220-
gpio_set_level(13, false);
216+
config_pin_as_output_with_level(13, false);
221217
}

ports/espressif/boards/sunton_esp32_2432S028/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,8 +97,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9797
// Pull the speaker pin low to reduce noise on reset
9898
if (pin_number == 26) {
9999
// Turn on TFT
100-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
101-
gpio_set_level(pin_number, false);
100+
config_pin_as_output_with_level(pin_number, false);
102101
return true;
103102
}
104103
return false;

ports/espressif/boards/sunton_esp32_2432S032C/board.c

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,8 +93,7 @@ bool espressif_board_reset_pin_number(gpio_num_t pin_number) {
9393
// Pull the speaker pin low to reduce noise on reset
9494
if (pin_number == 26) {
9595
// Turn on audio
96-
gpio_set_direction(pin_number, GPIO_MODE_DEF_OUTPUT);
97-
gpio_set_level(pin_number, false);
96+
config_pin_as_output_with_level(pin_number, false);
9897
return true;
9998
}
10099
return false;

ports/espressif/common-hal/microcontroller/Pin.c

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -393,3 +393,16 @@ bool common_hal_mcu_pin_is_free(const mcu_pin_obj_t *pin) {
393393
uint8_t common_hal_mcu_pin_number(const mcu_pin_obj_t *pin) {
394394
return pin ? pin->number : NO_PIN;
395395
}
396+
397+
void config_pin_as_output_with_level(gpio_num_t pin_number, bool level) {
398+
gpio_config_t cfg = {
399+
.pin_bit_mask = BIT64(pin_number),
400+
.mode = GPIO_MODE_OUTPUT,
401+
.pull_up_en = false,
402+
.pull_down_en = false,
403+
.intr_type = GPIO_INTR_DISABLE,
404+
};
405+
gpio_config(&cfg);
406+
407+
gpio_set_level(pin_number, level);
408+
}

ports/espressif/common-hal/microcontroller/Pin.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,7 @@ extern void clear_pin_preservations(void);
3636
// Return true to indicate that the pin was reset. Returning false will lead to
3737
// the port-default reset behavior.
3838
extern bool espressif_board_reset_pin_number(gpio_num_t pin_number);
39+
40+
// Configure the IOMUX for the pin as GPIO, set the pin as output, and then set output the level.
41+
// This ensures the IOMUX setting is correct.
42+
extern void config_pin_as_output_with_level(gpio_num_t pin_number, bool level);

0 commit comments

Comments
 (0)