An open sourced STM32 bare bones display driver board
My overall goal is to make a custom board, but I've got started using off the shelf boards to put together a prototype system. The final board will have a STM32F769 as the micro, but I'm working off of a board that has a STM32F767. The only real difference is the lack of DSI-HOST on the latter. While being able to work on MIPI-DSI displays is one of the goals, it's not entirely necessary at this stage. The STM32F767 board that I'm using is one commonly found on Ebay and Aliexpress and others like it. Here's some examples from Ebay. The board is cheap (around 25-30USD), has SDRAM on board, QUADSPI capable flash, JTAG connector among other features. To that board, I added an Adafruit TFT Friend, giving me a 40-pin FPC connector and a LED backlight drive circuit. Next up is an Adafruit Resistive Touchscreen Controller, adding in, ya know, resistive touch screen control. Finally whack in a 4.3" touch screen with resistive overlay and you've got all the hardware bits to get going. I have a whole bunch of 4.3" touch screens surplus from various manufacturers and they are all pretty close to the same so one could call it almost a "standard" display. The STM32F767 board can be powered over USB and the whole system consumes under 500mA current, so this option is viable. On my bench, I'm running it from a bench supply. Last hardware item is my ST-LINK V3SET debugger. Here's what the mess looks like all put together:
To date, I've been able to get the SDRAM up and going and run some basic tests on the LCD. There is an issue with the QUADSPI flash that's on this board. That's detailed in another project of mine found here
More updates to come!
So, as mentioned earlier, using standard design rules for the PCB you can completely fan out ST's TFBGA 216 package. Those standard PCB design rules are 4mil trace and space and .45mm via (17.7 mil). This is JLCPCB's multi-layer board minimums. OSHPark is a little more restrictive and has 5mil trace and space with 18 mil via. I didn't run the BGA fan out against the OSHPark rules, so someone would have to check that if they want. I tend to use JLCPCB most of the time anyway. Here's a picture of the complete fan out:
ST did a pretty good job of placing the power and ground pins so that you could use this package on a 4 layer board. Of course, it's no good if you can't get the decoupling caps in there. So here's a look at the fan out with decoupling caps:
That's the required number according to the data sheet. This doesn't include a couple of power pins like Vdda and Vref as you'll usually have ferrites and other filtering on those. The smaller caps are 0402 which, for me, is about the limit of hand soldering. The larger tank cap up in the corner is 0805.
That's 100% fan out, does a pretty good job of not chopping up the GND and VDD power planes.
However, once you start to try to route out an SDRAM chip with a standard pinout, the idea of using a BGA starts to fall apart.
I was planning on using a MT48LC4M32B Micron SDRAM chip as it the same one used on the ST dev boards. You can also fan out the VFBGA-90 package that comes in, but it's pretty tough to fully connect the two with only four layers. I'm choosing to use a 32-bit data path and 13-bit address path which ends up being 57 total connections between the two devices.
While I'm sure it's possible to do on four layers with careful routing and tons of time, I have a feeling it would be almost impossible to route out any of the other pins. And while I would be OK with losing a few I/O, I think it would end up taking out the possibility of using most of the other peripherals.
You could go to 6 layers and JLC still offers hobbyist friendly 6 layer fabrication, but its pricey. At the time of this writing they will do 100mm by 100mm 6-layer for 87USD (qty. 10) at a build time of about a week. That's actually really amazing when you think about it, but I was hoping for something cheaper.
All that being said, I'm going to scrap the idea of using the BGA packages. However, once you start to look into the alternatives some interesting ideas start to evolve...
Til next time
For the micro, I'm going to go with the STM32F769. This is the device mounted on a few different graphics dev boards made by ST. It comes in a couple of packages that fit my goals. The STM32F769NIHx comes in a TFBGA216 package that has a 0.8mm ball pitch. The device can be completely fanned out on a 4 layer board with 4mil trace/space. There is also the STM32F769BITx that comes in a LQFP208 package with 0.5mm pin pitch. This part is actually part the JLCPCB SMT process and at the time of this writing actually has stock.
The STM32F769 has 2 lanes of DSI and LTDC-RGB888 (although both cannot be used at the same time) and can support SDRAM as well as QUADSPI. Enabling all of these does not step on any of the other hardware peripherals meaning if you want ethernet or audio you can have it. The display interface (LTDC or DSI), RAM (SDRAM - FMC) and flash (QUADSPI) make up the hardware requirements to run TouchGFX.
Finally using the F769 means I would have access to all the code and examples created for all the demo boards that use this device.
I think it would be cool to use the STM32H745 which is the M7/M4 combo core. It can support graphics, but does not have DSI hardware capabilities. The dual core would allow you to have the M7 running the graphics side of the application, giving you an entire free M4 core for any real time stuff. It would be awesome if ST had a dual core part that has the advanced graphics stuff on it.
I'll post up next an example of fanning out the F769 TFBGA package.
Until next time...