ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)

mhi

  • *****
  • 500
    • Zobrazit profil
ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« kdy: 28. 08. 2021, 22:35:13 »
COVID zpusobil zamrznuti jednoho projektu postaveneho na ESP32 s LX6. Vyuzivaji se tam Wifi, CAN-BUS, UART, nejake saskarny s GPIO, nic svetoborneho. Nejedna se o aplikaci, kde je vyzadovana 100% spolehlivost (on jen ten CAN-BUS jim treba uplne nechodi jak by mel). Pouziva se tam +- jen to jejich IDF. Projekt jako takovy byl funkcne vicemene hotovy, co chybelo je doladeni uzivatelske privetivosti.

Ted resim vzkriseni tohoto projektu a zvazuji pouziti RISC-V varianty, ESP32-C3, ze bych to jeste preportoval (vyrabet se bude jen nejaka stovka kusu, ale nechci do budoucna resit nutnost noveho firmware). Ma cenu se tim zabyvat? Nechci usetrit $2 na modulu, spis mi jde o dostupnost do budoucna, treba za 5 let, proto pokukuji po novejsi soucastce.



A jeste mam otazku, mate nekdo u ESP32 ("stareho" i -C3) vyreseny nejak chytre bootloader, aby to nebylo ze je firmware A a firmware B, ale skutecne neco co treba umi z aplikace stazenim z nejakeho URL preflashovat aplikaci (tedy aplikace preda bootloaderu URL, skoci do nej, ten si stahne bez re-autentizace novy fw a flashne ho, a pak do nej skoci) ?

V pripade selhani je OK kdyz to zustane tupe viset v bootloaderu, ktery treba rozjede nejakou docasnou wifi pro rucni nahrani pres formular, apod.


Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #1 kdy: 29. 08. 2021, 18:49:41 »
Tak nevím, když je to projekt využívající CAN bus, jestli vám nebude vadit, že dle letmého nahlédnutí do specifikace ta C3 nemá vestavěný CAN controller.....

mhi

  • *****
  • 500
    • Zobrazit profil
Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #2 kdy: 29. 08. 2021, 19:02:58 »
Mel by to mit, rikaji tomu TWAI viz https://www.espressif.com/sites/default/files/documentation/esp32-c3_datasheet_en.pdf ("Compatible with ISO 11898-1 protocol")

On se zmenil nazev fci i mezi ruznymi IDF, bylo potreba opravit zdrojaky.

Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #3 kdy: 29. 08. 2021, 21:51:33 »
Tak to se omlouvám.
O tom přejmenování jsem už cosi slyšel, ale při kontrole na mobilu jsem to v těch periferiích přehlédl...

mhi

  • *****
  • 500
    • Zobrazit profil
Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #4 kdy: 31. 08. 2021, 01:03:51 »
Netreba se omlouvat, dekuji za snahu.

Nicmene ... nikdo ?! Opravdu nikdo na serveru kde se opevuje RISC-V nepouziva zrejme pro hobbiky nejdostupnejsi SoC s touto ISA ?


mhepp

  • ***
  • 121
    • Zobrazit profil
    • E-mail
Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #5 kdy: 31. 08. 2021, 11:02:02 »
Hele, jestli ono to nebude tím, že máš docela exotický požadavek. ESP32 zde nejspíš používá docela dost lidí, ale bude to v hobby sféře, bude to s xtensa architekturou a podobně... Každopádně bez požadavků na složitý zavaděč a podobně.

Napadá mne, že inspiraci bys mohl najít v zařízení Odroid Go - je postavené na esp32 a má docela chytrý „zavaděč“, který umí vybírat z více image uložených na data partition. Při startu si vybereš, kterou image chceš nastartovat...

Web zde: https://wiki.odroid.com/odroid_go/odroid_go, dá se tam proklikat ke zdrojákům.

Edit: pardon, image ne na data partition, ale na SD kartě...
« Poslední změna: 31. 08. 2021, 11:03:34 od mhepp »

Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #6 kdy: 31. 08. 2021, 11:21:17 »
Opravdu nikdo na serveru kde se opevuje RISC-V nepouziva zrejme pro hobbiky nejdostupnejsi SoC s touto ISA ?

ISA je přece naprosto irelevantní. Napíšu C/Zig program, dám ho kompilátoru, jeho výstup do čipu... a je mi jedno, jestli to je ARM nebo něco jiného. V drtivé většině případů to ani nepoznám, ono i v GDB to vypadá velmi podobně.

Nejdostupnější RV SoC je GD32VF103, už díky tomu, že je pin- a source-compatible s nejrozšířenějšími STM32F103. Opravdu jen v build systému vyměním arm-none-eabi prefix za riscv-none-embed, upravím CFLAGS a volání pro upload.

mhi

  • *****
  • 500
    • Zobrazit profil
Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #7 kdy: 31. 08. 2021, 13:06:31 »
Napadá mne, že inspiraci bys mohl najít v zařízení Odroid Go - je postavené na esp32 a má docela chytrý „zavaděč“, který umí vybírat z více image uložených na data partition. Při startu si vybereš, kterou image chceš nastartovat...

Web zde: https://wiki.odroid.com/odroid_go/odroid_go, dá se tam proklikat ke zdrojákům.

Edit: pardon, image ne na data partition, ale na SD kartě...

Nejsem si jist zda jsem to nasel, nicmene je to zase resene pres SDKcko (IDF), tzn. asi nic moc pro mne.

Ten bootloader si nejak vyresim, jsem na to zvykly, alespon se clovek neco nauci delat na trochu nizsi urovni. Kdyztak to asi pujde udelat na prasaka, ze pri preskoku app->bootloader se wifi+tcp plne reinicializuje. Idealni by bylo samozrejme predat nejak stav wifi (wpa) a tcpip (dhcp).

ESP32-C3 dneska dorazi, vyzkousim jestli to pujde nejak rychle naportovat.

Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #8 kdy: 01. 09. 2021, 09:53:29 »
A jeste mam otazku, mate nekdo u ESP32 ("stareho" i -C3) vyreseny nejak chytre bootloader, aby to nebylo ze je firmware A a firmware B, ale skutecne neco co treba umi z aplikace stazenim z nejakeho URL preflashovat aplikaci (tedy aplikace preda bootloaderu URL, skoci do nej, ten si stahne bez re-autentizace novy fw a flashne ho, a pak do nej skoci) ?
V pripade selhani je OK kdyz to zustane tupe viset v bootloaderu, ktery treba rozjede nejakou docasnou wifi pro rucni nahrani pres formular, apod.

Tvé zadání je jiné, než ESP32 implementuje - a dělá to lépe. Výrobcem vymyšlené řešení je následující:
  • jsou tam dvě samostatné sekce (partitions) flash pro aplikaci
  • z jedné z nich je nabootováno
  • OTA aktualizaci stahuje tvoje aplikace (máš to plně pod kontrolou) do té "druhé" sekce flash
  • teprve, když celou aktualizaci úspěšně nahraješ, ověříš hash atd, tak řekneš, že je ready a přebootuješ
  • načte se aplikace z "nové" partition
  • pokud tvá aplikace po rebootu doběhne správně do checkpointu (esp_ota_mark_app_valid_cancel_rollback()), aktuální partition se označí jako finálně aktivní (= vždy už bude bootovat nová verze)
  • pokud nedoběhne a dojde k rebootu dřív, nadále se používá stará verze

Tj. stav, kdy to "tupě zůstane viset v bootloaderu" by nikdy neměl nastat. Buď se update podaří a běží nová verze, nebo selhal a běží stará verze. (Jediný scénář, kdy by to bylo napikaču, by byla situace, kdy "nová" aplikace zůstane někde v nekonečné smyčce - pak někdo musí manuálně udělat reset/power cycle. Ale pak už zase naběhne stará verze.)

Samozřejmě musí být aplikace tak malá, aby se do flash vešly dvě kopie aplikace a potřebný filesystém.

Info: https://docs.espressif.com/projects/esp-idf/en/latest/esp32/api-reference/system/ota.html


Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #9 kdy: 01. 09. 2021, 09:59:47 »
Nicmene ... nikdo ?! Opravdu nikdo na serveru kde se opevuje RISC-V nepouziva zrejme pro hobbiky nejdostupnejsi SoC s touto ISA ?

Jestli to nebude tím, že ESP32-C3 je pro retail dostupné pár týdnů a většina lidí ho tudíž ještě nedostala do ruky, a třeba podpora pro Arduino IDE pro něj vyšla teprve včera?

Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #10 kdy: 01. 09. 2021, 10:23:44 »
"Nicmene ... nikdo ?!"

Moje troška do mlýna je, že jsem v posledních letech nakoupil různé varianty ESP8266, ESP32, ESP32-S2 a po různých (vesměs nedokumentovaných) trablích* jsem své projekty překopal na Raspberry Pi Pico. Ekosystém okolo ESPxx mi přijde plný dobrodružství a překvapení; u RP2 věřím, že projekty na něm postavené budou více futureproof.

*) Sériový převodník modulu ESP32-WROOM nahodile vkládal jeden byte (0xFF) asi tak jednou za megabyte přenesených dat. Rozbíjelo mi to komunikaci způsobem, který se extrémně těžko debugoval. To pro mne byla poslední kapka.

mhi

  • *****
  • 500
    • Zobrazit profil
Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #11 kdy: 01. 09. 2021, 10:27:47 »
Samozřejmě musí být aplikace tak malá, aby se do flash vešly dvě kopie aplikace a potřebný filesystém.

Jak funguje OTA samozrejme vim, znam to, problem je presne v tomto co cituji.

Dale bugy ESPcek - ano, souhlasim s tim, mam podobnou zkusenost. Jeste bych k tomu pridal ze mi hodne vadi jejich hodne "sverazna" implementace nekterych features.

Na seriozni projekty se to myslim moc nehodi.

mhi

  • *****
  • 500
    • Zobrazit profil
Re:ESP32-C3 (RISC-V) vs ESP32 (Tensilica Xtensa LX6)
« Odpověď #12 kdy: 22. 08. 2022, 09:41:03 »
Doplnim po skoro roce svoji zkusenost. Udelal jsem desku s ESP32C3 (jako variantu k ESP32). Protoze na tom SoC chybi nejake veci, ktere potrebujeme, byl to spis takovy pokus.

Prvni zjisteni bylo, ze esp-idf je opravdu dynamicke, ten modul/SoC mi prijde jako opravdu hodne vyvijeny za pochodu. Aktualni verze uz ale chodi bez vetsich problemu, kdyz po tom clovek nechce nic "nestandardniho" a zcela se podvoli tomu, jak je to navrzene. Je to takovy trosku 'arduino-styl'.

Obvod jako takovy mi nejprve skoro nefungoval, neustale se odhlasoval od site, byla spis nahoda kdyz se na nej dalo pingnout. Kde byl problem jsem nakonec ani nevyresil, od jednoho okamziku to zacalo zazracne fungovat.  Mel bych to dat spis do uvozovek, protoze stav je o dost horsi nez vedle polozene esp32. Bezne se to odhlasi od wifi, ping pod APckem vypada nejak takto:

Kód: [Vybrat]
Reply from 192.168.1.194: bytes=32 time=263ms TTL=255
Reply from 192.168.1.194: bytes=32 time=182ms TTL=255
Reply from 192.168.1.194: bytes=32 time=101ms TTL=255
Reply from 192.168.1.194: bytes=32 time=23ms TTL=255
Reply from 192.168.1.194: bytes=32 time=252ms TTL=255
Reply from 192.168.1.194: bytes=32 time=170ms TTL=255
Reply from 192.168.1.194: bytes=32 time=92ms TTL=255
Reply from 192.168.1.194: bytes=32 time=11ms TTL=255
Reply from 192.168.1.194: bytes=32 time=235ms TTL=255
Reply from 192.168.1.194: bytes=32 time=157ms TTL=255
Reply from 192.168.1.194: bytes=32 time=76ms TTL=255
Reply from 192.168.1.194: bytes=32 time=303ms TTL=255
Reply from 192.168.1.194: bytes=32 time=224ms TTL=255
Reply from 192.168.1.194: bytes=32 time=143ms TTL=255
Reply from 192.168.1.194: bytes=32 time=62ms TTL=255
Reply from 192.168.1.194: bytes=32 time=289ms TTL=255
Reply from 192.168.1.194: bytes=32 time=208ms TTL=255
Reply from 192.168.1.194: bytes=32 time=127ms TTL=255
Reply from 192.168.1.194: bytes=32 time=46ms TTL=255
Reply from 192.168.1.194: bytes=32 time=272ms TTL=255
Reply from 192.168.1.194: bytes=32 time=192ms TTL=255
Reply from 192.168.1.194: bytes=32 time=111ms TTL=255
Reply from 192.168.1.194: bytes=32 time=32ms TTL=255
Reply from 192.168.1.194: bytes=32 time=261ms TTL=255

Je samozrejme mozne, ze mam treba blbe napajeni, nebo tak neco. Kazdopadne mel jsem to "oblozene kondiky" jako sendvic, napajene i primo z lab. zdroje, bez vetsiho uspechu. Mam teda na vsech svych deskach chybu, ze nemam napajene ty stredove plosky na modulu ESP32C3-WROOM-02, udelal jsem uz dve takove desky, ale pokazde zapomenu vyresit chybu v nepajive masce :(.

Taky se mi nekdy po nejake dobe restartoval, priznak v konzoli byl POWERON. Ted to nedela. Opet, netusim proc. Mozna to vyresilo novejsi esp-idf, nevim.
« Poslední změna: 22. 08. 2022, 09:44:04 od mhi »