That is interesting, I converted that code to work with my library to see if your library is at fault.
void TFT_display(void)
{
if(tft_active != 0U)
{
EVE_cmd_dl(CMD_DLSTART); /* start the display list */
EVE_cmd_dl(DL_CLEAR_COLOR_RGB | BLACK); /* set the default clear color to black */
EVE_cmd_dl(DL_CLEAR | CLR_COL | CLR_STN | CLR_TAG);
for(uint32_t i = 0; i < SENDNOPS; i++)
{
EVE_cmd_dl(DL_NOP);
}
EVE_color_rgb(0x600060);
EVE_cmd_dl(VERTEX_FORMAT(3));
EVE_cmd_dl(DL_BEGIN | EVE_LINE_STRIP);
EVE_cmd_dl(LINE_WIDTH(5 * 16));
EVE_cmd_dl(VERTEX2F(10 * 8, 10 * 8));
EVE_cmd_dl(VERTEX2F(500 * 8, 500 * 8));
EVE_cmd_dl(DL_END);
EVE_cmd_button(250, 100, 100, 100, 28, 0, "Button");
EVE_cmd_button(400, 100, 100, 100, 28, 0, "Button");
EVE_cmd_button(550, 100, 100, 100, 28, 0, "Button");
EVE_color_rgb(WHITE);
EVE_cmd_number(100, EVE_VSIZE - 50, 26, EVE_OPT_RIGHTX, display_list_size); /* number of bytes written to the display-list by the command co-pro */
EVE_cmd_dl(DL_DISPLAY); /* instruct the co-processor to show the list */
EVE_cmd_dl(CMD_SWAP); /* make this list active */
EVE_execute_cmd(); /* wait for the display list to be processed */
}
}
And like this I can set SENDNOPS to 1003 with a resulting display list of 4784 bytes before the display glitches out.
Commenting out the three buttons I can set SENDNOPS to 1334 which is a display list of 5432 bytes.
So I can go higher, but I can not use the full 8kiB of the display list either.
One thing that could go wrong is that the CMD-FIFO is getting full since it only has 4kiB.
But that is not the issue, I am using individual commands in this example, no DMA, chip-select low, address, command, chip-select high.
It should not be possible to throw in more in the FIFO like this than the co-processor can handle.
But to make sure I slowed down the SPI and also added a busy-wait for the FIFO to be empty in the loop - makes no difference.
In a different project that really is putting stress on the BT817 with thousands of line-strip segments, I am using DMA and fill the FIFO with 3676 bytes with a resulting display list of 6108 bytes - but it glitches out after a minute or less.
When I put in less it runs longer without issue - and by less I mean less iterations, like "only" using 36 points per line strip instead of 64.
It looks like my BT817 is overheating, pretty sure it is not, but it looks like it is.
Oh, another observation out of a hunch, updating the display list less often seems to help as well, I am at 20Hz / 50ms now with 5672 bytes in the display list.
This does not help with the program above though, the limit is still 1334 NOPs with a display list of 5432 bytes.