DLPDLCR160CPEVM: Read/Write the splash-screens stored in flash via UART

Part Number: DLPDLCR160CPEVM
Other Parts Discussed in Thread: DLPC3421

Tool/software:

NB: my question is pretty much the same that this one:  RE: DLPDLCR160CPEVM: Read/Write the splash-screens stored in flash via UART 

which thread was 'locked' despite not having been answered...

I want to display custom 640x360 images with the DLPDLCR160CPEVM.

(Use case: load ~8 images on the EVM internal flash memory, send request every few seconds to display one of those image)

Following the DLPDLCR160CPEVM User's Guide (DLPU131A.pdf), i was guided to use the UART (aka serial) port as main communication interface.

After reading the DLPDLCR160CPEVM Software Programmer's Guide (DLPU134.pdf), I had a good understanding of how to build UART frames to convey commands to the DLPC3421.

While reading DLPC3421 Software Programmer's Guide (DLPU115B.pdf) I could understands and successfully implement some commands such as Read Short Status (D0h), Read Splash Screen Header (0Fh) or display one of the 8 pre-loaded splash-screen (Write Splash Screen Select 0Dh+ Write Input Source Select 05h + Write Splash Screen Execute 35h).

I want now to be able to read (and re-write) the splash-screens that are pre-loaded in the flash (I estimate it will take about 1min to write a 640x360 16bit image in the flash via UART)

But I am not sure how to read/write the flash.

From what I understand the process would be to:

  1. Put the "flash read/write pointer" at the good address via Write Flash Data Type Select (DEh)
    • The parameters for this command should be 4 bytes:
      • 1st byte: "Partial user splash screen set", but it is not listed in Table 3-125... What value should i use?
      • 2nd byte: "Splash number", so between 00h and 07h, I guess
      • 3rd and 4th byte: "N/A". Should I put 00h for both or just use 2 parameters bytes instead of 4?
  2. Specify the length of the data that will be written to or read from the flash via Write Flash Data Length (DFh)
    • The UART frame is not limited to 32 byte total (29 bytes payload) for read/write flash operation: right? so I could ask for 256 bytes per transaction?
  3. Read the Splash-screen-image: Read Flash Start (E3h) and Read Flash Continue (E4h), by block of 256 bytes
  4. Write a new Splash-screen-image:
    • Erase all sectors of the selected splash-screen via a single Write Erase Flash Data (E0h)
    • Write Flash Start (E1h) and Write Flash Continue (E2h), by block of 256 bytes

In addition of those "procedural" questions, I wonder about the way the flash is partitioned to store the flash screen. Indeed, beside splash-screens number 01h and 03h (that are Uncompressed, and therefore have a fixed size of 460 800 bytes) all the other splash-screen are RLE compressed  (and have variable size, some as low as 35 152 bytes).

  • Is the memory size associated to each splash-screen fixed by their current size or by the maximum size (460 800 bytes for a 16bit/pixel, 640x360pixel image)
  • should I re-write the splash-screen header after modifying a splash-screen? What would be the command to do so?
  • Can we store more than 8 splash-screens in the flash? (using the default DLPDLCR160CPEVM hardware, with the default pre-programmed flash-memory. not sure how big the flash is nor how much of it is currently used...)

Thank you a lot for your help!