Espressif, you're not the boss of me!
-
Over a year ago Espressif - the maker of the ESP32 MCUs broke SPI "SDA reads" under their Arduino framework implementation. An SDA read takes a normally write only data line, and reverses it, to read off it. It's a hack, but it's hack that nearly every 3-wire SPI LCD controller uses in order to report the contents of its framebuffer memory/read back from the display. You'd use this feature for example, to alpha-blend or anti-alias your draws. Without it, you're up a creek, unless you just draw everything to bitmaps first, and then send those bitmaps to the display. So I did that. Enter UIX. UIX is a user interface library I didn't want to have to write. It complements GFX, my graphics library, and the primary reason I wrote it is I can no longer reliably do SDA reads on at least on major IoT platform. UIX is a draw on demand framework that .. you guessed it, draws bitmaps and sends them to a display. It's built more to be a stateful, demand draw graphics engine than a UI framework, but you can't have the former without the latter really. I'm not happy about it. That's an extra leg of my website, an extra codebase to maintain, extra docs, extra learning curve for my code's users, etc. All for want of an SDA read. Well, now they've done it again. The ESP32 Arduino 2.0.16 bits are fundamentally slower than previous versions of the framework. I mean my fire demo gets 77 frames per second on a TTGO T1 under Arduino on 2.0.15 and just *29* under 2.0.16 That's not acceptable. Worse, Espressif has officially said they're not supporting PlatformIO packages anymore, so I can't even really submit issue over this and expect anything. Now my solution? Give my library users the option of forgoing Arduino altogether. That means making any ESP32 libraries compatible with both Arduino and the ESP-IDF so users can use the ESP-IDF and not hamstring themselves. I've got I don't know, 20 libs to upgrade? And then several projects to upgrade to be dual platform. I posted a brief example of the sausage being made at the end of the post. This stuff makes me angrier than it really should. Why? I'm not in control of my own code. I feel like a damned marionette just dancing on my strings to the music Espressif decides to play today. All of this is just one more thing pushing me away from the ESP32s altogether. That and their lack of 5GHz WiFi support. Now that the Nordic nrf7002 the ESP32 is quite a bit less appealing.
#pragma once
#if __has_include()
#include
n -
Over a year ago Espressif - the maker of the ESP32 MCUs broke SPI "SDA reads" under their Arduino framework implementation. An SDA read takes a normally write only data line, and reverses it, to read off it. It's a hack, but it's hack that nearly every 3-wire SPI LCD controller uses in order to report the contents of its framebuffer memory/read back from the display. You'd use this feature for example, to alpha-blend or anti-alias your draws. Without it, you're up a creek, unless you just draw everything to bitmaps first, and then send those bitmaps to the display. So I did that. Enter UIX. UIX is a user interface library I didn't want to have to write. It complements GFX, my graphics library, and the primary reason I wrote it is I can no longer reliably do SDA reads on at least on major IoT platform. UIX is a draw on demand framework that .. you guessed it, draws bitmaps and sends them to a display. It's built more to be a stateful, demand draw graphics engine than a UI framework, but you can't have the former without the latter really. I'm not happy about it. That's an extra leg of my website, an extra codebase to maintain, extra docs, extra learning curve for my code's users, etc. All for want of an SDA read. Well, now they've done it again. The ESP32 Arduino 2.0.16 bits are fundamentally slower than previous versions of the framework. I mean my fire demo gets 77 frames per second on a TTGO T1 under Arduino on 2.0.15 and just *29* under 2.0.16 That's not acceptable. Worse, Espressif has officially said they're not supporting PlatformIO packages anymore, so I can't even really submit issue over this and expect anything. Now my solution? Give my library users the option of forgoing Arduino altogether. That means making any ESP32 libraries compatible with both Arduino and the ESP-IDF so users can use the ESP-IDF and not hamstring themselves. I've got I don't know, 20 libs to upgrade? And then several projects to upgrade to be dual platform. I posted a brief example of the sausage being made at the end of the post. This stuff makes me angrier than it really should. Why? I'm not in control of my own code. I feel like a damned marionette just dancing on my strings to the music Espressif decides to play today. All of this is just one more thing pushing me away from the ESP32s altogether. That and their lack of 5GHz WiFi support. Now that the Nordic nrf7002 the ESP32 is quite a bit less appealing.
#pragma once
#if __has_include()
#include
nVery interesting and a great post about SPI under espressif.
Quote:
the maker of the ESP32 MCUs broke SPI "SDA reads" under their Arduino framework implementation
Was it a bug or a conscious decision by espressif? If a decision, what was the reasoning behind that change? I understand you may not even know that answer.
Quote:
Worse, Espressif has officially said they're not supporting PlatformIO packages anymore
Why have they done that? Are they just saying they don’t care and don’t want to support?
-
Very interesting and a great post about SPI under espressif.
Quote:
the maker of the ESP32 MCUs broke SPI "SDA reads" under their Arduino framework implementation
Was it a bug or a conscious decision by espressif? If a decision, what was the reasoning behind that change? I understand you may not even know that answer.
Quote:
Worse, Espressif has officially said they're not supporting PlatformIO packages anymore
Why have they done that? Are they just saying they don’t care and don’t want to support?
raddevus wrote:
Was it a bug or a conscious decision by espressif?
I'm not sure. If I had to guess it's a bug but since it's a "hacky" feature they can't be bothered to make it work again.
raddevus wrote:
Why have they done that?
The scuttlebutt I've heard is one of two things (or maybe both) A) the third party that was building the packages was getting paid by Espressif, and there was disagreement over compensation. I can't verify this. B) (What I found out since making this post) Espressif never officially supported it, but they had it in their docs until it became a nightmare for them because they were getting issue reports for stuff they didn't make. I think this is more likely.
Check out my IoT graphics library here: https://honeythecodewitch.com/gfx And my IoT UI/User Experience library here: https://honeythecodewitch.com/uix