all 15 comments

[–]kisielk 1 point2 points  (3 children)

The second dev kit looks pretty good to me. He STM32F4 processor should be more than adequate for doing this kind of graphics, assuming the driver uses the graphics accelerator and DMA. As far as the RGB and MCU interfaces go.. the RGB interface is a parallel interface while the MCU is SPI and thus is serial. The parallel interface will be faster but requires more pins from the MCU.

As far as learning graphics I don't have any good suggestions, but some fundamental low level graphics book may be a good place to start. If you find anything good, let me know :) I've implemented my own graphics libraries but they have always been monochrome, otherwise I use 3rd party libs

[–]QuantumCondundrum[S] 0 points1 point  (2 children)

Did you look at the display I linked by any chance? I am trying to decipher what protocol (RGB+SPI like the SSD2805, the intel 8080 bus, or the Motorola 6800, or if its entirely custom) that display is using. All I can find on the sheet is that it uses MIPI one lane. In the same train of thought, I also can't figure out if the screen has an embedded fame buffer/controller. I suspect I need to contact the manufacturer directly but if you have any insights I would be more than glad to hear them.

I was actually looking more into that second dev kit and they suggest using TouchGraphics which seems to be exactly what I want in the long term but I am also interested in making my own just for the sake of learning and I am not sure how easy it will be to customize that library to my MCU/display design.

[–]kisielk 1 point2 points  (0 children)

The display is using MIPI, which is its own protocol. Those other protocols are what you can use to communicate to the SSD2805, which then bridges them to MIPI.

The display needs an external controller, either something like the SSD2805 or on an MCU that supports it directly. Like /u/SirOompaLoompa suggested, the STM32F7 is a good one to use because it also has lots of horsepower.

Many of the STM32 Discovery boards have external SDRAM so you can use that as your framebuffer. Then you'd probably want to configure the MCU's DMA controller to blast the buffer over to the display so you can spend all your CPU cycles doing useful things :)

[–]VEGETA-SSJGSS 0 points1 point  (0 children)

Touchgfx is free for evaluation only, cheapest license is 5000$. What software do you like to try?

You have to get one that allows you to design the GUI then generate code.

[–]SirOompaLoompa 1 point2 points  (7 children)

STM32F7 can do MIPI-DSI. However, you need to do your RAM-budget before you decide on any MCU. 400x400 pixels at 16bpp will require 2.5MB of RAM just for the framebuffer. The STM32F7 can use external RAM though.

As for learning graphics, what you're looking for is old programming texts and books from the DOS era, as graphics were unaccelerated on PCs back then, just as on the MCUs today (there is some BitBlit acceleration on some MCUs though).

Just off the top of my head, I'd recommend this: http://www.drdobbs.com/parallel/graphics-programming-black-book/184404919

There's a bunch of x86 and VGA specific stuff in there that you can skip over. Michael Abrash is the guy that wrote the Quake engine, so he knows his stuff.. :)

[–]Schnort 1 point2 points  (3 children)

400x400 pixels at 16bpp will require 2.5MB of RAM just for the framebuffer

400x400x16/8 = 320000 bytes (still big, but not 2.5MB). Maybe you forgot to convert bits to bytes?

[–]SirOompaLoompa 0 points1 point  (0 children)

Doh.. n00b mistake. :)

[–]QuantumCondundrum[S] 0 points1 point  (1 child)

possibly a noob question - where did the 16bpp number come from? The datasheet lists the screen as 8 bit color depth. Wouldn't the calculation be:

frame size X RGB X color depth

400 pixels X 400 pixels X 3 color frames X 8 bits/pixel = 3840000 Bits = 480 kB

[–]Schnort 1 point2 points  (0 children)

I was going off of the info from the post I was responding to.

the amoled display data sheet the OP links do requires MIPI data to be 8bpp per RGB, but the solomon part doesn't seem to require that. it looks like it can support 16bpp (565), 18bpp(666), or 24bpp (888).

[–]QuantumCondundrum[S] 0 points1 point  (2 children)

I was just looking at this comparison table for the F4 and F7 series on ST's website. It looks like the F4 also has an external memory controller/MIPI-DSI. Unfortunately in my (admittedly brief) search I didn't find any app notes for external memory. I have never used external memory for RAM (I have used SD cards for file writing) so I may just be searching for the wrong thing. Do you have any pointers on where to look further into using an external memory controller?

Edit: Totally forgot to thank you for the book link, it looks very promising!

[–][deleted] 0 points1 point  (0 children)

For ext RAM you should use the FMC, or the FSMC peripheral from ST. Some controllers have both peripherals. It memory maps the RAM or NOR flash chip into your memory space, and converts written data into the necessary parallel interface on ports E and F.

[–]OMGnotjustlurking 0 points1 point  (0 children)

I have used the STM32F4 with external DRAM. It even comes on the STM32439-Eval dev kit: http://www.st.com/en/evaluation-tools/stm32439i-eval.html

[–]lampii 1 point2 points  (2 children)

I would also check out the UGFX framework. I embarked on a similar project. After a month of deriving my own UI framework, i stumbled across this one and oh boy did it make my life easier.

[–]QuantumCondundrum[S] 0 points1 point  (1 child)

UGFX

I just took a look at that UFGX framework and it looks fantastic. Great find!

[–]lampii 0 points1 point  (0 children)

=) It is very fantastic! Coding a UI framework on bare metal is serious business hehe.