KurteE and WWatson - Thanks for the code and your help. After my tests I learned a lot which brings on more questions...
I ran your test setup program and I do get 16 bits in 16 bit mode... 8 bits in 8 bit mode... great test to have.
In the RA8876_PictureEmbed.ino I did get 8 bits in the setup and first part of the program and then 16 bits.
I did add some delays in the first part in the loop and I get a green screen with "Rotation 0" in the middle of the screen. The data logger is telling me that everything to this point is 8 bit. after the "drawImage(240, 320, (uint16_t *)teensy40_pinout1, RED, false);" goes to 16 bit I loose my screen and I get a flicker. I have either too much noise, some wires crossed, or wires/soldier joints touching. I am going to use your test program and change the hex value to pulse the pins in different sequences to make sure they are correct, then chase the noise.
Something to remember is all RA8876 register reads and writes are always 8 bit. Only RA8876 frame buffer memory can be 8 or 16 bit read/write.
This is exactly what was happening and why I did not gate 16 bits in the other programs I ran.
Scope set up 8 bit record - Blue D0 - Red D1 - Green D8 - Yellow D12 ------ Just showing you the noise
FYI... I was getting an error "Compilation error: font_ComicSansMS.h: No such file or directory" for line 10 in the picture embed program. I changed: font_ComicSansMS.h to _font_ComicSansMS.h and it compiled
If you all start selling the dev boards put me down for a couple. Also if you have a shield that connects directly to the display for sale let me know...
When I was running the pictureEmbed program in 8 bit and 16 bit modes I noticed there is not much difference in time when
drawImage(240, 320, (uint16_t *)teensy40_pinout1, RED, false);
is run. 16 bit is about 10% faster
I commented out most of the loop so the program would just run a test section so I would see the same data repeated.
void loop(void) {
uint16_t *rotated_image = nullptr;
Serial.printf("Set Rotation(%d)\n", rotation);
tft.setRotation(rotation);
tft.setFont(ComicSansMS_24);
tft.fillScreen(RED);
tft.setCursor(tft.width() / 2, tft.height() / 2, true);
tft.setTextColor(GREEN);
tft.printf("Rotation: %d", rotation);
delay(5000);
if (DelayOrStep()) return;
rotation = (rotation + 1) & 0x3;
Serial.print("Display Front of card ");
drawImage(240, 320, (uint16_t *)teensy40_pinout1, RED, false);
if (DelayOrStep()) return;
delay(5000);
////////////////////////////////////////////////////////////////////// Commented out below
/*
Serial.print("Display Back of card ");
drawImage(240, 320, (uint16_t *)teensy40_pinout2, GREEN, false);
if (DelayOrStep()) return;
#if defined(__IMXRT1062__)
Serial.print("Display T4.1 Extended card ");
drawImage(575, 424, (uint16_t *)teensy41_Cardlike, BLUE, false);
if (DelayOrStep()) return;
#elif defined(ARDUINO_TEENSY36)
Serial.print("Display Talldog T4 card ");
drawImage(400, 272, (uint16_t *)td_t4_top, BLUE, false);
if (DelayOrStep()) return;
#endif
#if defined(__IMXRT1062__) || defined(ARDUINO_TEENSY36)
Serial.print("Display front of chip ");
drawImage(240, 320, (uint16_t *)teensy40_front, BLUE, false);
if (DelayOrStep()) return;
#endif
// lets try to pre rotate image and see if it speeds up
#if defined(__IMXRT1062__)
Serial.print("Display rotated T4.1 Extended card ");
rotated_image = tft.rotateImageRect(575, 424, (uint16_t *)teensy41_Cardlike);
drawImage(575, 424, (uint16_t *)rotated_image, DARKGREEN, true);
#elif defined(ARDUINO_TEENSY36)
Serial.print("Display TallDog T4 pre rotated Card ");
rotated_image = tft.rotateImageRect(400, 272, (uint16_t *)td_t4_top);
drawImage(400, 272, (uint16_t *)rotated_image, DARKGREEN, true);
#elif defined(ARDUINO_TEENSY35)
Serial.print("Display TallDog T4 pre rotated Card ");
rotated_image = tft.rotateImageRect(240, 320, (uint16_t *)teensy40_pinout1);
drawImage(240, 320, (uint16_t *)rotated_image, DARKGREEN, true);
#endif
if (rotated_image) free(rotated_image);
if (DelayOrStep()) return;
*////////////////////////////////////////////////////////////////////
} // End of Void Loop
8 bit mode - Drawimage data ONLY - Note: I have may scope connected to the two channels that have noise - there is NO display connected - T4.1 on breadboard only - similar times were noted with the other T4.1 with my display board connected to the display.
16 bit
If what I see is true and there is not much difference between 16 bit and 8 bit and most of the communication would be 8 bit I am thinking 8 bit is the way to go. I not sure I have the skill to get 16 data lines + 4 for WR RD CS ... quiet enough to be reliable. I think I have half a shot at 8bit + 4.
Please let me know if I am reading the data correct I figured 16 bit would be almost half the speed if not faster.
Now I understand the draw to go SPI... not as may lines to have to fight the noise on...
Thanks again for your help,
DJETH