ESP32-S3 some comments


Author Message
matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10169
Posted: 03:16pm 22 Jan 2024      

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 Kingdom
Posts: 2504
Posted: 03:51pm 22 Jan 2024      

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 Kingdom
Posts: 7780
Posted: 03:58pm 22 Jan 2024      

Quite a disappointment, Peter. You can't win 'em all though.

atmega8

Guru

Joined: 19/11/2013
Location: Germany
Posts: 723
Posted: 05:37pm 22 Jan 2024      

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 Kingdom
Posts: 10169
Posted: 07:13pm 22 Jan 2024      

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 States
Posts: 487
Posted: 08:18pm 22 Jan 2024      

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: France
Posts: 71
Posted: 08:38pm 22 Jan 2024      

  matherp said  
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 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 States
Posts: 169
Posted: 03:39am 23 Jan 2024      

That is a pretty fast looking demo there Peter.

matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10169
Posted: 08:23am 23 Jan 2024      

  Quote  On my channel there are other videos showing the VGA ....


Looks good - any chance of you sharing some code?

  Quote  That is a pretty fast looking demo there Peter.


That's with a 10mSec pause between writes
Edited 2024-01-23 18:25 by matherp

Volhout
Guru

Joined: 05/03/2018
Location: Netherlands
Posts: 4988
Posted: 08:41am 23 Jan 2024      

  matherp said  
  Quote  That is a pretty fast looking demo there Peter.


That's with a 10mSec pause between writes


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

matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10169
Posted: 08:46am 23 Jan 2024      

  Quote  But the ESP32-S3 has higher resolution (color in 640x400) than the pico (color in 320x240) so it paints roughly 4x more pixel data.


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: Germany
Posts: 723
Posted: 12:04pm 24 Jan 2024      

"Looks good - any chance of you sharing some code?"


May be a succesfull Joint Venture?

 

lew247

Guru

Joined: 23/12/2015
Location: United Kingdom
Posts: 1702
Posted: 09:12am 09 Oct 2024      

Peter you probably have seen this but just in case link

and also this

matherp
Guru

Joined: 11/12/2012
Location: United Kingdom
Posts: 10169
Posted: 09:37am 09 Oct 2024      

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 Kingdom
Posts: 1702
Posted: 09:56am 09 Oct 2024      

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 Kingdom
Posts: 2504
Posted: 05:17pm 09 Oct 2024      

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