So I spent a large part of today not making much progress except to rule out several dead ends. I traced and probed the purchased module to see if the circuit differed from mine. Only thing I could see was two pullups @ 4.7k ohm on MOSI an SCK, which are there I suspect to facilitate the I2C interface that this module can be switched between. That and a 3.3v reg. I tried adding a couple of pullups of exactly the same value to the GAMOO but no change (the SPI signal was already looking identical between the successful M0 signal and the unsuccessful GAMOO signal).
I then desoldered the first bare OLED from the GAMOO and replaced it with a new one, in case something I had done had damaged the first one. With no joy there either, I desoldered the OLED on the module and (leaving it stuck in place on the rear of the PCB) soldered my third and final, new, bare OLED to the module to see if I had a duff batch. Sadly, in my case, the third OLED worked when soldered to the module, so either it’s a 1/3 working example and 2/3 are broken, or…
I think critically, I have never been able to get the charge pump firing on my board. So I went back to the datasheet and, based on the
bootOled() function in
Arduboy2.cpp, amended the initiation sequence and inserted it into a standalone Arduino sketch to loop through display initialisation every second. This was successful with the M0 but not GAMOO. I tested for false positives with the M0 by uploading
blink.ino and checking that the charge pump capacitors were “idle” - they were. I then uploaded the initialisation sketch and the charge pump showed voltages > 6V, as expected. I even saw the last page in the display’s memory from the
u8g2 demo code flash up every time initialisation finished and the display was turned on.
As I said before, the oscilloscope with SPI decode on shows the two boards (Arduino M0 and GAMOO) both spitting out clear protocols. My next steps are a) to desolder individual capacitors on the module to see if I am using wildly different values and b) desolder all the display-related passives on GAMOO, as well as the bare OLED and try to drive the module from GAMOO’s SPI header. I have tried this already but I have always had the additional passives and OLED populated so I never expected it to work. Feels like I’m clutching at straws though. I will also try to power the OLED on the module from a different power source when I connect GAMOO, just in case there’s something funny about the power supply that’s affecting it. But then again, it’s not even trying to start it’s charge pump, so I don’t think it’s a high likelihood of it being a supply issue.
Thoughts very welcome on other things to try. Hope you’re enjoying updates, if not progress.
Quiz: See if you can count how many OLED displays are in this picture.