spi compatible devices design and implementation details on the way to a valid spi-lcd interface...

26
SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

Upload: augustus-chambers

Post on 23-Dec-2015

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

SPI Compatible Devices

Design and implementation details on the way to a valid

SPI-LCD interface driver

Page 2: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

2 / 26

To be tackled today

What is SPI? What is the SPI “master slave”

relationship? How do you send commands from the

Blackfin to a LCD device? What commands are necessary to

control the LCD device -- HD44780?

Page 3: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

3 / 26

What is SPI Serial Peripheral Interface – an industry standard SPI is a serial communication bus developed by

Motorola. It is a full-duplex protocol that functions on a master-slave paradigm that is ideally suited to data stream application. • DUPLEX MEANS – BOTH DIRECTIONS AT ONCE• Master can receive from the slave at the same time as the master

sends to the slave Is essentially a 4 wire high speed system, with speeds up to

many MHz• Blackfin (p10-8) has a register SPI_BAUD where they talk about

transfer rates of 25 MHz.

Information is précised from• SPI information -- http://www.totalphase.com/docs/articles/article03/• LCD information -- http://home.iae.nl/users/pouweha/lcd/lcd.shtml

Page 4: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

4 / 26

Advantages and drawbacks SPI is a very simple communication protocol.

• It does not have a specific high-level protocol which means that there is almost no overhead.

Data can be shifted at very high rates in full duplex mode• This makes it very simple and efficient in a

single master single slave scenario. The exchange itself has no pre-defined protocol. This makes it

ideal for data-streaming applications. Data can be transferred at high speed, often into the range of

the tens of megaHertz. The flipside is that there is no acknowledgment, no flow

control, and the master may not even be aware of the slave's presence / or absence. • You could do “some” handshaking via software

Page 5: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

5 / 26

Systems that use SPI

The question is of course, which peripheral types exist and which can be connected to the host processor. Peripheral types can be subdivided into the following categories:• Converters (ADC and DAC)

• Memories (EEPROM and FLASH)

• Real Time Clocks (RTC)

• Sensors (temperature, pressure)

• Others (signalmixer, potentiometer, LCD controller, UART, CAN controller, USB controller, amplifier)

Page 6: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

6 / 26

Concept of Master and Slave

Master• The component

that initiates the transfer

• The component that controls the transfer

Slave• The component

that responds to the transfer

Page 7: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

7 / 26

Master / Slave conceptSlave Select (Chip Select)

Master sends out active low chip select signal SS1, then slave 1 responds

Master sends out active low chip select signal SS2, then slave 2 responds

FOR SAFETY – SELECT SIGNAL IS “ACTIVE LOW” NOT “ACTIVE HIGH”

Page 8: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

8 / 26

Master / Slave conceptMaster to Slave data movement Master sends out

information to slave on MOSI wire

Slave receives information from the master on MOSI wire

Information (bits) is clocked by SCLK signal. • 1-bit, 1 clock tick

MOSI --MASTER OUT – SLAVE IN

Page 9: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

9 / 26

Master / Slave conceptSlave to Master data movement Master receives

information from slave on MISO wire

Slave sends information to the master on MISO wire

Information (bits) is clocked by SCLK signal. • 1-bit, 1 clock tick

MISO --MASTER IN – SLAVE OUT

Page 10: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

10 / 26

Lab. 4 concept – Using an SPI interface to an LCD screen

SPI_TDBR Blackfin Processor SPI_RXBR

LCD SCREEN CJ7 / CJ8 SWITCHES (LOGIC LAB)

SLAVE INPUT INTERFACE SLAVE OUTPUT INTERFACE

MOSI MISO

SLAVE SELECTPF5 used (PF0 to PF7)

DATACONTROL

SPICLOCK

LOADSlave toLCD

Page 11: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

11 / 26

Lab. 4 interfaceFrom Blackfin

SPI lines (MOSI, CLK, PF5)

GET PIN ORDERCORRECT

OR NOTHING WORKS

Page 12: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

12 / 26

Lab. 4 -- Essentials (concept) of the Blackfin – LCD interface software

char HipHipArray[ ] = “Merry Christmas to all”;

SetUp_SPI_Interface(Baud_Rate); // Configure the SPI interface

// Activate SPI interrupts – register_handler for SPI_ISR, set SIC_IMASK

LCD_Display (WHICH_LCD, “CONTROL”, “CLEAR_SCREEN”);

UseFixedTimeASM(Enough_Time_For _LCD_To_Work_ClearScreen);

for (int count = 0; count < strlen(HipHipArray); count++) {

LCD_Display (WHICH_LCD, “DATA”, HipHipArray[count]); // Transmit the information we want from the array // one character at a time

UseFixedTimeASM(Enough_Time_For _LCD_To_Work_DataSent);

}

Page 13: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

13 / 26

LCD_Display (int, char*, char *);Concept – not actual implementation

LCD_Display (int lcd, char * type, char *operation) {

if (strcmp(type, “COMMAND”) == 0) { if (strcmp(operation, “CLEAR_SCREEN”) == 0) ClearScreen( );

if (strcmp(operation, “……..”) == 0) Do……..( );

}

if (strcmp(type, “DATA”) == 0) { if (strcmp(operation, “DISPLAY_TEMPERATURE”) == 0) DisplayTemperatureOnLCD( ); // Recursive call to LCD_Display

else WriteLetter(operation[0]); // First character }}

Page 14: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

14 / 26

Example CommandsCould we send commands like this?

char *LCDcommands[ ] = {                   "COMMAND", "INIT_LCD",                   "COMMAND", "CLEAR_SCREEN",                    "COMMAND", "MOVE_TO_LINE_1",                   "COMMAND", "CLEAR_LINE_1",                   "DATA", "4",     // This number is a 2 character string '4' and '\0'                   "DATA", "1",     // This number is a 2 character string '1' and '\0'                   "DATA", "5",     // This number is a 2 character string '5' and '\0'                    "COMMAND", "MOVE_TO_LINE_2",                   "COMMAND", "CLEAR_LINE_2",                  "DATA", "TEMPERATURE_DISPLAY"                   NULL, NULL};

Page 15: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

15 / 26

What we need to know!

How do we make the LCD screen respond to control requests?• Clear screen, move cursor, next line etc

How do we make the LCD screen respond to data requests?• Display letter a, b, C, 1, 2, (, ?, h etc

How do we get Blackfin SPI interface to send the LCD screen those commands?

How to we initialize the Blackfin SPI interface so all the above things work?

Page 16: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

16 / 26

What about the voltages that must go to the LCD?

Discussed those in the last lecture

Page 17: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

17 / 26

LCD Instruction set

Page 18: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

18 / 26

0 through 9, ( ) etc – all the same?

Page 19: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

19 / 26

Is this a possible solution?Writing “Hello” to the LCD

ClearScreen( );UseFixedTimeASM( );

CursorIncrease( ); UseFixedTimeASM( );DisplayOn( );

Use FixedTimeASM( );WriteLetter(‘H’); UseFixedTimeASM( );CursorMove( ); UseFixedTimeASM( );WriteLetter(‘e’); etc.

General concept is there,The exact details will have to

wait a while

QUESTION!What happens if you send

a CursorMove( ) command?

If you send CursorMove( ) and wait too long --

do you get two cursor moves?If so – how do you stop that

from happening?

Page 20: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

20 / 26

Where does Blackfin fit in? ClearScreen( );

This means that the following bits must be sent RS = 0, R/W = 0, DB7=DB6=DB5….DB1 = 0, DB0 = 1; from Blackfin SPI interface to LCD parallel interface

Possible solution -- Let us send out a ushort value 0x0001 from the Blackfin and arrange the wires from the interface to go to the LCD connections correctly• Top 8 bits of unsigned short value – LCD control• Bottom 8 bits of unsigned short value – LCD data

Page 10-17 -- SPI Transmit Data Buffer Register SPI_TDBR – 16-bit read/write register. • Data loaded into this data register is automatically transmitted over the

SPI interface if the SPI interface is enabled for transmission.

Page 21: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

21 / 26

Blackfin transmits 16 bits with THIS format over the MOSI line

DB7, DB6, ………DB1, DB0

RS

1 – LCD data

0 – LCD instruction

R/W

1 – Read from LCD

0 – Write to LCD

E – Enable / Strobe

1 0 – When this line goes from high to the low, then the command is send to (latched into) LCD

To make LCD respond to command 0x4F0Then Blackfin must transmit 0x5F0 ( E High )0x4F0 ( E low )0x5F0 ( E high )

Page 22: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

22 / 26

Is this a possible solution?Insert into ClearScreenASM( ) stub

Initialize the SPI interface in main( )

P0.L = lo(SPI_TDBR) – SPI transmit data buffer register

P0.H = hi(SPI_TDBR)R0 = 0x0001; // LCD ClearScreen instruction[P0] = R0; Not correct – TDBR is 16-bit

R0 = some_value;Call UseFixedTimeASM; // Wait for LCD to be done

Page 23: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

23 / 26

Is this a POSSIBLE solution? WriteLetterASM(char whichletter)

P0.L = lo(SPI_TDBR) – SPI transmit data buffer register

P0.H = hi(SPI_TDBR)R1 = 0x400; // Write data instruction

// Need to make line RS = 1 for dataR0 = R0 | R1; // R0 contains 8-bit letterW[P0] = R0; // Send data and control

// to LCD device

R0 = some_longer_value;Call UseFixedTimeASM; // Wait for

// LCD

Page 24: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

24 / 26

Questions still unanswered How do we configure the SPI interface inside the Blackfin? How do we activate the chip-select line – PF5? Does activating the PF5 line as SPI output control mean we have to

change all the SetupPF8to11ASM( ) and other routines?

When do we activate the chip-select line, and how long for? How do we know when LCD is ready for next character – do we poll a bit

and wait till ready, or can it be done in the background? How do we stop multiple commands from being accidentally

sent to LCD? -- cursor move etc • Could be a problem if we “wait too long”. Perhaps multiple

commands get sent to the LCD screen We know the answer to the last question from the last lecture

• Set the command with the EN bit high• Send the command with the EN bit low

// Data goes into LCD on transition HI / LOW of EN-Bit• Send the command with the EN-bit high

Page 25: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

25 / 26

Code MIGHT look like this then WriteLetterASM(char whichletter)Save registers R7 and P5 properly to stack (how?)P5.L = lo(SPI_TDBR) P5.H = hi(SPI_TDBR)

R7 = R0; // which letter came in R0R1 = 0x500; // Write data instruction

// Need to make line RS = 1 for data and E = 1R7 = R7 | R1; W[P5] = R7; // Send data and control to LCD device

R0 = some_longer_value;Call UseFixedTimeASM; // Wait for LCD to complete command

R1 = ~0x100 // Remove the E signalR7 = R7 & R1W[P5] = R7

R0 = some_longer_value;Call UseFixedTimeASM; // Wait for LCD to complete command

Now add back the E-signal and store into W[P5] again

Page 26: SPI Compatible Devices Design and implementation details on the way to a valid SPI-LCD interface driver

04/19/23 SPI and LCD , Copyright M. Smith, ECE, University of Calgary, Canada

26 / 26

Tackled today

What is SPI? What is the SPI “master slave”

relationship? How do you send commands from the

Blackfin to a LCD device? What commands are necessary to

control the LCD device -- HD44780?