From 1ac2144a876647e60ef8f05240f6f8e0701e6b61 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Wed, 10 May 2023 12:20:22 +0200 Subject: [PATCH 01/10] [pin_remap 1/3] platform: define ARDUINO_CORE_BUILD when building core files --- platform.txt | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/platform.txt b/platform.txt index b712f49b437..2bddce9e701 100644 --- a/platform.txt +++ b/platform.txt @@ -141,6 +141,16 @@ recipe.hooks.prebuild.6.pattern=bash -c "[ -f "{build.path}"/build_opt.h ] || to recipe.hooks.prebuild.5.pattern.windows=cmd /c if exist "{build.source.path}\build_opt.h" COPY /y "{build.source.path}\build_opt.h" "{build.path}\build_opt.h" recipe.hooks.prebuild.6.pattern.windows=cmd /c if not exist "{build.path}\build_opt.h" type nul > "{build.path}\build_opt.h" +# Set -DARDUINO_CORE_BUILD only on core file compilation +file_opts.path={build.path}/file_opts +recipe.hooks.prebuild.set_core_build_flag.pattern=bash -c ": > '{file_opts.path}'" +recipe.hooks.core.prebuild.set_core_build_flag.pattern=bash -c "echo '-DARDUINO_CORE_BUILD' > '{file_opts.path}'" +recipe.hooks.core.postbuild.set_core_build_flag.pattern=bash -c ": > '{file_opts.path}'" + +recipe.hooks.prebuild.set_core_build_flag.pattern.windows=cmd /c type nul > "{file_opts.path}" +recipe.hooks.core.prebuild.set_core_build_flag.pattern.windows=cmd /c echo "-DARDUINO_CORE_BUILD" > "{file_opts.path}" +recipe.hooks.core.postbuild.set_core_build_flag.pattern.windows=cmd /c type nul > "{file_opts.path}" + # Generate debug.cfg (must be postbuild) recipe.hooks.postbuild.1.pattern=bash -c "[ {build.copy_jtag_files} -eq 0 ] || cp -f "{debug.server.openocd.scripts_dir}"board/{build.openocdscript} "{build.source.path}"/debug.cfg" recipe.hooks.postbuild.1.pattern.windows=cmd /c IF {build.copy_jtag_files}==1 COPY /y "{debug.server.openocd.scripts_dir}board\{build.openocdscript}" "{build.source.path}\debug.cfg" @@ -154,13 +164,13 @@ recipe.hooks.postbuild.3.pattern=bash -c "[ {build.copy_jtag_files} -eq 0 ] || c recipe.hooks.postbuild.3.pattern.windows=cmd /c IF {build.copy_jtag_files}==1 COPY /y "{runtime.platform.path}\tools\ide-debug\svd\{build.mcu}.svd" "{build.source.path}\debug.svd" ## Compile c files -recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.extra_flags} {compiler.c.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" -DARDUINO_VARIANT="{build.variant}" -DARDUINO_PARTITION_{build.partitions} {build.extra_flags} {compiler.cpreprocessor.flags} {includes} "@{build.opt.path}" "{source_file}" -o "{object_file}" +recipe.c.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.c.extra_flags} {compiler.c.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" -DARDUINO_VARIANT="{build.variant}" -DARDUINO_PARTITION_{build.partitions} {build.extra_flags} {compiler.cpreprocessor.flags} {includes} "@{build.opt.path}" "@{file_opts.path}" "{source_file}" -o "{object_file}" ## Compile c++ files -recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.extra_flags} {compiler.cpp.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" -DARDUINO_VARIANT="{build.variant}" -DARDUINO_PARTITION_{build.partitions} {build.extra_flags} {compiler.cpreprocessor.flags} {includes} "@{build.opt.path}" "{source_file}" -o "{object_file}" +recipe.cpp.o.pattern="{compiler.path}{compiler.cpp.cmd}" {compiler.cpp.extra_flags} {compiler.cpp.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" -DARDUINO_VARIANT="{build.variant}" -DARDUINO_PARTITION_{build.partitions} {build.extra_flags} {compiler.cpreprocessor.flags} {includes} "@{build.opt.path}" "@{file_opts.path}" "{source_file}" -o "{object_file}" ## Compile S files -recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.extra_flags} {compiler.S.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" -DARDUINO_VARIANT="{build.variant}" -DARDUINO_PARTITION_{build.partitions} {build.extra_flags} {compiler.cpreprocessor.flags} {includes} "@{build.opt.path}" "{source_file}" -o "{object_file}" +recipe.S.o.pattern="{compiler.path}{compiler.c.cmd}" {compiler.S.extra_flags} {compiler.S.flags} -DF_CPU={build.f_cpu} -DARDUINO={runtime.ide.version} -DARDUINO_{build.board} -DARDUINO_ARCH_{build.arch} -DARDUINO_BOARD="{build.board}" -DARDUINO_VARIANT="{build.variant}" -DARDUINO_PARTITION_{build.partitions} {build.extra_flags} {compiler.cpreprocessor.flags} {includes} "@{build.opt.path}" "@{file_opts.path}" "{source_file}" -o "{object_file}" ## Create archives recipe.ar.pattern="{compiler.path}{compiler.ar.cmd}" {compiler.ar.flags} {compiler.ar.extra_flags} "{archive_file_path}" "{object_file}" From 6c95e425ef3e0edbc5dacdd6d65165e456eb6dac Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Thu, 26 Oct 2023 17:55:00 +0200 Subject: [PATCH 02/10] [pin_remap 2/3] core,libs: add pin remap hooks --- cores/esp32/Arduino.h | 11 +-- cores/esp32/FunctionalInterrupt.h | 7 +- cores/esp32/HardwareSerial.cpp | 11 +++ cores/esp32/io_pin_remap.h | 138 ++++++++++++++++++++++++++++++ cores/esp32/main.cpp | 2 +- libraries/ESP_I2S/src/ESP_I2S.cpp | 26 +++--- libraries/SD_MMC/src/SD_MMC.cpp | 10 +++ libraries/SPI/src/SPI.cpp | 1 + 8 files changed, 184 insertions(+), 22 deletions(-) create mode 100644 cores/esp32/io_pin_remap.h diff --git a/cores/esp32/Arduino.h b/cores/esp32/Arduino.h index 2756f6f3cb4..2c075f930ec 100644 --- a/cores/esp32/Arduino.h +++ b/cores/esp32/Arduino.h @@ -110,13 +110,13 @@ #define analogInPinToBit(P) (P) #if SOC_GPIO_PIN_COUNT <= 32 #define digitalPinToPort(pin) (0) -#define digitalPinToBitMask(pin) (1UL << (pin)) +#define digitalPinToBitMask(pin) (1UL << digitalPinToGPIONumber(pin)) #define portOutputRegister(port) ((volatile uint32_t*)GPIO_OUT_REG) #define portInputRegister(port) ((volatile uint32_t*)GPIO_IN_REG) #define portModeRegister(port) ((volatile uint32_t*)GPIO_ENABLE_REG) #elif SOC_GPIO_PIN_COUNT <= 64 -#define digitalPinToPort(pin) (((pin)>31)?1:0) -#define digitalPinToBitMask(pin) (1UL << (((pin)>31)?((pin)-32):(pin))) +#define digitalPinToPort(pin) ((digitalPinToGPIONumber(pin)>31)?1:0) +#define digitalPinToBitMask(pin) (1UL << (digitalPinToGPIONumber(pin)&31)) #define portOutputRegister(port) ((volatile uint32_t*)((port)?GPIO_OUT1_REG:GPIO_OUT_REG)) #define portInputRegister(port) ((volatile uint32_t*)((port)?GPIO_IN1_REG:GPIO_IN_REG)) #define portModeRegister(port) ((volatile uint32_t*)((port)?GPIO_ENABLE1_REG:GPIO_ENABLE_REG)) @@ -138,8 +138,8 @@ #endif #define EXTERNAL_NUM_INTERRUPTS NUM_DIGITAL_PINS // All GPIOs #define analogInputToDigitalPin(p) (((p) struct InterruptArgStructure { - std::function interruptFunction; + std::function interruptFunction; }; -void attachInterrupt(uint8_t pin, std::function intRoutine, int mode); - +// The extra set of parentheses here prevents macros defined +// in io_pin_remap.h from applying to this declaration. +void (attachInterrupt)(uint8_t pin, std::function intRoutine, int mode); #endif /* CORE_CORE_FUNCTIONALINTERRUPT_H_ */ diff --git a/cores/esp32/HardwareSerial.cpp b/cores/esp32/HardwareSerial.cpp index fdec193774a..7792b8e039b 100644 --- a/cores/esp32/HardwareSerial.cpp +++ b/cores/esp32/HardwareSerial.cpp @@ -5,6 +5,7 @@ #include #include "pins_arduino.h" +#include "io_pin_remap.h" #include "HardwareSerial.h" #include "soc/soc_caps.h" #include "driver/uart.h" @@ -325,6 +326,10 @@ void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, in } } + // map logical pins to GPIO numbers + rxPin = digitalPinToGPIONumber(rxPin); + txPin = digitalPinToGPIONumber(txPin); + if(_uart) { // in this case it is a begin() over a previous begin() - maybe to change baud rate // thus do not disable debug output @@ -500,6 +505,12 @@ void HardwareSerial::setRxInvert(bool invert) // can be called after or before begin() bool HardwareSerial::setPins(int8_t rxPin, int8_t txPin, int8_t ctsPin, int8_t rtsPin) { + // map logical pins to GPIO numbers + rxPin = digitalPinToGPIONumber(rxPin); + txPin = digitalPinToGPIONumber(txPin); + ctsPin = digitalPinToGPIONumber(ctsPin); + rtsPin = digitalPinToGPIONumber(rtsPin); + // uartSetPins() checks if pins are valid and, if necessary, detaches the previous ones return uartSetPins(_uart_nr, rxPin, txPin, ctsPin, rtsPin); } diff --git a/cores/esp32/io_pin_remap.h b/cores/esp32/io_pin_remap.h new file mode 100644 index 00000000000..32fd0eb22cd --- /dev/null +++ b/cores/esp32/io_pin_remap.h @@ -0,0 +1,138 @@ +#ifndef __IO_PIN_REMAP_H__ +#define __IO_PIN_REMAP_H__ + +#include "Arduino.h" + +#if defined(BOARD_HAS_PIN_REMAP) && !defined(BOARD_USES_HW_GPIO_NUMBERS) + +// Pin remapping functions +int8_t digitalPinToGPIONumber(int8_t digitalPin); +int8_t gpioNumberToDigitalPin(int8_t gpioNumber); + +// Apply pin remapping to API only when building libraries and user sketch +#ifndef ARDUINO_CORE_BUILD + +// Override APIs requiring pin remapping + +// cores/esp32/Arduino.h +#define pulseInLong(pin, args...) pulseInLong(digitalPinToGPIONumber(pin), args) +#define pulseIn(pin, args...) pulseIn(digitalPinToGPIONumber(pin), args) +#define noTone(_pin) noTone(digitalPinToGPIONumber(_pin)) +#define tone(_pin, args...) tone(digitalPinToGPIONumber(_pin), args) + +// cores/esp32/esp32-hal.h +#define analogGetChannel(pin) analogGetChannel(digitalPinToGPIONumber(pin)) +#define analogWrite(pin, value) analogWrite(digitalPinToGPIONumber(pin), value) +#define analogWriteFrequency(pin, freq) analogWriteFrequency(digitalPinToGPIONumber(pin), freq) +#define analogWriteResolution(pin, bits) analogWriteResolution(digitalPinToGPIONumber(pin), bits) + +// cores/esp32/esp32-hal-adc.h +#define analogRead(pin) analogRead(digitalPinToGPIONumber(pin)) +#define analogReadMilliVolts(pin) analogReadMilliVolts(digitalPinToGPIONumber(pin)) +#define analogSetPinAttenuation(pin, attenuation) analogSetPinAttenuation(digitalPinToGPIONumber(pin), attenuation) + +// cores/esp32/esp32-hal-dac.h +#define dacDisable(pin) dacDisable(digitalPinToGPIONumber(pin)) +#define dacWrite(pin, value) dacWrite(digitalPinToGPIONumber(pin), value) + +// cores/esp32/esp32-hal-gpio.h +#define analogChannelToDigitalPin(channel) gpioNumberToDigitalPin(analogChannelToDigitalPin(channel)) +#define digitalPinToAnalogChannel(pin) digitalPinToAnalogChannel(digitalPinToGPIONumber(pin)) +#define digitalPinToTouchChannel(pin) digitalPinToTouchChannel(digitalPinToGPIONumber(pin)) +#define digitalRead(pin) digitalRead(digitalPinToGPIONumber(pin)) +#define attachInterruptArg(pin, fcn, arg, mode) attachInterruptArg(digitalPinToGPIONumber(pin), fcn, arg, mode) +#define attachInterrupt(pin, fcn, mode) attachInterrupt(digitalPinToGPIONumber(pin), fcn, mode) +#define detachInterrupt(pin) detachInterrupt(digitalPinToGPIONumber(pin)) +#define digitalWrite(pin, val) digitalWrite(digitalPinToGPIONumber(pin), val) +#define pinMode(pin, mode) pinMode(digitalPinToGPIONumber(pin), mode) + +// cores/esp32/esp32-hal-i2c.h +#define i2cInit(i2c_num, sda, scl, clk_speed) i2cInit(i2c_num, digitalPinToGPIONumber(sda), digitalPinToGPIONumber(scl), clk_speed) + +// cores/esp32/esp32-hal-i2c-slave.h +#define i2cSlaveInit(num, sda, scl, slaveID, frequency, rx_len, tx_len) i2cSlaveInit(num, digitalPinToGPIONumber(sda), digitalPinToGPIONumber(scl), slaveID, frequency, rx_len, tx_len) + +// cores/esp32/esp32-hal-ledc.h +#define ledcAttach(pin, freq, resolution) ledcAttach(digitalPinToGPIONumber(pin), freq, resolution) +#define ledcWrite(pin, duty) ledcWrite(digitalPinToGPIONumber(pin), duty) +#define ledcWriteTone(pin, freq) ledcWriteTone(digitalPinToGPIONumber(pin), freq) +#define ledcWriteNote(pin, note, octave) ledcWriteNote(digitalPinToGPIONumber(pin), note, octave) +#define ledcRead(pin) ledcRead(digitalPinToGPIONumber(pin)) +#define ledcReadFreq(pin) ledcReadFreq(digitalPinToGPIONumber(pin)) +#define ledcDetach(pin) ledcDetach(digitalPinToGPIONumber(pin)) +#define ledcChangeFrequency(pin, freq, resolution) ledcChangeFrequency(digitalPinToGPIONumber(pin), freq, resolution) + +#define ledcFade(pin, start_duty, target_duty, max_fade_time_ms) ledcFade(digitalPinToGPIONumber(pin), start_duty, target_duty, max_fade_time_ms) +#define ledcFadeWithInterrupt(pin, start_duty, target_duty, max_fade_time_ms, userFunc) ledcFadeWithInterrupt(digitalPinToGPIONumber(pin), start_duty, target_duty, max_fade_time_ms, userFunc) +#define ledcFadeWithInterruptArg(pin, start_duty, target_duty, max_fade_time_ms, userFunc, arg) ledcFadeWithInterruptArg(digitalPinToGPIONumber(pin), start_duty, target_duty, max_fade_time_ms, userFunc, arg) + +// cores/esp32/esp32-hal-matrix.h +#define pinMatrixInAttach(pin, signal, inverted) pinMatrixInAttach(digitalPinToGPIONumber(pin), signal, inverted) +#define pinMatrixOutAttach(pin, function, invertOut, invertEnable) pinMatrixOutAttach(digitalPinToGPIONumber(pin), function, invertOut, invertEnable) +#define pinMatrixOutDetach(pin, invertOut, invertEnable) pinMatrixOutDetach(digitalPinToGPIONumber(pin), invertOut, invertEnable) + +// cores/esp32/esp32-hal-periman.h +#define perimanSetPinBus(pin, type, bus) perimanSetPinBus(digitalPinToGPIONumber(pin), type, bus) +#define perimanGetPinBus(pin, type) perimanGetPinBus(digitalPinToGPIONumber(pin), type) +#define perimanGetPinBusType(pin) perimanGetPinBusType(digitalPinToGPIONumber(pin)) +#define perimanPinIsValid(pin) perimanPinIsValid(digitalPinToGPIONumber(pin)) + +// cores/esp32/esp32-hal-rgb-led.h +#define neopixelWrite(pin, red_val, green_val, blue_val) neopixelWrite(digitalPinToGPIONumber(pin), red_val, green_val, blue_val) + +// cores/esp32/esp32-hal-rmt.h +#define rmtInit(pin, channel_direction, memsize, frequency_Hz) rmtInit(digitalPinToGPIONumber(pin), channel_direction, memsize, frequency_Hz) +#define rmtWrite(pin, data, num_rmt_symbols, timeout_ms) rmtWrite(digitalPinToGPIONumber(pin), data, num_rmt_symbols, timeout_ms) +#define rmtWriteAsync(pin, data, num_rmt_symbols) rmtWriteAsync(digitalPinToGPIONumber(pin), data, num_rmt_symbols) +#define rmtWriteLooping(pin, data, num_rmt_symbols) rmtWriteLooping(digitalPinToGPIONumber(pin), data, num_rmt_symbols) +#define rmtTransmitCompleted(pin) rmtTransmitCompleted(digitalPinToGPIONumber(pin)) +#define rmtRead(pin, data, num_rmt_symbols, timeout_ms) rmtRead(digitalPinToGPIONumber(pin), data, num_rmt_symbols, timeout_ms) +#define rmtReadAsync(pin, data, num_rmt_symbols) rmtReadAsync(digitalPinToGPIONumber(pin), data, num_rmt_symbols) +#define rmtReceiveCompleted(pin) rmtReceiveCompleted(digitalPinToGPIONumber(pin)) +#define rmtSetRxMaxThreshold(pin, idle_thres_ticks) rmtSetRxMaxThreshold(digitalPinToGPIONumber(pin), idle_thres_ticks) +#define rmtSetCarrier(pin, carrier_en, carrier_level, frequency_Hz, duty_percent) rmtSetCarrier(digitalPinToGPIONumber(pin), carrier_en, carrier_level, frequency_Hz, duty_percent) +#define rmtSetRxMinThreshold(pin, filter_pulse_ticks) rmtSetRxMinThreshold(digitalPinToGPIONumber(pin), filter_pulse_ticks) +#define rmtDeinit(pin) rmtDeinit(digitalPinToGPIONumber(pin)) + +// cores/esp32/esp32-hal-sigmadelta.h +#define sigmaDeltaAttach(pin, freq) sigmaDeltaAttach(digitalPinToGPIONumber(pin), freq) +#define sigmaDeltaWrite(pin, duty) sigmaDeltaWrite(digitalPinToGPIONumber(pin), duty) +#define sigmaDeltaDetach(pin) sigmaDeltaDetach(digitalPinToGPIONumber(pin)) + +// cores/esp32/esp32-hal-spi.h +#define spiAttachSCK(spi, sck) spiAttachSCK(spi, digitalPinToGPIONumber(sck)) +#define spiAttachMISO(spi, miso) spiAttachMISO(spi, digitalPinToGPIONumber(miso)) +#define spiAttachMOSI(spi, mosi) spiAttachMOSI(spi, digitalPinToGPIONumber(mosi)) +#define spiDetachSCK(spi, sck) spiDetachSCK(spi, digitalPinToGPIONumber(sck)) +#define spiDetachMISO(spi, miso) spiDetachMISO(spi, digitalPinToGPIONumber(miso)) +#define spiDetachMOSI(spi, mosi) spiDetachMOSI(spi, digitalPinToGPIONumber(mosi)) +#define spiAttachSS(spi, cs_num, ss) spiAttachSS(spi, cs_num, digitalPinToGPIONumber(ss)) +#define spiDetachSS(spi, ss) spiDetachSS(spi, digitalPinToGPIONumber(ss)) + +// cores/esp32/esp32-hal-touch.h +#define touchInterruptGetLastStatus(pin) touchInterruptGetLastStatus(digitalPinToGPIONumber(pin)) +#define touchRead(pin) touchRead(digitalPinToGPIONumber(pin)) +#define touchAttachInterruptArg(pin, userFunc, arg, threshold) touchAttachInterruptArg(digitalPinToGPIONumber(pin), userFunc, arg, threshold) +#define touchAttachInterrupt(pin, userFunc, threshold) touchAttachInterrupt(digitalPinToGPIONumber(pin), userFunc, threshold) +#define touchDetachInterrupt(pin) touchDetachInterrupt(digitalPinToGPIONumber(pin)) +#define touchSleepWakeUpEnable(pin, threshold) touchSleepWakeUpEnable(digitalPinToGPIONumber(pin), threshold) + +// cores/esp32/esp32-hal-uart.h +#define uartBegin(uart_nr, baudrate, config, rxPin, txPin, rx_buffer_size, tx_buffer_size, inverted, rxfifo_full_thrhd) \ + uartBegin(uart_nr, baudrate, config, digitalPinToGPIONumber(rxPin), digitalPinToGPIONumber(txPin), rx_buffer_size, tx_buffer_size, inverted, rxfifo_full_thrhd) +#define uartSetPins(uart, rxPin, txPin, ctsPin, rtsPin) \ + uartSetPins(uart, digitalPinToGPIONumber(rxPin), digitalPinToGPIONumber(txPin), digitalPinToGPIONumber(ctsPin), digitalPinToGPIONumber(rtsPin)) +#define uartDetachPins(uart, rxPin, txPin, ctsPin, rtsPin) \ + uartDetachPins(uart, digitalPinToGPIONumber(rxPin), digitalPinToGPIONumber(txPin), digitalPinToGPIONumber(ctsPin), digitalPinToGPIONumber(rtsPin)) + +#endif // ARDUINO_CORE_BUILD + +#else + +// pin remapping disabled: use stubs +#define digitalPinToGPIONumber(digitalPin) (digitalPin) +#define gpioNumberToDigitalPin(gpioNumber) (gpioNumber) + +#endif + +#endif /* __GPIO_PIN_REMAP_H__ */ diff --git a/cores/esp32/main.cpp b/cores/esp32/main.cpp index ea61cac067a..9de99f758dc 100644 --- a/cores/esp32/main.cpp +++ b/cores/esp32/main.cpp @@ -46,7 +46,7 @@ __attribute__((weak)) bool shouldPrintChipDebugReport(void) { void loopTask(void *pvParameters) { // sets UART0 (default console) RX/TX pins as already configured in boot or as defined in variants/pins_arduino.h - Serial0.setPins(SOC_RX0, SOC_TX0); + Serial0.setPins(gpioNumberToDigitalPin(SOC_RX0), gpioNumberToDigitalPin(SOC_TX0)); #if ARDUHAL_LOG_LEVEL >= ARDUHAL_LOG_LEVEL_DEBUG printBeforeSetupInfo(); #else diff --git a/libraries/ESP_I2S/src/ESP_I2S.cpp b/libraries/ESP_I2S/src/ESP_I2S.cpp index 7ae37c6844d..796192e37ee 100644 --- a/libraries/ESP_I2S/src/ESP_I2S.cpp +++ b/libraries/ESP_I2S/src/ESP_I2S.cpp @@ -230,11 +230,11 @@ bool I2SClass::i2sDetachBus(void * bus_pointer){ // Set pins for STD and TDM mode void I2SClass::setPins(int8_t bclk, int8_t ws, int8_t dout, int8_t din, int8_t mclk){ - _mclk = mclk; - _bclk = bclk; - _ws = ws; - _dout = dout; - _din = din; + _mclk = digitalPinToGPIONumber(mclk); + _bclk = digitalPinToGPIONumber(bclk); + _ws = digitalPinToGPIONumber(ws); + _dout = digitalPinToGPIONumber(dout); + _din = digitalPinToGPIONumber(din); } void I2SClass::setInverted(bool bclk, bool ws, bool mclk){ @@ -246,10 +246,10 @@ void I2SClass::setInverted(bool bclk, bool ws, bool mclk){ // Set pins for PDM TX mode #if SOC_I2S_SUPPORTS_PDM_TX void I2SClass::setPinsPdmTx(int8_t clk, int8_t dout0, int8_t dout1){ - _tx_clk = clk; - _tx_dout0 = dout0; + _tx_clk = digitalPinToGPIONumber(clk); + _tx_dout0 = digitalPinToGPIONumber(dout0); #if (SOC_I2S_PDM_MAX_TX_LINES > 1) - _tx_dout1 = dout1; + _tx_dout1 = digitalPinToGPIONumber(dout1); #endif } #endif @@ -257,12 +257,12 @@ void I2SClass::setPinsPdmTx(int8_t clk, int8_t dout0, int8_t dout1){ // Set pins for PDM RX mode #if SOC_I2S_SUPPORTS_PDM_RX void I2SClass::setPinsPdmRx(int8_t clk, int8_t din0, int8_t din1, int8_t din2, int8_t din3){ - _rx_clk = clk; - _rx_din0 = din0; + _rx_clk = digitalPinToGPIONumber(clk); + _rx_din0 = digitalPinToGPIONumber(din0); #if (SOC_I2S_PDM_MAX_RX_LINES > 1) - _rx_din1 = din1; - _rx_din2 = din2; - _rx_din3 = din3; + _rx_din1 = digitalPinToGPIONumber(din1); + _rx_din2 = digitalPinToGPIONumber(din2); + _rx_din3 = digitalPinToGPIONumber(din3); #endif } #endif diff --git a/libraries/SD_MMC/src/SD_MMC.cpp b/libraries/SD_MMC/src/SD_MMC.cpp index cdc41ca3c3b..625bd811911 100644 --- a/libraries/SD_MMC/src/SD_MMC.cpp +++ b/libraries/SD_MMC/src/SD_MMC.cpp @@ -13,6 +13,7 @@ // limitations under the License. #include "pins_arduino.h" +#include "io_pin_remap.h" #include "SD_MMC.h" #ifdef SOC_SDMMC_HOST_SUPPORTED #include "vfs_api.h" @@ -72,6 +73,15 @@ bool SDMMCFS::setPins(int clk, int cmd, int d0, int d1, int d2, int d3) log_e("SD_MMC.setPins must be called before SD_MMC.begin"); return false; } + + // map logical pins to GPIO numbers + clk = digitalPinToGPIONumber(clk); + cmd = digitalPinToGPIONumber(cmd); + d0 = digitalPinToGPIONumber(d0); + d1 = digitalPinToGPIONumber(d1); + d2 = digitalPinToGPIONumber(d2); + d3 = digitalPinToGPIONumber(d3); + #ifdef SOC_SDMMC_USE_GPIO_MATRIX // SoC supports SDMMC pin configuration via GPIO matrix. Save the pins for later use in SDMMCFS::begin. _pin_clk = (int8_t) clk; diff --git a/libraries/SPI/src/SPI.cpp b/libraries/SPI/src/SPI.cpp index 64607184e2c..251cc48c4fe 100644 --- a/libraries/SPI/src/SPI.cpp +++ b/libraries/SPI/src/SPI.cpp @@ -22,6 +22,7 @@ #include "SPI.h" #if SOC_GPSPI_SUPPORTED +#include "io_pin_remap.h" #include "esp32-hal-log.h" #if !CONFIG_DISABLE_HAL_LOCKS From 789ef89863a4212c6e60bf9dc6527cd2bf5a1c0a Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Fri, 25 Aug 2023 15:02:07 +0200 Subject: [PATCH 03/10] platform: remove previous build options if file is missing "touch" would create the file if not present, but not delete its contents if a previous run left the file in the build dir. --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 2bddce9e701..5fa9bc53f2e 100644 --- a/platform.txt +++ b/platform.txt @@ -136,7 +136,7 @@ recipe.hooks.prebuild.4.pattern.windows=cmd /c IF EXIST "{build.source.path}\boo # Check if custom build options exist in the sketch folder recipe.hooks.prebuild.5.pattern=bash -c "[ ! -f "{build.source.path}"/build_opt.h ] || cp -f "{build.source.path}"/build_opt.h "{build.path}"/build_opt.h" -recipe.hooks.prebuild.6.pattern=bash -c "[ -f "{build.path}"/build_opt.h ] || touch "{build.path}"/build_opt.h" +recipe.hooks.prebuild.6.pattern=bash -c "[ -f "{build.path}"/build_opt.h ] || : > "{build.path}"/build_opt.h" recipe.hooks.prebuild.5.pattern.windows=cmd /c if exist "{build.source.path}\build_opt.h" COPY /y "{build.source.path}\build_opt.h" "{build.path}\build_opt.h" recipe.hooks.prebuild.6.pattern.windows=cmd /c if not exist "{build.path}\build_opt.h" type nul > "{build.path}\build_opt.h" From 3bbeb7d7a025303eb0fb229dffee12d637748cee Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Wed, 23 Aug 2023 14:47:44 +0200 Subject: [PATCH 04/10] platform: make debug_custom.json file customizable by board --- platform.txt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/platform.txt b/platform.txt index 5fa9bc53f2e..230c2cb5287 100644 --- a/platform.txt +++ b/platform.txt @@ -115,6 +115,9 @@ build.openocdscript.esp32c6=esp32c6-builtin.cfg build.openocdscript.esp32c6=esp32h2-builtin.cfg build.openocdscript={build.openocdscript.{build.mcu}} +# Debug plugin configuration +build.debugconfig={build.mcu}.json + # Custom build options build.opt.name=build_opt.h build.opt.path={build.path}/{build.opt.name} @@ -156,8 +159,8 @@ recipe.hooks.postbuild.1.pattern=bash -c "[ {build.copy_jtag_files} -eq 0 ] || c recipe.hooks.postbuild.1.pattern.windows=cmd /c IF {build.copy_jtag_files}==1 COPY /y "{debug.server.openocd.scripts_dir}board\{build.openocdscript}" "{build.source.path}\debug.cfg" # Generate debug_custom.json -recipe.hooks.postbuild.2.pattern=bash -c "[ {build.copy_jtag_files} -eq 0 ] || cp -f "{runtime.platform.path}"/tools/ide-debug/{build.mcu}.json "{build.source.path}"/debug_custom.json" -recipe.hooks.postbuild.2.pattern.windows=cmd /c IF {build.copy_jtag_files}==1 COPY /y "{runtime.platform.path}\tools\ide-debug\{build.mcu}.json" "{build.source.path}\debug_custom.json" +recipe.hooks.postbuild.2.pattern=bash -c "[ {build.copy_jtag_files} -eq 0 ] || cp -f "{runtime.platform.path}"/tools/ide-debug/{build.debugconfig} "{build.source.path}"/debug_custom.json" +recipe.hooks.postbuild.2.pattern.windows=cmd /c IF {build.copy_jtag_files}==1 COPY /y "{runtime.platform.path}\tools\ide-debug\{build.debugconfig}" "{build.source.path}\debug_custom.json" # Generate chip.svd recipe.hooks.postbuild.3.pattern=bash -c "[ {build.copy_jtag_files} -eq 0 ] || cp -f "{runtime.platform.path}"/tools/ide-debug/svd/{build.mcu}.svd "{build.source.path}"/debug.svd" From 287254bf5ec251ca689dfe5586fab72c2fafd363 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Wed, 23 Aug 2023 14:49:27 +0200 Subject: [PATCH 05/10] platform: fix default debug prefix "debug.toolchain.prefix" must end with a dash, since only the tool name is appended to this string. The reason this is not a major issue is that the "debug_custom.json" file (copied in the sketch directory when debugging is enabled) forces its own prefix. And to make things more interesting, the "toolchainPrefix" entry in that file should _not_ end with a dash. --- platform.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/platform.txt b/platform.txt index 230c2cb5287..a4187f08242 100644 --- a/platform.txt +++ b/platform.txt @@ -224,7 +224,7 @@ pluggable_monitor.required.serial=builtin:serial-monitor debug.executable={build.path}/{build.project_name}.elf debug.toolchain=gcc debug.toolchain.path={tools.{build.tarch}-esp-elf-gdb.path}/bin/ -debug.toolchain.prefix={build.tarch}-{build.target}-elf +debug.toolchain.prefix={build.tarch}-{build.target}-elf- debug.server=openocd debug.server.openocd.script=debug.cfg From ea46fe99beeabc88a79fb0acfd28120439985418 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Thu, 26 Oct 2023 18:05:13 +0200 Subject: [PATCH 06/10] [pin_remap 3/3]: add Arduino Nano ESP32 board --- boards.txt | 71 ++++++++++- cores/esp32/USB.cpp | 13 +- package/package_esp32_index.template.json | 8 ++ platform.txt | 8 ++ tools/ide-debug/esp32s3-arduino.json | 18 +++ .../partitions/app3M_fat9M_fact512k_16MB.csv | 9 ++ .../app3M_spiffs9M_fact512k_16MB.csv | 8 ++ variants/arduino_nano_nora/dfu_callbacks.cpp | 116 ++++++++++++++++++ variants/arduino_nano_nora/double_tap.c | 68 ++++++++++ variants/arduino_nano_nora/double_tap.h | 20 +++ .../extra/nora_recovery/README.md | 49 ++++++++ .../extra/nora_recovery/nora_recovery.ino | 99 +++++++++++++++ .../extra/nora_recovery/nora_recovery.ino.bin | Bin 0 -> 302800 bytes variants/arduino_nano_nora/io_pin_remap.cpp | 72 +++++++++++ variants/arduino_nano_nora/pins_arduino.h | 108 ++++++++++++++++ variants/arduino_nano_nora/variant.cpp | 104 ++++++++++++++++ 16 files changed, 768 insertions(+), 3 deletions(-) create mode 100644 tools/ide-debug/esp32s3-arduino.json create mode 100644 tools/partitions/app3M_fat9M_fact512k_16MB.csv create mode 100644 tools/partitions/app3M_spiffs9M_fact512k_16MB.csv create mode 100644 variants/arduino_nano_nora/dfu_callbacks.cpp create mode 100644 variants/arduino_nano_nora/double_tap.c create mode 100644 variants/arduino_nano_nora/double_tap.h create mode 100644 variants/arduino_nano_nora/extra/nora_recovery/README.md create mode 100644 variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino create mode 100644 variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino.bin create mode 100644 variants/arduino_nano_nora/io_pin_remap.cpp create mode 100644 variants/arduino_nano_nora/pins_arduino.h create mode 100644 variants/arduino_nano_nora/variant.cpp diff --git a/boards.txt b/boards.txt index 03b8a34b58c..28d6b4d897c 100644 --- a/boards.txt +++ b/boards.txt @@ -18,6 +18,7 @@ menu.MemoryType=Memory Type menu.EraseFlash=Erase All Flash Before Sketch Upload menu.JTAGAdapter=JTAG Adapter menu.ZigbeeMode=Zigbee Mode +menu.PinNumbers=Pin Numbering # Custom options menu.Revision=Board Revision @@ -29688,4 +29689,72 @@ sensebox_mcu_esp32s2.menu.EraseFlash.none.upload.erase_cmd= sensebox_mcu_esp32s2.menu.EraseFlash.all=Enabled sensebox_mcu_esp32s2.menu.EraseFlash.all.upload.erase_cmd=-e -############################################################## \ No newline at end of file +############################################################## + +nano_nora.name=Arduino Nano ESP32 +nano_nora.vid.0=0x2341 +nano_nora.pid.0=0x0070 +nano_nora.upload_port.0.vid=0x2341 +nano_nora.upload_port.0.pid=0x0070 + +nano_nora.bootloader.tool=esptool_py +nano_nora.bootloader.tool.default=esptool_py + +nano_nora.upload.tool=dfu-util +nano_nora.upload.tool.default=dfu-util +nano_nora.upload.tool.network=esp_ota +nano_nora.upload.protocol=serial +nano_nora.upload.maximum_size=3145728 +nano_nora.upload.maximum_data_size=327680 +nano_nora.upload.use_1200bps_touch=false +nano_nora.upload.wait_for_upload_port=false + +nano_nora.serial.disableDTR=false +nano_nora.serial.disableRTS=false + +nano_nora.build.tarch=xtensa +nano_nora.build.bootloader_addr=0x0 +nano_nora.build.target=esp32s3 +nano_nora.build.mcu=esp32s3 +nano_nora.build.core=esp32 +nano_nora.build.variant=arduino_nano_nora +nano_nora.build.board=NANO_ESP32 +nano_nora.build.code_debug=0 + +nano_nora.build.usb_mode=0 +nano_nora.build.cdc_on_boot=1 +nano_nora.build.msc_on_boot=0 +nano_nora.build.dfu_on_boot=1 +nano_nora.build.f_cpu=240000000L +nano_nora.build.flash_size=16MB +nano_nora.build.flash_freq=80m +nano_nora.build.flash_mode=dio +nano_nora.build.boot=qio +nano_nora.build.boot_freq=80m +nano_nora.build.partitions=app3M_fat9M_fact512k_16MB +nano_nora.build.defines=-DBOARD_HAS_PIN_REMAP {build.disable_pin_remap} -DBOARD_HAS_PSRAM '-DUSB_MANUFACTURER="Arduino"' '-DUSB_PRODUCT="Nano ESP32"' +nano_nora.build.loop_core=-DARDUINO_RUNNING_CORE=1 +nano_nora.build.event_core=-DARDUINO_EVENT_RUNNING_CORE=1 +nano_nora.build.psram_type=opi +nano_nora.build.memory_type={build.boot}_{build.psram_type} +nano_nora.build.disable_pin_remap= + +nano_nora.tools.esptool_py.program.pattern_args=--chip {build.mcu} --port "{serial.port}" --before default_reset --after hard_reset write_flash -z --flash_mode {build.flash_mode} --flash_freq {build.flash_freq} --flash_size {build.flash_size} {build.bootloader_addr} "{build.path}/{build.project_name}.bootloader.bin" 0x8000 "{build.path}/{build.project_name}.partitions.bin" 0xe000 "{runtime.platform.path}/tools/partitions/boot_app0.bin" 0xf70000 "{build.variant.path}/extra/nora_recovery/nora_recovery.ino.bin" 0x10000 "{build.path}/{build.project_name}.bin" +nano_nora.tools.esptool_py.erase.pattern_args=--chip {build.mcu} --port "{serial.port}" --before default_reset --after hard_reset erase_flash + +nano_nora.menu.PartitionScheme.default=With FAT partition (default) +nano_nora.menu.PartitionScheme.spiffs=With SPIFFS partition (advanced) +nano_nora.menu.PartitionScheme.spiffs.build.partitions=app3M_spiffs9M_fact512k_16MB + +nano_nora.menu.PinNumbers.default=By Arduino pin (default) +nano_nora.menu.PinNumbers.byGPIONumber=By GPIO number (legacy) +nano_nora.menu.PinNumbers.byGPIONumber.build.disable_pin_remap=-DBOARD_USES_HW_GPIO_NUMBERS + +nano_nora.menu.USBMode.default=Normal mode (TinyUSB) +nano_nora.menu.USBMode.hwcdc=Debug mode (Hardware CDC) +nano_nora.menu.USBMode.hwcdc.build.usb_mode=1 +nano_nora.menu.USBMode.hwcdc.build.copy_jtag_files=1 +nano_nora.menu.USBMode.hwcdc.build.openocdscript=esp32s3-builtin.cfg +nano_nora.menu.USBMode.hwcdc.build.debugconfig=esp32s3-arduino.json + +############################################################## diff --git a/cores/esp32/USB.cpp b/cores/esp32/USB.cpp index 247f6887aa9..ad1df4c22e8 100644 --- a/cores/esp32/USB.cpp +++ b/cores/esp32/USB.cpp @@ -51,7 +51,11 @@ #define USB_WEBUSB_URL "https://espressif.github.io/arduino-esp32/webusb.html" #endif -#if CFG_TUD_DFU_RUNTIME +#if CFG_TUD_DFU +__attribute__((weak)) uint16_t load_dfu_ota_descriptor(uint8_t * dst, uint8_t * itf) { + return 0; +} +#elif CFG_TUD_DFU_RUNTIME static uint16_t load_dfu_descriptor(uint8_t * dst, uint8_t * itf) { #define DFU_ATTRS (DFU_ATTR_CAN_DOWNLOAD | DFU_ATTR_CAN_UPLOAD | DFU_ATTR_MANIFESTATION_TOLERANT) @@ -65,6 +69,9 @@ static uint16_t load_dfu_descriptor(uint8_t * dst, uint8_t * itf) memcpy(dst, descriptor, TUD_DFU_RT_DESC_LEN); return TUD_DFU_RT_DESC_LEN; } +#endif /* CFG_TUD_DFU_RUNTIME */ + +#if CFG_TUD_DFU_RUNTIME // Invoked on DFU_DETACH request to reboot to the bootloader void tud_dfu_runtime_reboot_to_dfu_cb(void) { @@ -207,7 +214,9 @@ ESPUSB::operator bool() const } bool ESPUSB::enableDFU(){ -#if CFG_TUD_DFU_RUNTIME +#if CFG_TUD_DFU + return tinyusb_enable_interface(USB_INTERFACE_DFU, TUD_DFU_DESC_LEN(1), load_dfu_ota_descriptor) == ESP_OK; +#elif CFG_TUD_DFU_RUNTIME return tinyusb_enable_interface(USB_INTERFACE_DFU, TUD_DFU_RT_DESC_LEN, load_dfu_descriptor) == ESP_OK; #endif /* CFG_TUD_DFU_RUNTIME */ return false; diff --git a/package/package_esp32_index.template.json b/package/package_esp32_index.template.json index 7d9b0e60fed..9c6324af2c4 100644 --- a/package/package_esp32_index.template.json +++ b/package/package_esp32_index.template.json @@ -33,6 +33,9 @@ }, { "name": "ESP32-C3 Dev Board" + }, + { + "name": "Arduino Nano ESP32" } ], "toolsDependencies": [ @@ -90,6 +93,11 @@ "packager": "esp32", "name": "mklittlefs", "version": "3.0.0-gnu12-dc7f933" + }, + { + "packager": "arduino", + "name": "dfu-util", + "version": "0.11.0-arduino5" } ] } diff --git a/platform.txt b/platform.txt index a4187f08242..3286cb93783 100644 --- a/platform.txt +++ b/platform.txt @@ -277,3 +277,11 @@ tools.esp_ota.upload.protocol=network tools.esp_ota.upload.field.password=Password tools.esp_ota.upload.field.password.secret=true tools.esp_ota.upload.pattern={cmd} -i {upload.port.address} -p {upload.port.properties.port} --auth={upload.field.password} -f "{build.path}/{build.project_name}.bin" + +## Upload Sketch Through DFU OTA +## ------------------------------------------- +tools.dfu-util.path={runtime.tools.dfu-util-0.11.0-arduino5.path} +tools.dfu-util.cmd=dfu-util +tools.dfu-util.upload.params.verbose=-d +tools.dfu-util.upload.params.quiet= +tools.dfu-util.upload.pattern="{path}/{cmd}" --device {vid.0}:{pid.0} -D "{build.path}/{build.project_name}.bin" -Q diff --git a/tools/ide-debug/esp32s3-arduino.json b/tools/ide-debug/esp32s3-arduino.json new file mode 100644 index 00000000000..559d2878cbe --- /dev/null +++ b/tools/ide-debug/esp32s3-arduino.json @@ -0,0 +1,18 @@ +{ + "name":"Arduino on ESP32-S3", + "toolchainPrefix":"xtensa-esp32s3-elf", + "svdFile":"debug.svd", + "request":"attach", + "overrideAttachCommands":[ + "set remote hardware-watchpoint-limit 2", + "monitor reset halt", + "monitor gdb_sync", + "thb setup", + "interrupt" + ], + "overrideRestartCommands":[ + "monitor reset halt", + "monitor gdb_sync", + "interrupt" + ] +} diff --git a/tools/partitions/app3M_fat9M_fact512k_16MB.csv b/tools/partitions/app3M_fat9M_fact512k_16MB.csv new file mode 100644 index 00000000000..dac4603e01a --- /dev/null +++ b/tools/partitions/app3M_fat9M_fact512k_16MB.csv @@ -0,0 +1,9 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x5000, +otadata, data, ota, 0xe000, 0x2000, +app0, app, ota_0, 0x10000, 0x300000, +app1, app, ota_1, 0x310000, 0x300000, +ffat, data, fat, 0x610000, 0x960000, +factory, app, factory, 0xF70000, 0x80000, +coredump, data, coredump, 0xFF0000, 0x10000, +# to create/use ffat, see https://github.com/marcmerlin/esp32_fatfsimage diff --git a/tools/partitions/app3M_spiffs9M_fact512k_16MB.csv b/tools/partitions/app3M_spiffs9M_fact512k_16MB.csv new file mode 100644 index 00000000000..3b8909da325 --- /dev/null +++ b/tools/partitions/app3M_spiffs9M_fact512k_16MB.csv @@ -0,0 +1,8 @@ +# Name, Type, SubType, Offset, Size, Flags +nvs, data, nvs, 0x9000, 0x5000, +otadata, data, ota, 0xe000, 0x2000, +app0, app, ota_0, 0x10000, 0x300000, +app1, app, ota_1, 0x310000, 0x300000, +spiffs, data, spiffs, 0x610000, 0x960000, +factory, app, factory, 0xF70000, 0x80000, +coredump, data, coredump, 0xFF0000, 0x10000, diff --git a/variants/arduino_nano_nora/dfu_callbacks.cpp b/variants/arduino_nano_nora/dfu_callbacks.cpp new file mode 100644 index 00000000000..3695db80ba6 --- /dev/null +++ b/variants/arduino_nano_nora/dfu_callbacks.cpp @@ -0,0 +1,116 @@ +#include "Arduino.h" + +#include +#include + +// defines an "Update" object accessed only by this translation unit +// (also, the object requires MD5Builder internally) +namespace { +// ignore '{anonymous}::MD5Builder::...() defined but not used' warnings +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wunused-function" +#include "../../libraries/Update/src/Updater.cpp" +#include "../../cores/esp32/MD5Builder.cpp" +#pragma GCC diagnostic pop +} + +#define ALT_COUNT 1 + +//--------------------------------------------------------------------+ +// DFU callbacks +// Note: alt is used as the partition number, in order to support multiple partitions like FLASH, EEPROM, etc. +//--------------------------------------------------------------------+ + +uint16_t load_dfu_ota_descriptor(uint8_t * dst, uint8_t * itf) +{ +#define DFU_ATTRS (DFU_ATTR_CAN_DOWNLOAD | DFU_ATTR_CAN_UPLOAD | DFU_ATTR_MANIFESTATION_TOLERANT) + + uint8_t str_index = tinyusb_add_string_descriptor("Arduino DFU"); + uint8_t descriptor[TUD_DFU_DESC_LEN(ALT_COUNT)] = { + // Interface number, string index, attributes, detach timeout, transfer size */ + TUD_DFU_DESCRIPTOR(*itf, ALT_COUNT, str_index, DFU_ATTRS, 100, CFG_TUD_DFU_XFER_BUFSIZE), + }; + *itf+=1; + memcpy(dst, descriptor, TUD_DFU_DESC_LEN(ALT_COUNT)); + return TUD_DFU_DESC_LEN(ALT_COUNT); +} + +// Invoked right before tud_dfu_download_cb() (state=DFU_DNBUSY) or tud_dfu_manifest_cb() (state=DFU_MANIFEST) +// Application return timeout in milliseconds (bwPollTimeout) for the next download/manifest operation. +// During this period, USB host won't try to communicate with us. +uint32_t tud_dfu_get_timeout_cb(uint8_t alt, uint8_t state) +{ + if ( state == DFU_DNBUSY ) + { + // longest delay for Flash writing + return 10; + } + else if (state == DFU_MANIFEST) + { + // time for esp32_ota_set_boot_partition to check final image + return 100; + } + + return 0; +} + +// Invoked when received DFU_DNLOAD (wLength>0) following by DFU_GETSTATUS (state=DFU_DNBUSY) requests +// This callback could be returned before flashing op is complete (async). +// Once finished flashing, application must call tud_dfu_finish_flashing() +void tud_dfu_download_cb(uint8_t alt, uint16_t block_num, uint8_t const* data, uint16_t length) +{ + if (!Update.isRunning()) + { + // this is the first data block, start update if possible + if (!Update.begin()) + { + tud_dfu_finish_flashing(DFU_STATUS_ERR_TARGET); + return; + } + } + + // write a block of data to Flash + // XXX: Update API is needlessly non-const + size_t written = Update.write(const_cast(data), length); + tud_dfu_finish_flashing((written == length) ? DFU_STATUS_OK : DFU_STATUS_ERR_WRITE); +} + +// Invoked when download process is complete, received DFU_DNLOAD (wLength=0) following by DFU_GETSTATUS (state=Manifest) +// Application can do checksum, or actual flashing if buffered entire image previously. +// Once finished flashing, application must call tud_dfu_finish_flashing() +void tud_dfu_manifest_cb(uint8_t alt) +{ + (void) alt; + bool ok = Update.end(true); + + // flashing op for manifest is complete + tud_dfu_finish_flashing(ok? DFU_STATUS_OK : DFU_STATUS_ERR_VERIFY); +} + +// Invoked when received DFU_UPLOAD request +// Application must populate data with up to length bytes and +// Return the number of written bytes +uint16_t tud_dfu_upload_cb(uint8_t alt, uint16_t block_num, uint8_t* data, uint16_t length) +{ + (void) alt; + (void) block_num; + (void) data; + (void) length; + + // not implemented + return 0; +} + +// Invoked when the Host has terminated a download or upload transfer +void tud_dfu_abort_cb(uint8_t alt) +{ + (void) alt; + // ignore +} + +// Invoked when a DFU_DETACH request is received +void tud_dfu_detach_cb(void) +{ + // done, reboot + esp_restart(); +} diff --git a/variants/arduino_nano_nora/double_tap.c b/variants/arduino_nano_nora/double_tap.c new file mode 100644 index 00000000000..b98d5dded64 --- /dev/null +++ b/variants/arduino_nano_nora/double_tap.c @@ -0,0 +1,68 @@ +#include + +#include +#include +#include + +#include "double_tap.h" + +#define NUM_TOKENS 3 +static const uint32_t MAGIC_TOKENS[NUM_TOKENS] = { + 0xf01681de, 0xbd729b29, 0xd359be7a, +}; + +static void *magic_area; +static uint32_t backup_area[NUM_TOKENS]; + +#if ESP_IDF_VERSION >= ESP_IDF_VERSION_VAL(5, 0, 0) +// Current IDF does not map external RAM to a fixed address. +// The actual VMA depends on other enabled devices, so the precise +// location must be discovered. +#include +#include +static uintptr_t get_extram_data_high(void) { + // get a pointer into SRAM area (only the address is useful) + void *psram_ptr = heap_caps_malloc(16, MALLOC_CAP_SPIRAM); + heap_caps_free(psram_ptr); + + // keep moving backwards until leaving PSRAM area + uintptr_t psram_base_addr = (uintptr_t) psram_ptr; + psram_base_addr &= ~(CONFIG_MMU_PAGE_SIZE - 1); // align to start of page + while (esp_psram_check_ptr_addr((void *) psram_base_addr)) { + psram_base_addr -= CONFIG_MMU_PAGE_SIZE; + } + + // offset is one page from start of PSRAM + return psram_base_addr + CONFIG_MMU_PAGE_SIZE + esp_psram_get_size(); +} +#else +#include +#define get_extram_data_high() ((uintptr_t) SOC_EXTRAM_DATA_HIGH) +#endif + + +void double_tap_init(void) { + // magic location block ends 0x20 bytes from end of PSRAM + magic_area = (void *) (get_extram_data_high() - 0x20 - sizeof(MAGIC_TOKENS)); +} + +void double_tap_mark() { + memcpy(backup_area, magic_area, sizeof(MAGIC_TOKENS)); + memcpy(magic_area, MAGIC_TOKENS, sizeof(MAGIC_TOKENS)); + Cache_WriteBack_Addr((uintptr_t) magic_area, sizeof(MAGIC_TOKENS)); +} + +void double_tap_invalidate() { + if (memcmp(backup_area, MAGIC_TOKENS, sizeof(MAGIC_TOKENS))) { + // different contents: restore backup + memcpy(magic_area, backup_area, sizeof(MAGIC_TOKENS)); + } else { + // clear memory + memset(magic_area, 0, sizeof(MAGIC_TOKENS)); + } + Cache_WriteBack_Addr((uintptr_t) magic_area, sizeof(MAGIC_TOKENS)); +} + +bool double_tap_check_match() { + return (memcmp(magic_area, MAGIC_TOKENS, sizeof(MAGIC_TOKENS)) == 0); +} diff --git a/variants/arduino_nano_nora/double_tap.h b/variants/arduino_nano_nora/double_tap.h new file mode 100644 index 00000000000..e797f4f64fd --- /dev/null +++ b/variants/arduino_nano_nora/double_tap.h @@ -0,0 +1,20 @@ +#ifndef __DOUBLE_TAP_H__ +#define __DOUBLE_TAP_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +void double_tap_init(void); +void double_tap_mark(void); +void double_tap_invalidate(void); +bool double_tap_check_match(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __DOUBLE_TAP_H__ */ diff --git a/variants/arduino_nano_nora/extra/nora_recovery/README.md b/variants/arduino_nano_nora/extra/nora_recovery/README.md new file mode 100644 index 00000000000..786027dc6e3 --- /dev/null +++ b/variants/arduino_nano_nora/extra/nora_recovery/README.md @@ -0,0 +1,49 @@ + +# Arduino Nano Nora Recovery Sketch + +This sketch implements the DFU recovery mode logic, called by all sketches +when a double tap on the RESET button is detected. It should not be uploaded +as any other sketch; instead, this should be compiled and then flashed in +the module's `factory` partition. + +## Compilation + +The binary can be compiled with the Arduino 2.x IDE or CLI using the +`nano_nora` variant. In particular, using the CLI the resulting binary +can be exported to the `build` directory with the `-e` switch to +`arduino-cli compile`. + +## Automatic installation + +By replacing the binary in the current folder, automatic installation +can be performed by running the "Upload with Programmer" action on any +sketch in the Arduino 2.x IDE or CLI. In particular, using the CLI the +binary can be installed via the command: + +``` +arduino-cli compile -u --programmer esptool +``` + +## Manual installation + +Once compiled, the binary can also be installed on a board using `esptool.py` +with the following command: + +``` +esptool.py --chip esp32s3 --port "/dev/ttyACM0" --baud 921600 --before default_reset --after hard_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size 16MB 0xF70000 "nora_recovery.ino.bin" +``` + +where: +- `esptool.py` is located in your core's install path under `tools/esptool_py`; +- `/dev/ttyACM0` is the serial port exposed by the board to be used; +- `0xF70000` is the factory partition address (make sure it matches the + offset in the variant's `{build.partitions}` file); +- `nora_recovery.ino.bin` is the compiled sketch image. + +Due to a BSP issue, the first call to `esptool.py` will enter the hardware +bootloader for programming, but fail with an "Input/output error". This is +a known issue; calling the program again with the same arguments will now +work correctly. + +Once flashing is complete, a power cycle (or RESET button tap) is required +to leave the `esptool.py` flashing mode and load user sketches. diff --git a/variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino b/variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino new file mode 100644 index 00000000000..e8ec998d9ab --- /dev/null +++ b/variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino @@ -0,0 +1,99 @@ +#include "USB.h" + +#define USB_TIMEOUT_MS 15000 +#define POLL_DELAY_MS 60 +#define FADESTEP 8 + +void pulse_led() { + static uint32_t pulse_width = 0; + static uint8_t dir = 0; + + if (dir) { + pulse_width -= FADESTEP; + if (pulse_width < FADESTEP) { + dir = 0U; + pulse_width = FADESTEP; + } + } else { + pulse_width += FADESTEP; + if (pulse_width > 255) { + dir = 1U; + pulse_width = 255; + } + } + + analogWrite(LED_GREEN, pulse_width); +} + +#include +#include +#include +#include +const esp_partition_t *find_previous_firmware() { + extern bool _recovery_active; + if (!_recovery_active) { + // user flashed this recovery sketch to an OTA partition + // stay here and wait for a proper firmware + return NULL; + } + + // booting from factory partition, look for a valid OTA image + esp_partition_iterator_t it = esp_partition_find(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_ANY, NULL); + for (; it != NULL; it = esp_partition_next(it)) { + const esp_partition_t *part = esp_partition_get(it); + if (part->subtype != ESP_PARTITION_SUBTYPE_APP_FACTORY) { + esp_partition_pos_t candidate = { part->address, part->size }; + esp_image_metadata_t meta; + if (esp_image_verify(ESP_IMAGE_VERIFY_SILENT, &candidate, &meta) == ESP_OK) { + // found, use it + return part; + } + } + } + + return NULL; +} + +const esp_partition_t *user_part = NULL; + +void setup() { + user_part = find_previous_firmware(); + if (user_part) + esp_ota_set_boot_partition(user_part); + + extern bool _recovery_marker_found; + if (!_recovery_marker_found && user_part) { + // recovery marker not found, probable cold start + // try starting previous firmware immediately + esp_restart(); + } + + // recovery marker found, or nothing else to load + printf("Recovery firmware started, waiting for USB\r\n"); +} + +void loop() { + static int elapsed_ms = 0; + + pulse_led(); + delay(POLL_DELAY_MS); + if (USB) { + // wait indefinitely for DFU to complete + elapsed_ms = 0; + } else { + // wait for USB connection + elapsed_ms += POLL_DELAY_MS; + } + + if (elapsed_ms > USB_TIMEOUT_MS) { + elapsed_ms = 0; + // timed out, try loading previous firmware + if (user_part) { + // there was a valid FW image, load it + analogWrite(LED_GREEN, 255); + printf("Leaving recovery firmware\r\n"); + delay(200); + esp_restart(); // does not return + } + } +} diff --git a/variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino.bin b/variants/arduino_nano_nora/extra/nora_recovery/nora_recovery.ino.bin new file mode 100644 index 0000000000000000000000000000000000000000..ee5e7d5452e2dffef3c678b2a6aa91fbfa919da4 GIT binary patch literal 302800 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 z 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 QQ}lHL^PjE-Z= NUM_DIGITAL_PINS)) + return -1; + return TO_GPIO_NUMBER[digitalPin]; +} + +int8_t gpioNumberToDigitalPin(int8_t gpioNumber) +{ + if (gpioNumber < 0) + return -1; + + // slow linear table lookup + for (int8_t digitalPin = 0; digitalPin < NUM_DIGITAL_PINS; ++digitalPin) { + if (TO_GPIO_NUMBER[digitalPin] == gpioNumber) + return digitalPin; + } + + // not found + return -1; +} + +#endif diff --git a/variants/arduino_nano_nora/pins_arduino.h b/variants/arduino_nano_nora/pins_arduino.h new file mode 100644 index 00000000000..ea5d882573c --- /dev/null +++ b/variants/arduino_nano_nora/pins_arduino.h @@ -0,0 +1,108 @@ +#ifndef Pins_Arduino_h +#define Pins_Arduino_h + +#include + +#define USB_VID 0x2341 +#define USB_PID 0x0070 + +#ifndef __cplusplus +#define constexpr const +#endif + +// primary pin names + +#if defined(BOARD_HAS_PIN_REMAP) && !defined(BOARD_USES_HW_GPIO_NUMBERS) + +// Arduino style definitions (API uses Dx) + +static constexpr uint8_t D0 = 0; // also RX +static constexpr uint8_t D1 = 1; // also TX +static constexpr uint8_t D2 = 2; +static constexpr uint8_t D3 = 3; // also CTS +static constexpr uint8_t D4 = 4; // also DSR +static constexpr uint8_t D5 = 5; +static constexpr uint8_t D6 = 6; +static constexpr uint8_t D7 = 7; +static constexpr uint8_t D8 = 8; +static constexpr uint8_t D9 = 9; +static constexpr uint8_t D10 = 10; // also SS +static constexpr uint8_t D11 = 11; // also MOSI +static constexpr uint8_t D12 = 12; // also MISO +static constexpr uint8_t D13 = 13; // also SCK, LED_BUILTIN +static constexpr uint8_t LED_RED = 14; +static constexpr uint8_t LED_GREEN = 15; +static constexpr uint8_t LED_BLUE = 16; // also RTS + +static constexpr uint8_t A0 = 17; // also DTR +static constexpr uint8_t A1 = 18; +static constexpr uint8_t A2 = 19; +static constexpr uint8_t A3 = 20; +static constexpr uint8_t A4 = 21; // also SDA +static constexpr uint8_t A5 = 22; // also SCL +static constexpr uint8_t A6 = 23; +static constexpr uint8_t A7 = 24; + +#else + +// ESP32-style definitions (API uses GPIOx) + +static constexpr uint8_t D0 = 44; // also RX +static constexpr uint8_t D1 = 43; // also TX +static constexpr uint8_t D2 = 5; +static constexpr uint8_t D3 = 6; // also CTS +static constexpr uint8_t D4 = 7; // also DSR +static constexpr uint8_t D5 = 8; +static constexpr uint8_t D6 = 9; +static constexpr uint8_t D7 = 10; +static constexpr uint8_t D8 = 17; +static constexpr uint8_t D9 = 18; +static constexpr uint8_t D10 = 21; // also SS +static constexpr uint8_t D11 = 38; // also MOSI +static constexpr uint8_t D12 = 47; // also MISO +static constexpr uint8_t D13 = 48; // also SCK, LED_BUILTIN +static constexpr uint8_t LED_RED = 46; +static constexpr uint8_t LED_GREEN = 0; +static constexpr uint8_t LED_BLUE = 45; // also RTS + +static constexpr uint8_t A0 = 1; // also DTR +static constexpr uint8_t A1 = 2; +static constexpr uint8_t A2 = 3; +static constexpr uint8_t A3 = 4; +static constexpr uint8_t A4 = 11; // also SDA +static constexpr uint8_t A5 = 12; // also SCL +static constexpr uint8_t A6 = 13; +static constexpr uint8_t A7 = 14; + +#endif + +// alternate pin functions + +static constexpr uint8_t LED_BUILTIN = D13; + +static constexpr uint8_t TX = D1; +static constexpr uint8_t RX = D0; +static constexpr uint8_t RTS = LED_BLUE; +static constexpr uint8_t CTS = D3; +static constexpr uint8_t DTR = A0; +static constexpr uint8_t DSR = D4; + +static constexpr uint8_t SS = D10; +static constexpr uint8_t MOSI = D11; +static constexpr uint8_t MISO = D12; +static constexpr uint8_t SCK = D13; + +static constexpr uint8_t SDA = A4; +static constexpr uint8_t SCL = A5; + +#define PIN_I2S_SCK D7 +#define PIN_I2S_FS D8 +#define PIN_I2S_SD D9 +#define PIN_I2S_SD_OUT D9 // same as bidir +#define PIN_I2S_SD_IN D10 + +#ifndef __cplusplus +#undef constexpr +#endif + +#endif /* Pins_Arduino_h */ diff --git a/variants/arduino_nano_nora/variant.cpp b/variants/arduino_nano_nora/variant.cpp new file mode 100644 index 00000000000..cfdd503d949 --- /dev/null +++ b/variants/arduino_nano_nora/variant.cpp @@ -0,0 +1,104 @@ +// Enable pin remapping in this file, so pin constants are meaningful +#undef ARDUINO_CORE_BUILD + +#include "Arduino.h" + +#include "double_tap.h" + +#include +#include +#include + +extern "C" { + void initVariant() { + // nothing to do + } +} + +// global, accessible from recovery sketch +bool _recovery_marker_found; // double tap detected +bool _recovery_active; // running from factory partition + +#define DELAY_US 10000 +#define FADESTEP 8 +static void rgb_pulse_delay(void) +{ + // Bv R^ G x + int widths[4] = { 192, 64, 0, 0 }; + int dec_led = 0; + + // initialize RGB signals from weak pinstraps + pinMode(LED_RED, OUTPUT); + pinMode(LED_GREEN, OUTPUT); + pinMode(LED_BLUE, OUTPUT); + while (dec_led < 3) { + widths[dec_led] -= FADESTEP; + widths[dec_led+1] += FADESTEP; + if (widths[dec_led] <= 0) { + widths[dec_led] = 0; + dec_led = dec_led+1; + widths[dec_led] = 255; + } + + analogWrite(LED_RED, 255-widths[1]); + analogWrite(LED_GREEN, 255-widths[2]); + analogWrite(LED_BLUE, 255-widths[0]); + delayMicroseconds(DELAY_US); + } + + // reset pins to digital HIGH before leaving + digitalWrite(LED_RED, HIGH); + digitalWrite(LED_GREEN, HIGH); + digitalWrite(LED_BLUE, HIGH); +} + +static void NANO_ESP32_enter_bootloader(void) +{ + if (!_recovery_active) { + // check for valid partition scheme + const esp_partition_t *ota_part = esp_ota_get_next_update_partition(NULL); + const esp_partition_t *fact_part = esp_partition_find_first(ESP_PARTITION_TYPE_APP, ESP_PARTITION_SUBTYPE_APP_FACTORY, NULL); + if (ota_part && fact_part) { + // set tokens so the recovery FW will find them + double_tap_mark(); + // invalidate other OTA image + esp_partition_erase_range(ota_part, 0, 4096); + // activate factory partition + esp_ota_set_boot_partition(fact_part); + } + } + + esp_restart(); +} + +static void boot_double_tap_logic() +{ + const esp_partition_t *part = esp_ota_get_running_partition(); + _recovery_active = (part->subtype == ESP_PARTITION_SUBTYPE_APP_FACTORY); + + double_tap_init(); + + _recovery_marker_found = double_tap_check_match(); + if (_recovery_marker_found && !_recovery_active) { + // double tap detected in user application, reboot to factory + NANO_ESP32_enter_bootloader(); + } + + // delay with mark set then proceed + // - for normal startup, to detect first double tap + // - in recovery mode, to ignore several short presses + double_tap_mark(); + rgb_pulse_delay(); + double_tap_invalidate(); +} + +namespace { + class DoubleTap { + public: + DoubleTap() { + boot_double_tap_logic(); + } + }; + + DoubleTap dt __attribute__ ((init_priority (101))); +} From aba2f2e967ec8a14b1f192fb2dcf82e3879d4be1 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Tue, 28 Nov 2023 12:04:22 +0100 Subject: [PATCH 07/10] fix: periman: include it by default, add include guard --- cores/esp32/esp32-hal-periman.h | 2 ++ cores/esp32/esp32-hal.h | 1 + 2 files changed, 3 insertions(+) diff --git a/cores/esp32/esp32-hal-periman.h b/cores/esp32/esp32-hal-periman.h index 2d91b696f7f..42833b4bab1 100644 --- a/cores/esp32/esp32-hal-periman.h +++ b/cores/esp32/esp32-hal-periman.h @@ -4,6 +4,8 @@ * SPDX-License-Identifier: Apache-2.0 */ +#pragma once + #ifdef __cplusplus extern "C" { diff --git a/cores/esp32/esp32-hal.h b/cores/esp32/esp32-hal.h index 2f53bb2ff66..c2e10dd172a 100644 --- a/cores/esp32/esp32-hal.h +++ b/cores/esp32/esp32-hal.h @@ -86,6 +86,7 @@ void yield(void); #include "esp32-hal-psram.h" #include "esp32-hal-rgb-led.h" #include "esp32-hal-cpu.h" +#include "esp32-hal-periman.h" void analogWrite(uint8_t pin, int value); void analogWriteFrequency(uint8_t pin, uint32_t freq); From 61890e28eebd3c6f60b382343dd6397d6c12fa6f Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Tue, 28 Nov 2023 12:08:15 +0100 Subject: [PATCH 08/10] fix: io_pin_remap: adjust for new perimap APIs --- cores/esp32/io_pin_remap.h | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/cores/esp32/io_pin_remap.h b/cores/esp32/io_pin_remap.h index 32fd0eb22cd..92e98604445 100644 --- a/cores/esp32/io_pin_remap.h +++ b/cores/esp32/io_pin_remap.h @@ -72,10 +72,14 @@ int8_t gpioNumberToDigitalPin(int8_t gpioNumber); #define pinMatrixOutDetach(pin, invertOut, invertEnable) pinMatrixOutDetach(digitalPinToGPIONumber(pin), invertOut, invertEnable) // cores/esp32/esp32-hal-periman.h -#define perimanSetPinBus(pin, type, bus) perimanSetPinBus(digitalPinToGPIONumber(pin), type, bus) -#define perimanGetPinBus(pin, type) perimanGetPinBus(digitalPinToGPIONumber(pin), type) -#define perimanGetPinBusType(pin) perimanGetPinBusType(digitalPinToGPIONumber(pin)) -#define perimanPinIsValid(pin) perimanPinIsValid(digitalPinToGPIONumber(pin)) +#define perimanSetPinBus(pin, type, bus, bus_num, bus_channel) perimanSetPinBus(digitalPinToGPIONumber(pin), type, bus, bus_num, bus_channel) +#define perimanGetPinBus(pin, type) perimanGetPinBus(digitalPinToGPIONumber(pin), type) +#define perimanGetPinBusType(pin) perimanGetPinBusType(digitalPinToGPIONumber(pin)) +#define perimanGetPinBusNum(pin) perimanGetPinBusNum(digitalPinToGPIONumber(pin)) +#define perimanGetPinBusChannel(pin) perimanGetPinBusChannel(digitalPinToGPIONumber(pin)) +#define perimanPinIsValid(pin) perimanPinIsValid(digitalPinToGPIONumber(pin)) +#define perimanSetPinBusExtraType(pin, extra_type) perimanSetPinBusExtraType(digitalPinToGPIONumber(pin), extra_type) +#define perimanGetPinBusExtraType(pin) perimanGetPinBusExtraType(digitalPinToGPIONumber(pin)) // cores/esp32/esp32-hal-rgb-led.h #define neopixelWrite(pin, red_val, green_val, blue_val) neopixelWrite(digitalPinToGPIONumber(pin), red_val, green_val, blue_val) From 2dce29ffcafc484139ba4b96ca1593d71d927b08 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Tue, 28 Nov 2023 12:09:29 +0100 Subject: [PATCH 09/10] fix: libraries: manually handled pin remapping files Previously all libraries invoked either high-level APIs (transparently remapped, like the user sketch) or low-level ESP-IDF calls (where the remap to GPIO numbers had to be added manually). Since 3.x, some of these are mixed (for example, periman* APIs are remapped, while soc* are not). This must be handled by disabling the automatic API remapping and making sure all calls use GPIO numbers. --- libraries/ESP_I2S/src/ESP_I2S.cpp | 3 +++ libraries/Ethernet/src/ETH.cpp | 27 +++++++++++++++------------ libraries/SD_MMC/src/SD_MMC.cpp | 3 +++ 3 files changed, 21 insertions(+), 12 deletions(-) diff --git a/libraries/ESP_I2S/src/ESP_I2S.cpp b/libraries/ESP_I2S/src/ESP_I2S.cpp index a9562935e9b..eee1e1c8e76 100644 --- a/libraries/ESP_I2S/src/ESP_I2S.cpp +++ b/libraries/ESP_I2S/src/ESP_I2S.cpp @@ -1,3 +1,6 @@ +// Disable the automatic pin remapping of the API calls in this file +#define ARDUINO_CORE_BUILD + #include "ESP_I2S.h" #if SOC_I2S_SUPPORTED diff --git a/libraries/Ethernet/src/ETH.cpp b/libraries/Ethernet/src/ETH.cpp index f3fc5b02468..40c408ee69a 100644 --- a/libraries/Ethernet/src/ETH.cpp +++ b/libraries/Ethernet/src/ETH.cpp @@ -18,6 +18,9 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ +// Disable the automatic pin remapping of the API calls in this file +#define ARDUINO_CORE_BUILD + #include "ETH.h" #include "esp_system.h" #include "esp_event.h" @@ -98,13 +101,13 @@ bool ETHClass::begin(eth_phy_type_t type, uint8_t phy_addr, int mdc, int mdio, i eth_esp32_emac_config_t mac_config = ETH_ESP32_EMAC_DEFAULT_CONFIG(); mac_config.clock_config.rmii.clock_mode = (clock_mode) ? EMAC_CLK_OUT : EMAC_CLK_EXT_IN; mac_config.clock_config.rmii.clock_gpio = (1 == clock_mode) ? EMAC_APPL_CLK_OUT_GPIO : (2 == clock_mode) ? EMAC_CLK_OUT_GPIO : (3 == clock_mode) ? EMAC_CLK_OUT_180_GPIO : EMAC_CLK_IN_GPIO; - mac_config.smi_mdc_gpio_num = mdc; - mac_config.smi_mdio_gpio_num = mdio; + mac_config.smi_mdc_gpio_num = digitalPinToGPIONumber(mdc); + mac_config.smi_mdio_gpio_num = digitalPinToGPIONumber(mdio); - _pin_mcd = mdc; - _pin_mdio = mdio; + _pin_mcd = digitalPinToGPIONumber(mdc); + _pin_mdio = digitalPinToGPIONumber(mdio); _pin_rmii_clock = mac_config.clock_config.rmii.clock_gpio; - _pin_power = power; + _pin_power = digitalPinToGPIONumber(power); if(!perimanClearPinBus(_pin_rmii_clock)){ return false; } if(!perimanClearPinBus(_pin_mcd)){ return false; } @@ -130,7 +133,7 @@ bool ETHClass::begin(eth_phy_type_t type, uint8_t phy_addr, int mdc, int mdio, i eth_phy_config_t phy_config = ETH_PHY_DEFAULT_CONFIG(); phy_config.phy_addr = phy_addr; - phy_config.reset_gpio_num = power; + phy_config.reset_gpio_num = _pin_power; esp_eth_phy_t *phy = NULL; switch(type){ @@ -381,12 +384,12 @@ bool ETHClass::beginSPI(eth_phy_type_t type, uint8_t phy_addr, int cs, int irq, _spi_freq_mhz = spi_freq_mhz; } _phy_type = type; - _pin_cs = cs; - _pin_irq = irq; - _pin_rst = rst; - _pin_sck = sck; - _pin_miso = miso; - _pin_mosi = mosi; + _pin_cs = digitalPinToGPIONumber(cs); + _pin_irq = digitalPinToGPIONumber(irq); + _pin_rst = digitalPinToGPIONumber(rst); + _pin_sck = digitalPinToGPIONumber(sck); + _pin_miso = digitalPinToGPIONumber(miso); + _pin_mosi = digitalPinToGPIONumber(mosi); #if ETH_SPI_SUPPORTS_CUSTOM if(_spi != NULL){ diff --git a/libraries/SD_MMC/src/SD_MMC.cpp b/libraries/SD_MMC/src/SD_MMC.cpp index dcb6c3e41d9..8ab5dec14b2 100644 --- a/libraries/SD_MMC/src/SD_MMC.cpp +++ b/libraries/SD_MMC/src/SD_MMC.cpp @@ -12,6 +12,9 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Disable the automatic pin remapping of the API calls in this file +#define ARDUINO_CORE_BUILD + #include "pins_arduino.h" #include "io_pin_remap.h" #include "SD_MMC.h" From 0d360bdcc08200bfb36ade0f0a9a5557acbdd065 Mon Sep 17 00:00:00 2001 From: Luca Burelli Date: Tue, 28 Nov 2023 14:07:50 +0100 Subject: [PATCH 10/10] feat: show remapped pins in chip debug reports --- cores/esp32/chip-debug-report.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/cores/esp32/chip-debug-report.cpp b/cores/esp32/chip-debug-report.cpp index 8bcda850d77..aeb0e907dfb 100644 --- a/cores/esp32/chip-debug-report.cpp +++ b/cores/esp32/chip-debug-report.cpp @@ -242,7 +242,11 @@ static void printBoardInfo(void){ static void printPerimanInfo(void){ chip_report_printf("GPIO Info:\n"); chip_report_printf("------------------------------------------\n"); +#if defined(BOARD_HAS_PIN_REMAP) + chip_report_printf(" DPIN|GPIO : BUS_TYPE[bus/unit][chan]\n"); +#else chip_report_printf(" GPIO : BUS_TYPE[bus/unit][chan]\n"); +#endif chip_report_printf(" -------------------------------------- \n"); for(uint8_t i = 0; i < SOC_GPIO_PIN_COUNT; i++){ if(!perimanPinIsValid(i)){ @@ -252,8 +256,17 @@ static void printPerimanInfo(void){ if(type == ESP32_BUS_TYPE_INIT){ continue;//unused pin } - const char* extra_type = perimanGetPinBusExtraType(i); +#if defined(BOARD_HAS_PIN_REMAP) + int dpin = gpioNumberToDigitalPin(i); + if (dpin < 0) { + continue;//pin is not exported + } else { + chip_report_printf(" D%-3d|%4u : ", dpin, i); + } +#else chip_report_printf(" %4u : ", i); +#endif + const char* extra_type = perimanGetPinBusExtraType(i); if(extra_type){ chip_report_printf("%s", extra_type); }