espressif / arduino-esp32

Arduino core for the ESP32
GNU Lesser General Public License v2.1
13.28k stars 7.35k forks source link

ESP32-DevKitM-1 Support? #5183

Open K1rdro opened 3 years ago

K1rdro commented 3 years ago

Hardware:

Board: ESP32-DevKitM-1 (ESP32-U4WDH) Core Installation version: 2.0.0-alpha1 IDE name: Arduino IDE Flash Frequency: 40Mhz PSRAM enabled: no Upload Speed: 115200 Computer OS: Windows 10

Description:

Is ESP32-DevkitM-1 (ESP32-U4WDH) supported? It's single core, so it gets the same error that the solo's were getting:

13:33:33.253 -> E (118) cpu_start: Running on single core variant of a chip, but app is built with multi-core support.
13:33:33.253 -> E (118) cpu_start: Check that CONFIG_FREERTOS_UNICORE is enabled in menuconfig

Sketch: (leave the backquotes for code formatting)

/*
  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
  the correct LED pin independent of which board is used.
  If you want to know what pin the on-board LED is connected to on your Arduino
  model, check the Technical Specs of your board at:
  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014
  by Scott Fitzgerald
  modified 2 Sep 2016
  by Arturo Guadalupi
  modified 8 Sep 2016
  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink
*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(21, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(21, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(21, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

Debug Messages:

13:33:33.159 -> ELF file SHA256: 0000000000000000
13:33:33.159 -> 
13:33:33.159 -> Rebooting...
13:33:33.159 -> ets Jul 29 2019 12:21:46
13:33:33.159 -> 
13:33:33.159 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
13:33:33.159 -> configsip: 188777542, SPIWP:0xee
13:33:33.159 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
13:33:33.159 -> mode:DIO, clock div:2
13:33:33.159 -> load:0x3fff0030,len:1252
13:33:33.159 -> load:0x40078000,len:12692
13:33:33.159 -> load:0x40080400,len:3100
13:33:33.159 -> entry 0x400805ec
13:33:33.253 -> E (118) cpu_start: Running on single core variant of a chip, but app is built with multi-core support.
13:33:33.253 -> E (118) cpu_start: Check that CONFIG_FREERTOS_UNICORE is enabled in menuconfig
13:33:33.300 -> 
13:33:33.300 -> abort() was called at PC 0x400825e9 on core 0
13:33:33.300 -> 
13:33:33.300 -> 
13:33:33.300 -> Backtrace:0x400d4c55:0x3ffe3b800x40087045:0x3ffe3ba0 0x4008c269:0x3ffe3bc0 0x400825e9:0x3ffe3c40 0x40078f6b:0x3ffe3c90  |<-CORRUPTED
lbernstone commented 3 years ago

https://github.com/lbernstone/arduino-esp32-solo

K1rdro commented 3 years ago

Yep, tried that, but I get a message back that it's an ESP32, not a single core.

lbernstone commented 3 years ago

What is the error? If it is from esptool, you may be able to just update the tool.

K1rdro commented 3 years ago

Sorry, my mistake. I was getting the 'ESP32, not single core' message when I was trying it with the C3 and S2 board options. I'd followed the instructions on yours, but I didn't see an option for the Solo in the board menu, and choosing the dev module gave the same issue as above. I may be doing something wrong, or or just didn't select the intended board?

zhostik88 commented 3 years ago

Hardware:

Board: ESP32-DevKitM-1 (ESP32-U4WDH)

Core Installation version: 2.0.0-alpha1

IDE name: Arduino IDE

Flash Frequency: 40Mhz

PSRAM enabled: no

Upload Speed: 115200

Computer OS: Windows 10

Description:

Is ESP32-DevkitM-1 (ESP32-U4WDH) supported? It's single core, so it gets the same error that the solo's were getting:


13:33:33.253 -> E (118) cpu_start: Running on single core variant of a chip, but app is built with multi-core support.

13:33:33.253 -> E (118) cpu_start: Check that CONFIG_FREERTOS_UNICORE is enabled in menuconfig

Sketch: (leave the backquotes for code formatting)


/*

  Blink

  Turns an LED on for one second, then off for one second, repeatedly.

  Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO

  it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to

  the correct LED pin independent of which board is used.

  If you want to know what pin the on-board LED is connected to on your Arduino

  model, check the Technical Specs of your board at:

  https://www.arduino.cc/en/Main/Products

  modified 8 May 2014

  by Scott Fitzgerald

  modified 2 Sep 2016

  by Arturo Guadalupi

  modified 8 Sep 2016

  by Colby Newman

  This example code is in the public domain.

  http://www.arduino.cc/en/Tutorial/Blink

*/

// the setup function runs once when you press reset or power the board

void setup() {

  // initialize digital pin LED_BUILTIN as an output.

  pinMode(21, OUTPUT);

}

// the loop function runs over and over again forever

void loop() {

  digitalWrite(21, HIGH);   // turn the LED on (HIGH is the voltage level)

  delay(1000);                       // wait for a second

  digitalWrite(21, LOW);    // turn the LED off by making the voltage LOW

  delay(1000);                       // wait for a second

}

Debug Messages:


13:33:33.159 -> ELF file SHA256: 0000000000000000

13:33:33.159 -> 

13:33:33.159 -> Rebooting...

13:33:33.159 -> ets Jul 29 2019 12:21:46

13:33:33.159 -> 

13:33:33.159 -> rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)

13:33:33.159 -> configsip: 188777542, SPIWP:0xee

13:33:33.159 -> clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00

13:33:33.159 -> mode:DIO, clock div:2

13:33:33.159 -> load:0x3fff0030,len:1252

13:33:33.159 -> load:0x40078000,len:12692

13:33:33.159 -> load:0x40080400,len:3100

13:33:33.159 -> entry 0x400805ec

13:33:33.253 -> E (118) cpu_start: Running on single core variant of a chip, but app is built with multi-core support.

13:33:33.253 -> E (118) cpu_start: Check that CONFIG_FREERTOS_UNICORE is enabled in menuconfig

13:33:33.300 -> 

13:33:33.300 -> abort() was called at PC 0x400825e9 on core 0

13:33:33.300 -> 

13:33:33.300 -> 

13:33:33.300 -> Backtrace:0x400d4c55:0x3ffe3b800x40087045:0x3ffe3ba0 0x4008c269:0x3ffe3bc0 0x400825e9:0x3ffe3c40 0x40078f6b:0x3ffe3c90  |<-CORRUPTED
RunningDroid commented 3 years ago

@K1rdro I had the same issue on Linux, then I merged arduino-esp32-solo with esp32/hardware/esp32/1.0.6/tools and now I have a watchdog rebooting my ESP32-DevKitM-1 because nothing's resetting the watchdog:

ets Jul 29 2019 12:21:46

rst:0xc (SW_CPU_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 188777542, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:1216
ho 0 tail 12 room 4
load:0x40078000,len:10944
load:0x40080400,len:6388
entry 0x400806b4
E (10147) task_wdt: Task watchdog got triggered. The following tasks did not reset the watchdog in time:
E (10147) task_wdt:  - IDLE0 (CPU 0)
E (10147) task_wdt: Tasks currently running:
E (10147) task_wdt: CPU 0: loopTask
E (10147) task_wdt: Aborting.
abort() was called at PC 0x400e0e47 on core 0

ELF file SHA256: 0000000000000000

Backtrace: 0x4008443b:0x3ffbe490 0x40084699:0x3ffbe4b0 0x400e0e47:0x3ffbe4d0 0x400830fe:0x3ffbe4f0 0x400d1c9d:0x3ffb1fb0 0x40085651:0x3ffb1fd0

Edit: Note that that log is from the SimpleBLE example.

stale[bot] commented 2 years ago

[STALE_SET] This issue has been automatically marked as stale because it has not had recent activity. It will be closed in 14 days if no further activity occurs. Thank you for your contributions.

K1rdro commented 2 years ago

Tested again a few days ago with the current release. Still running into the same issues.

stale[bot] commented 2 years ago

[STALE_CLR] This issue has been removed from the stale queue. Please ensure activity to keep it openin the future.

me-no-dev commented 2 years ago

We might add support for single-core ESP32, but it is not on the roadmap yet.

bfaliszek commented 2 years ago

any new information on support for ESP32-SOLO-1?

markingle commented 2 years ago

Following this issue

sixtyfive commented 2 years ago

Sneaky

ma-lalonde commented 2 years ago

I'm also interested in single core support, for single-core ESP32-MINI-1 chips

lbernstone commented 2 years ago

There are automated platform releases by the tasmota team for platformio. https://github.com/Jason2866/esp32-arduino-lib-builder/releases/. Look through the assets for the latest solo build and use that as the platform= in your env.

ma-lalonde commented 2 years ago

Wow! Thanks @lbernstone! That's a really nice patch. I downloaded the Assets from the repository's release 841 (latest available), replaced my arduino-esp32 git folder (I use Arduino IDE on Ubuntu 20.04 and followed the manual installation guide), and that was it.

lbernstone commented 2 years ago

It's not mine, any more. Thanks to @Jason2866

ma-lalonde commented 2 years ago

Another option that works is to follow the build guide, which is very short and straightforward. For the ESP32-MINI-1 it was just a matter of adding CONFIG_FREERTOS_UNICORE=y to configs/defconfig.esp32. I haven't performed all unit tests

Jason2866 commented 2 years ago

@ma-lalonde correct, thats the only needed different entry in sdkconfig

VojtechBartoska commented 2 years ago

Hello all users,

we discussed ESP32-DevKitm-1 Support internally and I'm sharing current state.


Be aware that this resolution can change in the future, mainly depending on Community requests.


From our perspective, it doesn't make a lot of sense to add official support for single core ESP32 SoCs now as it's the same board just like regular ESP32 and only difference is that the second core is "disabled". Single Core ESP32s are rarely used comparing to regular ESP32s (our view).

For now there are 2 options how to use Single Core ESP32:

1) Adding it into building process of Arduino-Lib-Builder

2) Use Arduino as an ESP-IDF component


Let's us know if you use Single Core ESP32s more widely and you will really appreciate adding the official support. We are open to reconsider our resolution. 👍

Jason2866 commented 2 years ago

We (Tasmota project team) provide a inofficial Solo1 version (builded with Arduino Lib Builder. Based on core 2.0.3 Link to the framework and for Platformio a platform package Only needed Platformio entry:

platform = https://github.com/tasmota/platform-espressif32/releases/download/v.2.0.3/platform-espressif32-solo1-v.2.0.3.zip
ma-lalonde commented 2 years ago

I do the same as Jason at Connaxio, and the platformIO entry is just as simple. Our fork of arduino-esp32 supports single core on a separate branch. Could that be an option? A single core branch that is updated on each release? EDIT: or a single core release link, just like there is a "stable" and a "dev" link for Arduino IDE.

It seems silly to have multiple external third parties maintain what is basically the same repository and documentation. And, since I'm not sure that the differences are between the MINI and the SOLO, and I don't want to depend on a third party, here we are, both maintaining the same thing. Though I suspect there are many more build options that could be subject to debate. For example, task preemptivity.

My stance on the matter is that Arduino exists primarily for accessibility, not performance. If it were up to me, I'd make the Arduino default build support as many ICs as possible, while users seeking more performance, who may be more knowledgeable, should go through doing the custom builds. I don't think that's a popular opinion, however. ¯_(ツ)_/¯

Anyway, it's good to have an official response with the "good" options to solve that issue, so thanks Vojtech! I'll be able to provide some good answers and guides on my website.

untergeek commented 2 years ago

Please, official support will be greatly appreciated.

lbernstone commented 2 years ago

The configuration capacity to have multiple board types only came about in v2.0. That was just over a year ago. The need was critical for the new devices, and so they were implemented first. Now I guess there is enough time to circle back and set things up for solo/pico. When I first started building those libraries, it was just a couple files, now it is pretty much the entire set of archive libraries. Patience, please.

me-no-dev commented 2 years ago

ESP32-Solo chips are not that easy to support in this Arduino repo (for now), precisely because the difference is one sdkconfig item. We are trying to figure out the best way to have the IDF libs portion separate elsewhere. Then we can easily add support for Solo or other weird variants/chips.

I do not agree that we need to support every chip that Espressif makes. Some chips do not make sense for Arduino, others are not widely used (like the Solo) to warrant hundreds more megabytes of libs in the repo. Still we are doing our best to make it easy for you to create your own build for the chip you want (using the lib-builder and abstracting as much as possible).

ArnieO commented 2 years ago

Just to be sure we understand the terms used in this discussion: What is covered by the term "Solo"?

As far as I know, there are no chips using term "Solo" in their name: https://www.espressif.com/en/products/socs And on the modules, the term "Solo" seems to be used for a certain form factor, not really identifying the SoC/chip: https://www.espressif.com/en/products/modules

As per above link, Espressif distinguishes between the following series for their SoCs:

The modules using the SoCs have the same taxonomy.

When the term "Solo" is used in this thread, are we then in fact talking about ESP32-S and ESP32-C? Or is the term used on all single-core SoCs (and the modules using them)?

Our company is using two types of S2 modules in our projects (S2-SOLO and S2-MINI), and their programming is "the same". S2 was chosen as it seems to be the lowest consuming of the ESP32 modules available, and form factor (SOLO vs MINI) was chosen based on physical implementation restrictions. FWIW, we are currently using the "Tasmota build" (thank you to their team!).

me-no-dev commented 2 years ago

@ArnieO Solo is the old name for the single core ESP32. It is a binned version of otherwise dual-core chip. To support that variant of the same chip is the issue, not supporting other single-core chips with different names/features.

lbernstone commented 2 years ago

The ESP32-U4WDH is the re-release of an SoC originally called ESP32-SOLO (circa 2018?). The Solo is no longer available, but the U4WDH and modules based on it can still be purchased new from Mouser. These are ESP32 devices. -S and -C are fully supported already. Screenshot from 2022-06-16 10-31-57

ArnieO commented 2 years ago

@me-no-dev and @lbernstone : Thank you for your rapid clarification!

I understand then that the discussion concerns one SoC type used in one Espressif module type (ESP32-SOLO-1), both no longer manufactured. So the subject is very narrowed down compared to my initial impression due to the term "Solo". No worries then from my side if this chip/module is not officially supported.

Jason2866 commented 2 years ago

The ESP32 single core version is still available and used in commercial products. For example new "Shelly" devices. Thats why we (Tasmota) provide the framework, because Shelly devices are often bought to run with Tasmota as alternative cloud free firmware. In Xiaomi devices (smart lamps) there is often a OEM variant of the solo1. With replaced firmware this devices do work perfect cloud free too. Anyways we always will provide our own Tasmota framework for the ESP32 MCUs since we need (small IDF and Arduino) modifications to cover our needs.

yuriy23 commented 2 years ago

Wow! Thanks @lbernstone! That's a really nice patch. I downloaded the Assets from the repository's release 841 (latest available), replaced my arduino-esp32 git folder (I use Arduino IDE on Ubuntu 20.04 and followed the manual installation guide), and that was it.

I also have a problem with ESP32-U4WDH in the arduino environment. Can I get video installation instructions in windows environment? Are there any problems ? Thank you and sorry for my English.

Jason2866 commented 2 years ago

@yuriy23 No video needed Just use this entry

platform = https://github.com/tasmota/platform-espressif32/releases/download/v2.0.4/platform-espressif32-solo1-2.0.4.zip
mlpplm commented 1 year ago

As there is now very confusing information available in internet regarding ESP32-U4WD(H) support in Arduino IDE, I would appreciate if someone could describe step-by-step instructions, how to get support for unicore ESP32 in Arduino IDE. I use the latest A IDE2.0.0 and have been trying to use the board manager to include the 'official' ESP cores (with no luck = no unicore support), as well as manual installation with git. Have been trying to replace the git esp32 folder with the intructions seen here (Tasmota version framework-arduinoespressif32-solo1.zip) with no luck. There is no board ESP32-1-solo or whatsover available in board selection (not official nor sketch esp32 boards). Which board should I select? DOIT ESP32 DEVKIT V1? (sorry if this is a stupid request, but with esp8266 everything has been very clear and consistent, but with esp32 nothing is clear)

Jason2866 commented 1 year ago

@mlpplm Arduino does not official support Unicore Esp32. You have to compile the needed Arduino libs yourself or use a fork which does support. My actual Tasmota Platformio Platform does support the solo1 and all other boards. I will not release a Arduino IDE version only (i dont use...) or doing documentation for. You find the actual one here and it is described how to use with Platformio.

VojtechBartoska commented 1 year ago

@mlpplm It's good point and we are aware of this. We will include this in our Docs.

thorathome commented 11 months ago

My vote is to see these ESP32-U4WD single core devices supported in Arduino IDE. I want to flash the Shelly Plus 1 devices with custom code. Thanks.

pwnept commented 7 months ago

This application note PCN20231201 says that Espressif has upgraded the ESP32-U4WDH to dual-core. But in page 17 of ESP32 Series Datasheet v3.5 there exists a note:

"• The pin-pin mapping between ESP32-D2WD/ESP32-U4WDH and the embedded flash is as follows: GPIO16 = CS#, GPIO17 = IO1/DO, SD_CMD = IO3/HOLD#, SD_CLK = CLK, SD_DATA_0 = IO2/WP#, SD_DATA_1 = IO0/DI. The pins used for embedded flash are not recommended for other uses. • In most cases, the data port connection between ESP32 series of chips other than ESP32-D2WD/ESP32-U4WDH and external flash is as follows: SD_DATA0/SPIQ = IO1/DO, SD_DATA1/SPID = IO0/DI, SD_DATA2/SPIHD = IO3/HOLD#, SD_DATA3/SPIWP = IO2/WP#. ..."

If I were to implement the ESP32-U4WDH in my design, assuming I get the 2-core variant, would the core need to be changed, or would a new board definition need to be made to accommodate it, or would it work as-is?