SerLCD 4x20 showing block characters on SPI C/S toggle

I’ve got a SerLCD 4x20 module that’s working over SPI driven by a Particle Argon.

Even without driving it from the uC however, I’m noticing that if I manually ground the C/S pin I will get a single block character on the display. And when I drive it normally from my code, every time C/S is pulled down, the display shows these weird block characters and here it’s before each of my screen writes which you can see on the display.

Scope trace of C/S…

Is there something I’m missing here? I’m not sure why pulling C/S down is triggering the display of these block characters. Any suggestions?

My first guess is something in the wiring; it’s hard to see in the video but it does look like 2 of the solder blobs on the board might be shorting on one another

After cleaning that up a bit re-test and see if anything changes…then double-check the wire routing from scratch

If that doesn’t help, I have many general suggestions:

Timing Issues: The SerLCD module may be sensitive to the timing of the SPI signals. When you manually ground the C/S pin, it might be triggering the LCD to read data that’s not actually being sent.
Initialization Problems: The LCD might not be properly initialized for SPI mode, causing it to misinterpret incoming data.
Voltage Mismatch: Ensure that both the Argon and the SerLCD are operating at the same voltage level (3.3V)
Adjust SPI Settings: Try lowering the SPI clock speed. Some LCD modules work better with slower speeds.
Use Pull-up Resistor: Add a weak pull-up resistor (e.g., 10k ohm) to the C/S line to prevent floating when not actively driven.
Proper C/S Handling: Ensure you’re toggling the C/S pin correctly before and after each transmission.
Delay After Writes: Add a small delay (e.g., 1-5ms) after each write operation to give the LCD time to process the data.
Clock and Data Alignment: Make sure that the SPI clock (SCK) and data (MOSI) lines are properly aligned and stable. If there’s noise or incorrect timing on these lines, the LCD may misinterpret the data.
Check Wiring: Double-check all wiring to ensure that there are no loose connections, especially on the C/S, MOSI, SCK, and GND pins.
Stable Power Supply: Ensure that your SerLCD module is receiving a stable power supply. Voltage fluctuations or noise in the power lines can sometimes cause unpredictable behavior on the display.
Grounding: Make sure all grounds are connected properly and that there is a common ground between your Particle Argon and the SerLCD module.

If these steps don’t resolve the issue, you might want to try communicating with the LCD using I2C or UART if those options are available, as they can sometimes be more reliable for certain modules.

Other than that I’m kind of out of ideas lol

These are VERY useful notes so thank you for sharing them. The solution appears to be tucked in the troubleshooting section:

Random Character

If the display is powered up without the RX line connected to anything, the display may fill with strange characters. This is because the display is receiving random noise on the disconnected line. If you connect the RX line to a true TX port, this will not happen.

Unfortunately, there are THREE rx positions on the 4x20 and it doesn’t say which one. Further, one of these RX’s (not sure which) is used for hw reset on power-on so I wasn’t sure which one they are saying to tie to TX but that’s nonsense when I’m using SPI.

After trial and error, I found that tying the UART RX (for clarity, RX [2] in my annotated photo) to gnd seems to resolve the issue when driving CS hi/low.

Here, only 3 wires - RAW, GND and CS - I’m manually grounding CS with the UART RX pin floating…

Here is the full SPI hookup - RAW (3.3v), GND, SDO, SDI, CS and with UART RX tied to GND.

Note this floating RX/garbage character doesn’t seem to occur when using i2c, but I want to use SPI for this application. I’m still getting a few ghost characters occasionally, but I’m attributing that to the fact that spi doesn’t have any crc or checksums and my breadboard wiring is quick and dirty prototyping.