Hi Louis
Thank you for the quick response! I’ve made some progress today. Now I can successfully compile the sketch, due to some changes in the library.
First of all, I had to change and add/remove some #include -paths for the ESP32-S2:
SmartMatrixMultiplexedRefreshESP32_Impl.h:
// #include "driver/mcpwm.h"
// #include "soc/mcpwm_reg.h"
// #include "soc/mcpwm_struct.h"
#include "esp32/rom/lldesc.h" // instead of "rom/lldesc.h"
SmartMatrixMultiplexedRefreshESP32_NT_Impl.h:
// #include "driver/mcpwm.h"
// #include "soc/mcpwm_reg.h"
// #include "soc/mcpwm_struct.h"
#include "esp32/rom/lldesc.h" // instead of "rom/lldesc.h"
MatrixHardware_ESP32_V0.h:
#include "../../../include/soc/include/hal/gpio_types.h" // added for ESP32-S2
Secondly, I changed the pinout for the ESP32-S2:
MatrixHardware_ESP32_V0.h:
#define R1_PIN GPIO_NUM_2
#define G1_PIN GPIO_NUM_15
#define B1_PIN GPIO_NUM_4
#define R2_PIN GPIO_NUM_16
#define G2_PIN GPIO_NUM_13
#define B2_PIN GPIO_NUM_17
#define A_PIN GPIO_NUM_5
#define B_PIN GPIO_NUM_18
#define C_PIN GPIO_NUM_19
#define D_PIN GPIO_NUM_21
#define E_PIN GPIO_NUM_12
#define LAT_PIN GPIO_NUM_26
#define OE_PIN GPIO_NUM_20
#define CLK_PIN GPIO_NUM_14
The following GPIOs are missing on the ESP32-S2: 22, 23, 24, 25, 27, 28, 29, 30, 31, 32
Then I realized, that the ESP32-S2 has only one I2S interface instead of two (like the ESP32).
I’ve seen that the SmartMatrix Library uses the I2S1-Interface (although they both should behave similarly?). Therefore, I had to change all I2S1 stuff to I2S0 (in the file esp32_i2s_parallel.c).
Unfortunately, this does not work. Although the initialization completes successfully and the i2s_isr
gets called regularly (I’ve tested it with my Scope by toggling an unused GPIO), absolutely nothing appears on the output pins connected to the LED-Matrix.
Here’s a dump of the Comm-Port:
ESP-ROM:esp32s2-rc4-20191025
Build:Oct 25 2019
rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
SPIWP:0xee
mode:DIO, clock div:1
load:0x3ffe6100,len:0x8
load:0x3ffe6108,len:0x570
load:0x4004c000,len:0x1620
load:0x40050000,len:0x1a50
entry 0x4004c27c
Starting SmartMatrix Mallocs
Heap/32-bit Memory Available: 229188 bytes total, 190308 bytes largest free block
8-bit/DMA Memory Available : 229188 bytes total, 190308 bytes largest free block
SmartMatrix Layers Allocated from Heap:
Heap/32-bit Memory Available: 224080 bytes total, 186576 bytes largest free block
Starting SmartMatrix DMA Mallocs
sizeof framestruct: 00001800
DMA Memory Available before ptr1 alloc: 211344 bytes total, 186160 bytes largest free block
matrixUpdateFrames[0] pointer: 3FFC7520
DMA Memory Available before ptr2 alloc: 211344 bytes total, 186160 bytes largest free block
matrixUpdateFrames[1] pointer: 3FFC8D30
Frame Structs Allocated from Heap:
Heap/32-bit Memory Available: 211344 bytes total, 186160 bytes largest free block
8-bit/DMA Memory Available : 211344 bytes total, 186160 bytes largest free block
Allocating refresh buffer:
lsbMsbTransitionBit of 0 requires 393216 RAM, 186160 available, leaving -207056 free:
lsbMsbTransitionBit of 1 requires 196608 RAM, 186160 available, leaving -10448 free:
lsbMsbTransitionBit of 2 requires 98304 RAM, 186160 available, leaving 87856 free:
Raised lsbMsbTransitionBit to 2/11 to fit in RAM
lsbMsbTransitionBit of 2 gives 76 Hz refresh, 120 requested:
lsbMsbTransitionBit of 3 gives 151 Hz refresh, 120 requested:
Raised lsbMsbTransitionBit to 3/11 to meet minimum refresh rate
Descriptors for lsbMsbTransitionBit 3/11 with 8 rows require 49152 bytes of DMA RAM
SmartMatrix Mallocs Complete
Heap/32-bit Memory Available: 162160 bytes total, 136976 bytes largest free block
8-bit/DMA Memory Available : 162160 bytes total, 136976 bytes largest free block
Setting up parallel I2S bus at I2S0 (modified)
config sig_data_base ok
route signals ok
power on dev ok
init i2s dev ok
I2S setup done.
Do you have an idea what could cause this behavior?
I would really appreciate it, if we can get it working on the ESP32-S2!
Here is my example code (the modified SmartMatrix library is integrated in the sketch folder):
ESP32_S2_FeatureDemo.zip
The ESP32-S2 core libraries can be downloaded by selecting the esp32s2
-branch here:
https://github.com/espressif/arduino-esp32/tree/esp32s2
Florian