T-Deck uLisp not running due guru meditation error



at first, I was able to program T-Deck with no problems - there was the original demo firmware on it.

Then I made a simple change (which I should not be doing in the first place) on line 6392 in uLisp-tdeck-release5.

while ((millis() - start) < 5000) { if (Serial) break; }
// I changed to
while ((millis() - start) < 1000) { if (Serial) break; }

The fw did not start normally and t-deck kept restarting. I’m not sure if it was writing anything to serial this time. Then I tried to reflash it with the original firmware and the result seemed to be the same, but this time I was able to copy paste the feedback from serial monitor.

ESP Exception Decoder
Sketch: original-ulisp-tdeck-release5 FQBN: esp32:esp32:esp32s3

Build:Mar 27 2021
rst:0xc (RTC_SW_CPU_RST),boot:0x8 (SPI_FAST_FLASH_BOOT)
Saved PC:0x4209f0da
mode:DIO, clock div:1
entry 0x403c98d0

Guru Meditation Error: Core  1 panic'ed (StoreProhibited). Exception was unhandled.

Core  1 register dump:
PC      : 0x42010f18  PS      : 0x00060630  A0      : 0x8201119b  A1      : 0x3fcebb90  
A2      : 0x3fcc56e0  A3      : 0x00000000  A4      : 0x0000000c  A5      : 0x0000000d  
A6      : 0x000000ff  A7      : 0x00000000  A8      : 0x00000010  A9      : 0x08000000  
A10     : 0x3fcc57f0  A11     : 0x019bfcc0  A12     : 0x00000001  A13     : 0x00000004  
A14     : 0x00000000  A15     : 0x00000001  SAR     : 0x00000010  EXCCAUSE: 0x0000001d  
EXCVADDR: 0x00000010  LBEG    : 0x400570e8  LEND    : 0x400570f3  LCOUNT  : 0xffffffff  

Backtrace: 0x42010f15:0x3fcebb90 0x42011198:0x3fcebbc0 0x420115b8:0x3fcebbf0 0x420076ec:0x3fcebc10 0x42007757:0x3fcebc30 0x4201a3e7:0x3fcebc50

PC: 0x42010f18:  is in TFT_eSPI::writecommand(unsigned char) (c:\Users\pogur\OneDrive\Dokumenty\Arduino\libraries\TFT_eSPI\TFT_eSPI.cpp:81).
EXCVADDR: 0x00000010

Decoding stack results
0x42010f15:  is in TFT_eSPI::writecommand(unsigned char) (c:\Users\pogur\OneDrive\Dokumenty\Arduino\libraries\TFT_eSPI\TFT_eSPI.cpp:81).
0x42011198:  is in TFT_eSPI::init(unsigned char) (c:\Users\pogur\OneDrive\Dokumenty\Arduino\libraries\TFT_eSPI\TFT_eSPI.cpp:692).
0x420115b8:  is in TFT_eSPI::begin(unsigned char) (c:\Users\pogur\OneDrive\Dokumenty\Arduino\libraries\TFT_eSPI\TFT_eSPI.cpp:603).
0x420076ec: initgfx() at C:\GitHub\upol-bc-thesis\fw\T-Deck\original-ulisp-tdeck-release5\original-ulisp-tdeck-release5.ino:6377
0x42007757: setup() at C:\GitHub\upol-bc-thesis\fw\T-Deck\original-ulisp-tdeck-release5\original-ulisp-tdeck-release5.ino:6397
0x4201a3e7: loopTask(void*) at C:\Users\pogur\AppData\Local\Arduino15\packages\esp32\hardware\esp32\2.0.15\cores\esp32\main.cpp:42

(I used this plugin to decode the core dump: https://github.com/dankeboy36/esp-exception-decoder )

My settings in Arduino IDE are according to the documentation on uLisp site. I made sure that I used the Lilygo TFT_eSPI library.

Basic “Hello world” program works fine.

I’m writing here because I’m not sure whether I inadvertently put it into some state of evil by changing the timeout. If anybody can confirm the error is more general I will ask in Espressif forum. I keep investigating in the meantime…

Thank you in advance for any clue.


The ESP32-S3 (which the T-Deck is based around) implements the serial functionality with a native USB peripheral and the implementation right now is super buggy, at least according to the number of GitHub issues that mention both “esp32s3” and “serial”. This may have something to do with that. It might take longer than 1 second to connect, and if you try to do anything to serial before it connects (e.g. set baudrate, etc) it might screw up the processor - in your case, so badly that it crashes.

David already found that if you try to send too much data at once down the USB connection to an S3, it disconnects (and then probably crashes, but you don’t get the core dump because it disconnected!)

I bet these bugs are related…


Thank you for your quick response.

So what you want to say is that it is effectively bricked? Without any possibility of recovery?


I don’t think you can have bricked the T-Deck simply by uploading uLisp with that change to the serial timeout.

When you connect your bricked T-Deck, can you see the USB port in the Arduino IDE?

I vaguely remember getting my T-Deck into a state where I had to reset it in a special way before I could upload uLisp again. Have you tried the instructions for “Enter Flash Mode (Download Mode)” on this page?

LILYGO® T-Deck Support #8558


Thank you David, I really appreciate you stepped in.

I don’t want to believe either I bricked it by simply uploading firmware.

Yes, I tried the download mode. Actually this was the only way I was able to flash it with uLisp after I did the stupid thing of changing the time out. Now even if I want to flash simple Arduino Hello World to serial sketch, I need to put it into that download mode.

Do you have any ideas what to do next or where to look for help?
Thank you once again.


Can you describe step by step what your procedure is?

Presumably the title of this topic “T-Deck not compiling” isn’t accurate - I assume the uLisp T-Deck firmware compiles without error?

Does it upload without error?

When you reset the T-Deck after uploading the uLisp firmware, is that when you get the Guru Mediation Error?


Yes, you are right with the title. I changed it, but feel free to change it again.

  • uLisp T-Deck fw compiles without error
  • it uploads without error
  • after uploading, I need to reset it manually, and then I get the Guru Meditation Error


Some further questions:

Have you ever had the uLisp firmware working on your T-Deck (before you changed line 6392)?

Out of interest, why did you change it? By the way, I’m pretty sure changing that line can’t be the cause of your problems.

You say “at first, I was able to program T-Deck with no problems - there was the original demo firmware on it.” What do you mean by this?

What version of the ESP-32 Arduino Core are you using?

Are you following these instructions:

LilyGO T-Deck uLisp Machine - Installing the T-Deck uLisp firmware


Yes, it worked like a charm for the first. I did not neet to put it into that download mode and I did not need to reset it after uploading the fw (I believe, not sure).

I changed it, because I was annoyed by the longer startup time without having USB cable connected. When the cable is plugged in and the device can connect to Arduino Serial Monitor right away, it boots below 1s. However, I was feeling that you might have good reason to set the timeout to 5s. I learned a valuable life lesson: not to tinker with things that are working. Btw, I cannot believe it could be the reason either.

By “at first” I meant when I got it brand new. It had some demo or what on it. You could click on the display and play some sounds. From this state it was possible to program it with uLisp without any problems whatsoever.

Arduino IDE 2.3.2 with these Aditional Boards Manager URLs:


So it gives me ESP32 core version 2.0.15
When I copy the TFT_eSPI library from T-Deck repo I get version 2.5.22 of the library. I double checked that it must not be 2.5.43 which I get when I let Arduino update libraries.

Yes, I hope I did everething according the page you are mentioning.


That all sounds OK, so I’m not sure what else to suggest. Perhaps someone else who is using the T-Deck can offer some suggestions.


Just out of curiosity: Do you need to reset the T-Deck after firmware uploading using the reset button to get it to run?


Do you need to reset the T-Deck after firmware uploading using the reset button to get it to run?

Sorry, I can’t remember. Can someone else help?