pinguino
Posts: 2
Joined: Sat Apr 30, 2016 9:49 am

Python SPI with RA8875 TFT display

Sat Apr 30, 2016 10:30 am

Hi,
I have bought this display http://www.buydisplay.com/default/7-inc ... spi-serial and I want to use it with raspberry. I downloaded the Arduino library from the same web site and I'm triyng to rewrite it in Python, but I'm facing a problem, with the SPI interface. The problem is in the begin function:

Code: Select all

boolean Adafruit_RA8875::begin(enum RA8875sizes s) {
  _size = s;

  if (_size == RA8875_480x272) {
    _width = 480;
    _height = 272;
  } 
  if (_size == RA8875_800x480) {
    _width = 800;
    _height = 480;
  }

  pinMode(_cs, OUTPUT);
  digitalWrite(_cs, HIGH);
  pinMode(_rst, OUTPUT); 
  digitalWrite(_rst, LOW);

  digitalWrite(_rst, LOW);
  delay(100);
  digitalWrite(_rst, HIGH);
  delay(100);
  
  SPI.begin();
#ifdef __AVR__
  SPI.setClockDivider(SPI_CLOCK_DIV128);
  SPI.setDataMode(SPI_MODE0);
#endif
  
  if (readReg(0) != 0x75) {
    return false;
  }
.................
}

uint8_t  Adafruit_RA8875::readReg(uint8_t reg) 
{
  writeCommand(reg);
  return readData();
}

uint8_t  Adafruit_RA8875::readData(void) 
{
  digitalWrite(_cs, LOW);
  SPI.transfer(RA8875_DATAREAD);
  uint8_t x = SPI.transfer(0x0);
  digitalWrite(_cs, HIGH);
  return x;
}

void  Adafruit_RA8875::writeCommand(uint8_t d) 
{
  digitalWrite(_cs, LOW);
  SPI.transfer(RA8875_CMDWRITE);
  SPI.transfer(d);
  digitalWrite(_cs, HIGH);
}
And below the corresponding python code that I wrote:

Code: Select all

#!/usr/bin/python
 
import spidev
import time
import RPi.GPIO as GPIO

GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)

RA8875_DATAREAD    =     0x40
RA8875_CMDWRITE    =     0x80
RA8875_DATAWRITE   =     0x00

# Open SPI bus
spi = spidev.SpiDev()
spi.open(0,1)

spi.max_speed_hz = 12000000

rst = 21
cs = 7
GPIO.setup(cs, GPIO.OUT)
GPIO.output(cs, False)
GPIO.setup(rst, GPIO.OUT)
GPIO.output(rst, False)
time.sleep(0.1)
GPIO.output(rst, True)
time.sleep(0.1)

if readReg(0) != 0x75:
  return False


def readReg(reg):
  writeCommand(reg)
  return readData()

def writeCommand(com):
  spi.xfer2([RA8875_CMDWRITE])
  spi.xfer2([com])

def readData():
  spi.xfer2([RA8875_DATAREAD])
  x = spi.xfer([0x0])
  print(x)

The problem is that the readReg(0) always returns 255 (decimal value) and than the program exit.

Anybody can help me to find where I'm wrong?

Thanks

Return to “Interfacing (DSI, CSI, I2C, etc.)”