I am trying to use an SSD1306 display without using the reset pin.
I am using a display (SSD1306) with SPI interface (using 9 bit transmission, only 3 pins: Data, clock and CS). Everything works perfectly if Reset pin is toggled before initializing the display.
I was hoping some command(s) would reset the chip, but no command seems to reset the chip properly if reset pin is not used, I tried using all values in unused ranges, before and after the initialization sequence (tried also the one in the datasheet and 5 more found in other libraries), separated or not by display NOP commands, with and without big delays in between commands (100ms). Nothing works (just a black screen or random pixels).
Then I found these posts:
I've sent messages to the user asking for the details, but he did not answer after several weeks. Has someone used the 0xE4 command mentioned there to successfully reset the controller without the reset pin?
I mean, the exact sequence of initialization commands.
Notes:
I open this new topic because the original topic has been closed.
Just in case you are interested, I am trying this because I've run out of pins in the control board.
I can sacrifice a debug pin (uart) or the led pin, but it would be better no to do so.
I've used many hd44780 compatible displays and never needed any extra pins, the reset by commands was always enough to bring the display to a known reset state.
I am using the SPI version because I have other devices in the board using SPI bus, so using just one additional pin (CS) I am able to control the display.
Are you saying that this command only works with I2C displays or that they do not use the reset pin because I2C displays don't have this pin?
After searching through the internet I've found that:
The I2C versions that do not use the reset pin have an R-C network and one diode to force the reset pin at power on.
There are also SPI versions without reset pin and a built-in reset network (either R-C or a power supervisor IC), but they seem to be a lot less common, harder to find and have a different pinout:
I have already added a power monitor chip to reset the whole board.
I think that having multiple reset circuits in one design is not very good. In this case, the display may be reset by its own PCB power monitoring chip and the main controller wouldn't notice it (and the initialization sequence commands should be repeated to bring it to a usable state).
Anyway my questions still remain unanswered:
Can the 0xE4 command be used to reset the device in I2C / SPI mode?
If so, what is the required command data sequence to use it?
I am intrigued. Someone choosing 3-line SPI. This is painful with most Atmel MCUs.
You can either use the RESET pin to achieve the results in 8.5 Reset Circuit
Or you can issue the individual commands.
0xE4 is not documented anywhere in Solomon datasheets.
But there is nothing to stop you experimenting.
e.g. set some non-standard settings. issue 0xE4 and see if everything returns to 8.5 Reset Circuit description.
One advantage of SPI is that you can have multiple displays on the bus. I2C limits you to two. SPI is much faster (if your MCU has suitable hardware).
I am using a RPI PICO, its SPI HW has 9 bit support, so no problem with only 3 wires, not using D/C.
Using reset pin works.
As I already said, Issuing only individual commands do not bring the display to a working state.
As I already said: I've already tried to do that, execute 0xE4, followed by NOPs, delays, other commands, nothing seems to work, but the linked posts says it works, that is why I am asking for help to see if someone used this undocumented command successfully.
I suspect that 0xE4 will just be treated as a NOP.
But I have never worried about it. As I said, it should be easy enough to test 0xE4.
Most display controller chips will respond to a power-up reset. But I quite agree. A specific software Reset command would be a jolly good idea (tm).
If I am bored one day, I will tie RESET pin high. And experiment with 4-Wire SPI. I have no intention of changing to 3-Wire interface.
Why are you so concerned?
The Pico can support multiple I2C displays.
Multiple SPI displays require individual /CS pins.
The Pico has enough GPIO pins to dedicate one for RESET.
You could provide a reset pulse with external hardware.
Execution speed is never a problem with SSD1306 SPI.
Animations can be faster than human eye is comfortable with.
I2C is limited to 400kHz i.e. re-drawing a full 1024 byte buffer is 24ms or 43 fps.
Just in case it's still not clear:
I don't have to use this command for this project, I avoided the issue using a power monitor to reset the whole board at the same time (CPU+ display + other devices, I even managed to reduce the total BOM in the process).
I just wanted to know if someone had success using this command to reset the display, because it can be useful in some cases (you save 1 pin).