Notice. New forum software under development. It's going to miss a few functions and look a bit ugly for a while, but I'm working on it full time now as the old forum was too unstable. Couple days, all good. If you notice any issues, please contact me.
|
Forum Index : Microcontroller and PC projects : ESP32-S3 some comments
Author | Message | ||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9090 |
I've been playing with the ESP32-S3 as it looks on the surface an interesting chip. 240MHz dual processors + external flash like the RP2040 BUT in addition external OctalSPI SRAM - typically 8Mb The other big enhancement in the S3 is a LCD controller (like the STM32H7). This can be programmed with all the usual parameters, clock speed, sync pulses, front and back porch values and either 8 or 16 bit RGB outputs. My findings thus far are disappointing. It is easy to set up LCD panels and VGA to quite high resolutions with a framebuffer in the OctalSPI RAM and, in the absence of other bus activity, the images are rock solid. However, as soon as you start to try more advanced things cracks start to appear. There is a demo code online of a 800x480 display with touch input playing a mp3 file over I2S at the same time as refreshing the display (static image). However, the pixel rate is set to 8MHz meaning the screen is only refreshed at about 14Hz and flickers like crazy. Setting the pixel clock any higher results in the image breaking up once the I2S output starts or even when loading an image. My experiments with VGA are the same. Nice static images but as soon as other bus activity starts, such as copying framebuffers, then strange artifacts start to appear making anything requiring large scale updates, like a game, a non-starter. The PSRAM runs at 80MHz but shares the Octal SPI but with the flash memory containing the program (also 80MHz). However, unlike normal memory mapped ram, each access needs the read and/or write address setting up first before anything can be accessed so depending on the application this can create a big overhead. Bitluni has developed a VGA library for the S3 but hasn't really progressed anything with it - I suspect for the same reasons. VGA has been implemented in Annex32 but, without reading all of a very long thread, my quick impression is that users are also struggling with image integrity and getting monitors to hold lock I'll probably keep playing for a bit but hopes for a very cheap CMM3 don't look too promising with this device. |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2109 |
I bought a esp32 vga board but can't do c. I looked at Fabgl and it looked clever :( |
||||
Mixtel90 Guru Joined: 05/10/2019 Location: United KingdomPosts: 6766 |
Quite a disappointment, Peter. You can't win 'em all though. Mick Zilog Inside! nascom.info for Nascom & Gemini Preliminary MMBasic docs & my PCB designs |
||||
atmega8 Guru Joined: 19/11/2013 Location: GermanyPosts: 722 |
But also without VGA "Graphics" MMBASIC on this Chip would be cool;-) Edited 2024-01-23 03:38 by atmega8 |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9090 |
Ive made a bit of progress see here . Basically the LCD peripheral works nicely when the framebuffer is in internal RAM and it it won't fit a 640x480x8bit framebuffer in internal RAM so this is 640x400 which just fits. |
||||
mclout999 Guru Joined: 05/07/2020 Location: United StatesPosts: 469 |
You might want to look at this video by the author of FABGL describing his work on making an S3 version and it seems he has ironed some thing out. https://www.youtube.com/watch?v=muuhgrige5Q&t=658s |
||||
cicciocb Regular Member Joined: 29/04/2014 Location: FrancePosts: 70 |
I think you stopped reading too early...... 1 2 3 4 5 6 7 On my channel there are other videos showing the VGA .... |
||||
gadgetjack Senior Member Joined: 15/07/2016 Location: United StatesPosts: 142 |
That is a pretty fast looking demo there Peter. |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9090 |
Looks good - any chance of you sharing some code? That's with a 10mSec pause between writes Edited 2024-01-23 18:25 by matherp |
||||
Volhout Guru Joined: 05/03/2018 Location: NetherlandsPosts: 4221 |
Must be.. The picoVGA is 10x faster. I added the 10ms pause, and now slowed down identical in speed. But the ESP32-S3 has higher resolution (color in 640x400) than the pico (color in 320x240) so it paints roughly 8x more pixel data (8 bit color). Nice.. Volhout Edited 2024-01-23 18:42 by Volhout PicomiteVGA PETSCII ROBOTS |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9090 |
And its RGB332 not RGB121, remember though that mode 2 on the PicoMite is actually 320x480. The firmware duplicates every second line to create the 320x240 image |
||||
atmega8 Guru Joined: 19/11/2013 Location: GermanyPosts: 722 |
"Looks good - any chance of you sharing some code?" May be a succesfull Joint Venture? |
||||
lew247 Guru Joined: 23/12/2015 Location: United KingdomPosts: 1702 |
Peter you probably have seen this but just in case link and also this |
||||
matherp Guru Joined: 11/12/2012 Location: United KingdomPosts: 9090 |
Not interested. Now that the RP2040 has proper H/W for generating HDMI and support for external RAM I don't see any point in looking at the ESP32 further. The in-built Basic is trivial - essentially just the open-source version I ported to a Tiny85 |
||||
lew247 Guru Joined: 23/12/2015 Location: United KingdomPosts: 1702 |
The basic commands that allow you to configure the direction and status of GPIOs are very useful. The first way for configuring I/O signals is based on the memory read and write functions, PEEK and POKE, respectively. This is a very low level mode and requires in-depth knowledge of the ESP32 module, which can also be found by consulting the component datasheet. The following example reads the contents of address 0x3FF44004 (register GPIO_OUT_REG), put it in OR with 0x04 (binary 100) and finally writes the value at the same address. This corresponds to setting GPIO2 high: The address could be a memory address or a register. In this case, as we can see again on the datasheet, the address is inside the 4kB address space reserved for GPIO: The second way, much simpler and more immediate, is to use the IODIR (set GPIO input or output direction), IOSET (set value of an output GPIO) and IOGET (get the value of an input GPIO) functions. Here is an example which first sets the direction of GPIO2 as output, then get and sets its value: |
||||
stanleyella Guru Joined: 25/06/2022 Location: United KingdomPosts: 2109 |
Not interested. Now that the RP2040 has proper H/W for generating HDMI and support for external RAM I don't see any point in looking at the ESP32 further. The in-built Basic is trivial - essentially just the open-source version I ported to a Tiny85 https://www.aliexpress.com/item/33041602035.html pity, vga and ps2 sockets, remind you of something |
||||
Print this page |