What is pin 7 on the OLED? [Nothing]

tldr; Can someone please put a scope on pin 7 and tell me what they see?

Ok, so I’ve been going nuts trying to figure out why the manufacturer wouldn’t just expose the vertical refresh (FR) pin to the flexible pin connector. It doesn’t make any sense, it gives the ability to prevent tearing and gives the user gray scale capability. This would be a huge value add.

We must go deeper. We must not believe what we have been told. There is a mystery about pin number 7.

Alright, let’s start with the SSD1306 data sheet, what does it tell us about the FR pin and the ability to sync the vertical refresh?

Source: https://cdn-shop.adafruit.com/datasheets/SSD1306.pdf

Ok, so it’s right there in the index, that’s a good sign right?

This shows the FR pin is an output! Getting warmer!

And here it is (really small, sorry) within the pin-out of the actual controller chip. Seems like more good news!

OMG! Yes, this is what we want! Feeling good!

Look! A whole section describing how to use the FR pin, this is great! OK, so let’s use it! Where is it?

Well the FR pin certainly does come out of the SSD1306, but it’s tiny. We don’t actually have access to the tiny pins. The controller is under a pile of goop on the glass of the OLED. Let’s look at the datasheet for the actual screen module we use.

Source: https://cdn-shop.adafruit.com/datasheets/UG-2864HSWEG01.pdf

The big red arrow points at the actual controller chip. It’s tiny, you may have not even know there was a chip in there!

This is the pinout list from the OLED. And… No FC pin. Seriously? Are we out of luck? This is where I gave up before.

But what is this? What is pin 7?

All of the other pins are accounted for and need to be used with their designated functions, but why not connected? What do you mean compatible and flexible design??
We can also see the two N.C. on either end of the connector are supposed to be tied to ground and are supposedly just for mechanical strength. And that makes sense, but why is some random pin 7 in the midst of all the other signals just boring N.C.?

Unfortunately that’s all the datasheet has to say about that. Let’s move on to the Application Note for the Evaluation Kit…
Source: https://cdn-shop.adafruit.com/datasheets/UG-2864HSWEG01+user+guide.pdf

Pin 7 here gets a new name, VBREF. That’s a little discouraging since it certainly isn’t FR. Well, what the hell is VBREF? At first, it seems to make sense it’s related to Voltage, because “V”, am I right?

That seems like conflicting instructions to me. It should be connected to ground but also should be unconnected if it isn’t being used? Well, how the hell do you even use it?

And about this point I crapped my pants because I thought to myself “VBREF = VERTICAL BLANK REFERENCE”. Mostly because the part about “It should be kept NC if it is not used”. We saw this instruction before on the FR pin, so that’s starting to make me feel good again! Surely this must be it! Ok, more research, let’s not get too excited.

This is on the very next page. Crap. They probably wouldn’t call out the FR pin separately if it was actually the same as VBREF. Although the “It should be kept NC if it is not used.” is familiar.

But dammit, I’m frustrated again. Why do they even discuss this pin in the evaluation kit if we don’t have access to the pin?

This is the evaluation kit, just for reference. In our workshop we have something a bit like this, but it’s in a box. I’ll have to dig it out again to do some more testing looks like! But, let’s keep digging.

Let’s take one step back to the data sheet for the OLED module and search for VBREF this time instead of FR.

Uh, Okay. I guess. What does this mean? I think maybe it means that pin 7 isn’t necessarily tied to VBREF for certain? That’s a big assumption to make really. It just means we don’t know anything new.

Back to the SSD1306 Data sheet.

Well, nuts. That’s not encouraging either. It would seem VBREF is not the same as FR. They are two independent pins on the actual display controller chip. I’m pretty sad at this point, but let’s keep going.

Ok, here we learn a few things, and also get a bit confused.

First, VBREF is actually written as Vbref (or rather with BREF as subscript). This almost certainly means Voltage Battery Reference. Or at least something related to Voltage. Additionally in the key above we see that it is indicated to be a power pin.

Second, we also see the fact that VBREF and FR are most certainly different pins and different signals. Although they still share the same instruction that they should be left NC (Not Connected).

Third, however shows us that the data sheet is a bit misleading with C1P/C1N and C2P/C2N. Because later on it gives us the real configuration:

However, these are in fact left NC if you configure an external 9v power supply. So the pin designation seems to assume the external power supply which omits the internal charge pump.

I don’t even know what to think any more but lets find every last reference to VBREF before we give up.

And that’s about it! Both are left unconnected. And it’s important to note this application schematic is still within the SSD1306 datasheet, so it does not apply to the flexible pin connector that is installed on the OLED module.

There is only one last bit of information I can see to extract here. And it comes from comparing the above diagram with pin out of the flexible pin connector. In specific the grouping from

So actually we see here, that the diagram on the left is actually inverted from the actual physical pinout on the right.

And it looks like both the VBREF and the FR pin sit in between VBAT and VSS.

The diagram on the right clearly labels the pin as VBREF. But we are actually given no specific details about what this pin/signal really does other than knowing it’s a power pin. Since it is supposed to be connected to ground my guess would be that it lets the controller get a better reference voltage for the battery that is powering it?

We have so much more information about the FR pin and how to use it. Why would all of that info go to waste?

This is where we reach the end of what we can learn from these data sheets. There are actually other manufacturers that copy this design, and I’m going to hunt down the other data sheets they have published and see if there is anything to learn.

But really, the most simple thing to do here would be setup an evaluation board and put a scope on pin 7.

What does this all mean? What might we find?

If there is a pulse signal generated on this pin, we may well have found an undocumented FR pin. Which means, OMG GRAYSCALE. But my feeling is that this may actually be the VBREF pin, in which case I have no idea what the scope would detect. But it’s worth a shot.

I won’t be able to perform this test for at least another month. If someone else can test this, they will be true a true Arduboy Hero.

The only last thing I can think to do is visit the factory in Taiwan and get answers directly from the engineers. I’ve tried to set up a meeting in the past and just been deflected. But they publish their address on their data sheet. So what happens if I just show up? Maybe later.


@delegatevoid can we be of any help here ?

1 Like

the SSD1322 4bit driver also has an FD pin with a more deterministic description:

“This pin is No Connection pins. Nothing should be connected to this pin. This pin
should be left open individually.”

What happened to UG-2864ASYIG01 (the grayscale version of UG-2864HSWEG01, it seems). Can’t find a decent datasheet for it

Screen is too big but damn that gray scale looks nice!

FD or frame sync is not needed for grayscale if the controller has a bit depth greater than 1. You would only need a sync pin for eliminating tearing (which isn’t visible due to the high refresh rate) or special effects.

Perhaps a commercial motive? The 4bit drivers wouldn’t sell if the FR was connected?

The SSD1309 doesn’t have the FR, but has a “display time generator” instead. Perhaps the FR was an early attempt at pulse sync after all?

So, I was going to use my oscilloscope to look at the signal brought out to pin 7 of the 0.96" version of the Arduboy display, that I’ve used for my home made Arduboy clone.

Upon close examination, I discovered that pin 7 is really truly N/C. The flex cable doesn’t have any signal brought out from the display chip to the connector.

It may be different with the flex cable used for the real Arduboy’s 1.3" display, but I don’t want to risk damaging mine by attempting to pry up the display to get at the connector.

Nuts and double nuts.

Well I guess that solves the mystery. Yeah don’t try to upend the oled display. I’ve never been able to do it without cracking the glass.

Thanks @MLXXXp

1 Like

Being able to supply the clock signal to the display would also work (if this is what you are referring to). Pretty sure the SSD1306 allows that also, but it’s yet another pin that isn’t brought out.

Yeah there is a CL pin for clock signal and it’s controlled by CLS pin for clock select, and both are not exposed.

Seems like the damn factory should put FR pin on pin 7 for us!!

I’m guessing artificial PWMed greyscale isn’t a big request from people or you think they totally would.

@ bateske Kevin
I realize this is an old topic, but found it while searching for the same subject matter.
I have an idea that may just work. I’m continually sending data to my SSD1306 display (Alternate images to test grey scale with resultant display tearing) and monitoring on my oscilloscope, the Ack signal coming back from the SSD1306 after each display byte write.
Ack is received every 24.37us which equates to 41.020 Khz. Now Ack’s timing is determined by the SSD1306 and it’s timing is based on its own clock ie. FOSC. From this we can deduce a great deal of information with regard to where in time FR should fall relative to this scope Ack signal. Am I flogging a dead horse here or not ?


Interesting I didn’t know there was an Ack signal. Some users managed to match the natural screen refresh rate to a variable set in software, but the problem is that it cannot be synchronized so as close as you get, you end up with a very slowly traveling vertical blank line.

This horse has unfortunately been flogged so much that its pretty much glue already. Pulling out Vsync seems so trivial, but the oled manufacturer has no interest to talk to such small potatoes as Arduboy.

1 Like

As @bateske said, in SPI mode that the Arduboy uses, there isn’t an Ack signal (or any other signal) coming from the display (at least on the 30 pin flex connector). Where are you putting your scope probe?

You’re completely misinformed unfortunately. Refer SSD1306 datasheet Write mode for I2C.
4) An acknowledgement signal will be generated after receiving one byte of data, including the slave
address and the R/W# bit. … etc. The acknowledge bit is defined as the SDA line is pulled down during the HIGH period of the acknowledgement related clock pulse.

So, SSD1306 pulls the SDA line low (Ack signal) after recieving each data byte. All I’m doing is outputting this signal to an I/O pin on my microcontroller and monitoring this signal on my scope.

The Arduboy uses SPI (4 wire) mode, not I2C mode.

Anyway, it was just an idea, but I don’t think it will work because after investigation it appears that frame refresh rate is completely independent of your ability to update the diplay buffer. So the fools who think they are getting 150fps display update, just because they can write to SSD1306 at this rate, are certainly misguided also.

The maths have been done on this before. You are correct that writes to the display controller memory do not correspond in time to pixels flipping on the display. The controller simply uses this buffer to draw from on it’s own update which can be configured in software. When you match the controller output frequency to the buffer frequency, then you get very close but because it cannot be fully synchronized in hardware there will always be some kind of artifact.

I can’t remember for certain, but I believe the max hardware refresh is somewhere around 60hz?

I’ve managed to get access to the FR signal itself by hacking into the hardware. I’ve uploaded a pic of the electrical connection and a pic of the oscilloscope displayed signal.
The FR pin is number 51 on the SSD1306 chip as per the datasheet and it is brought out a fractional distance from the glass display, just enough to get a temporary fine wire connected. There are a number of other pins that are also protruding from the glass fractionally. Refer to the photo. You have to cut away the soft rubbery goop first, (after removing the black tape covering) but it’s really soft and can easily be done with a scalpel. The fractionally extending tracks are all tinned as you can see in the photo, so with a hot air gun it may be possible to get a wire soldered. I used a pretty powerfull magnifying loop so I could see what I was doing. I’ve been hacking hardware for over 50 years now and my eyes not so good these days.


PS: I dropped the damn oled display and broke the glass while I was doing this, so alternate pixels are now missing. R&D always costs something.
Forgot to add: The oscilloscope dispay is set to 2ms per division, so we have an 8.4ms pulse interval which equates to around 119 fps display update rate with my current settings. ie. 1/.0084secs = 119.047 fps
Not sure where you got Pin 7 from Kevin. Fr pin #51 exits further along between the small PCB loop track which connects pins 50 and 52. See the pic. With the black tape removed you can actually see the SSD1306 chip and its 281 pads.

It is so frustrating now knowing that the pin is already broken out to the FPC but not actually extended anywhere. If only I could ever speak with the OLED manufacturer and get them to do this. :frowning: