Saturday, July 15, 2023

New display PCB design complete

Introduction and disclaimers

It is always dicey to speak in glowing terms about a PCB I just designed and sent out for manufacture, because I know it can come back and be a total expensive paperweight. With that in mind, and pace the fates whom I would never think to tempt, I'd like to talk about the latest display PCB.

If you recall, I'm currently fielding a 2.4" sunlight readable LCD panel with a small custom circuit attached to a Raspberry Pi 3A+.

The idea is that the "adjustment knob" acts as a USB peripheral to the display and supplies it with power via USB-PD. This worked up to a point. The basic problem is that I have had trouble getting USB peripherals to work with the 3A+, and I would have to disconnect and re-connect the "knob" to get it to show up properly. Clearly a pain in the neck, and not conducive to usability. I would like a bombproof USB implementation.

I could come up with yet another random add-on to fix this, but really, this would be throwing good money after bad. I decided to just go ahead with a new PCB and see if I could get that going. This is the story of that design.


The PCB is a carrier for a RPi Compute Module 4, with an LED driver for a Newhaven 2.4" sunlight readable non-touch LCD panel. The PCB is 62mm tall, while the LCD panel itself is 60.26mm tall. The PCB is therefore just about the minimum possible size that the full unit can be anyway. The following renderings show the front and back of the PCB, with and without components. The design is based on forking the Raspberry Pi CM4IO project in KiCad. The ECAD files are available on Github. In the next few sections, I will discuss the various features.

CM4 socket

I rely on the CM4 onboard power supply to generate +3.3V, and I hooked up the various GPIOs in what I hope is a sensible way. To the extent possible, I tried to go through every pin and either connect it to something or "X" it out as not connected, so as not to miss any important things. There are still a few open pins but no major mistake. I hope. :)

Notice that I didn't place any components under the CM4. It is possible to select slightly "taller" connectors and do that, but these components would not be accessible for debugging on a running system. Since I had the room, I limited myself to putting parts where I'd be able to see them all the time.

USB socket and power delivery

This is a basic USB-C socket with USB 2.0 data connectors and 5.1k resistors to request up to 3A at 5V from USB-PD sources.

 USB data implementation

Between the CM4 and the downstream facing socket, I decided to include a USB hub IC. This may be redundant, but the notes on the schematic explain it all! Luckily, I chose a hub IC that I later found LadyAda recommending in a YT video!

Display circuitry

The next important part is the display driver. I have an LED driver for the high brightness backlight. Otherwise, I have a bunch of GPIO lines that feed parallel data to the display controller, and I am using the Raspberry Pi's Secondary Memory Interface to quickly push bitmaps to it. This is all proven out in my current RPi 3A+ implementation so, unless I've made a major error in wiring, I hope it continues to work.


SD card interface

I designed this board to be used with a CM4 Lite, i.e., one with no eMMC which boots off an SD card. This allows me to send a customer an SD card with a new "personality" on it, and have them swap it in and not have to "install" anything with wires or software. The CM4IO has a power on/off for the SD card, and I probably did not strictly need that, but I wanted to have maximum parity with what is "known to work" so I just copied (cargo culted?) the circuit directly.

I2C parameter memory

I mentioned that I wanted to swap out "personalities" using the SD card. But what about persistent settings on the board? I decided to add some I2C connected memory for that purpose, where software can squirrel away that stuff in a format that different versions of the software can understand. It turns out this stuff is so cheap, I put in a 2 megabit memory. Not sure how I'll use it, but we'll see.

Indicator LEDs

I totally cargo culted the CM4IO's circuit for indicator LEDs. These will probably be covered up in an actual useable unit because pilots flying at night don't need extra blinkenlights. But for development, they can be super useful.

Parting words

As I said, I am not one to tempt the fates. I will try to be honest with how this whole muckery went. The design is off to the manufacturer; fingers crossed!

No comments :

Post a Comment