ms_uc / fue1 / v08 1 spi programming microcontroller serial peripheral interface (spi), secured data...

Post on 14-Dec-2015

242 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

MS_uC / fue1 / V08 1

SPI

Programming Microcontroller

Serial Peripheral Interface (SPI), Secured Data (SD) Memory Card

and File System (FS)

MS_uC / fue1 / V08 2

SPI Serial Peripheral Interface (SPI)

SPI is serial high-speed bus system Display, SD cards, AD- & DA converters

SPI is always used in a master-slave mode Master is responsible for the clock generation

SPI works in a duplex mode MOSI & MISO

MS_uC / fue1 / V08 3

SPI SPI Hardware flow control

Participant 1

7 0

Clock generator Data input parallel

Data output parallel

Participant n

7 0

Data input parallel

Date output parallel

MS_uC / fue1 / V08 4

SPI SPI features (1/2)Ref. RM0008 Reference manual, page 673

Full-duplex synchronous transfers on 3 lines Simple synchronous transfers on 2 lines

With or without a bidirectional data line 8- or 16-bit transfer format selection Master & Slave operation Multi master mode capability 8-bit master mode baud rate pre scaler (fPCLK/2 max.)

Slave mode frequency (fPCLK/2 max.) Faster communication for both master and slave NSS management by hardware or software Programmable clock polarity

MS_uC / fue1 / V08SPI features (2/2)Ref. RM0008 Reference manual, page 673

Programmable data order with MSB-first or LSB-first shifting Dedicated transmission and reception flags with interrupt

capability SPI bus busy status flag Hardware CRC feature for reliable communication

CRC value can be transmitted as last byte in Tx mode Automatic CRC error checking for last received byte

Master mode fault, overrun and CRC error flags with interrupt capability

1-byte transmission and reception buffer with DMA capability: Tx and Rx requests

5

SPI

MS_uC / fue1 / V08 6

SPI SSP Block diagramRef. RM0008 Reference manual, page 675

MS_uC / fue1 / V08 7

SPI SPI pin descriptionRef. RM0008 Reference manual, page 676

Single master / single slave application Communication is always initiated by the master

MS_uC / fue1 / V08Slave select (NSS) pin managementRef. RM0008 Reference manual, page 676

NSS pin management can be realized either by hardware or by software SSM (Slave Select Management) bit of the SPI_CR1 register

Software NSS pin management (SSM = 1) SSI (Internal Slave Select) bit in the SPI_CR1 register

Hardware NSS pin management (SSM = 0) NSS output enable (SSOE = 1) (SS Output Enable)

Only in master mode NSS is drive low when the master starts the communication

NSS output disable (SSOE = 0) Master mode: NSS is used for multi master capability Slave mode: NSS selects the slave

8

SPI

MS_uC / fue1 / V08

Clock phase & polarityRef. RM0008 Reference manual, page 6779

SPI

MS_uC / fue1 / V08 10

SPI SPI register map (Offset)Ref. RM0008 Reference manual, page 722

MS_uC / fue1 / V08

SPI register base addresses (1/2)Ref. RM0008 Reference manual, page 5011

SPI

MS_uC / fue1 / V08 12

SPI SPI register base addresses (2/2)Ref. RM0008 Reference manual, page 50

MS_uC / fue1 / V08 13

SPI SPI Configuration in slave modeRef. RM0008 Reference manual, page 678

Select the clock polarity and phase CPOL and CPHA pins SPI_CR1 Register

Select the data frame format DFF (Data Frame Format) bit of SPI_CR1 Register

Define the frame format LSBFIRST bit of SPI_CR1 Register

Set the SPI in slave mode Clear the MSTR (Master Selection) and set SPE (SPI Enable) bits

in the SPI_CR1 Register

NSS Pin Hardware mode

Connect the NSS pin to low level signal Software mode

Set SSM bit and clear SSI bit in the SPI_CR1 Register

MS_uC / fue1 / V08 14

SPI SPI Configuration in master modeRef. RM0008 Reference manual, page 680

Define the transmission baud rate BR[2:0] bits of SPI_CR1 Register

Select the clock polarity and phase CPOL and CPHA pins SPI_CR1 Register

Select the data frame format DFF bit of SPI_CR1 Register

Define the frame format LSBFIRST bit of SPI_CR1 Register

Set the SPI in master mode Set the MSTR and SPE bits in the SPI_CR1 Register

NSS Pin Hardware mode: connect the NSS pin to high level signal Software mode: set the SSM and SSI bits in the SPI_CR1

Register

MS_uC / fue1 / V08

SPI Transmission & reception sequencesRef. RM0008 Reference manual, page 680

Transmit sequence Write a byte in to the transmission buffer

SPI_DR register TXE flag of the CPI_SR is set

An interrupt is generated if the TXEIE bit of the SPI_CR2 is set

Receive sequence Received byte is transferred in to the reception buffer

SPI_DR register RXNE flag of the CPI_SR is set

An interrupt is generated if the TXEIE bit of the SPI_CR2 is set

15

SPI

MS_uC / fue1 / V08 16

SPI Code example:SPI configuration in master mode

Keil library function SPI_InitStructure.SPI_Direction = \

SPI_Direction_2Lines_FullDuplex;

SPI_InitStructure.SPI_Mode = SPI_Mode_Master;

SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;

SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; // CPOL = 1

SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; // CPHA = 1

SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;

SPI_InitStructure.SPI_BaudRatePrescaler = \

SPI_BaudRatePrescaler_8; // 4.5MHz

SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;

SPI_InitStructure.SPI_CRCPolynomial = 7;

SPI_Init(SPI1, &SPI_InitStructure);

MS_uC / fue1 / V08

Code example: SPI transmission & reception sequences

17

SPI

/*--------------------------------------------------------------*/

/* Transmit/Receive a byte to MMC via SPI (Platform dependent) */

/*--------------------------------------------------------------*/

static BYTE stm32_spi_rw(BYTE out)

{

/* Send byte through the SPI1 peripheral */

SPI_I2S_SendData(SPI_SD, out);

/* Wait to receive a byte */

while(SPI_I2S_GetFlagStatus(SPI_SD, SPI_I2S_FLAG_RXNE)==RESET)

{}

/* Return the byte read from the SPI bus */

return SPI_I2S_ReceiveData(SPI_SD);

}

MS_uC / fue1 / V08 18

SPI SPI alternate function remappingRef. RM0008 Reference manual, page 176

SPI remapping table Ref. AF remap and debug I/O configuration register

(AFIO_MAPR)

SD connection of the STM32F107xx board SPI_REMAP = 0

SCK PA5 MISO PA6 MOSI PA7

MS_uC / fue1 / V08 19

SPI File system (FS)

FS is a method for storing & organizing computer files

FS use data storage devices Hard disk, CD-ROM, SD cards … Array of fixed size blocks, called sectors (512, 1k, 2k or 4k

bytes) File system organize these sectors into files and directories

MS_uC / fue1 / V08 20

SPI Type of FS

Disk file system Storage of the files on disk drive

FAT, NTFS and HFS

Flash file system Storage of the files on flash memory devices

MMC or SD cards

Network file system Client for remote file access

NFS (Network File System) AFS (Andrew File System) SMB (Server Message Block)

MS_uC / fue1 / V08 21

SPI Secure Digital (SD) Memory Card

SD is a non volatile memory card Developed by Matsushita, ScanDisk and Toshiba

Use range of SD Cards Digital cameras Handheld computers PDAs mobile phones GPS receivers video game consoles

Capacities range from 4 MB to 2 GB

MS_uC / fue1 / V08 22

SPI Pin assignments (SSP)

Pin no. Symbol Direction

Description

In Out

1 CS Chip select

2 DI Data in

3 VSS GND

4 VDD VCC

5 SCLK Clock

6 VSS2 GND

7 DO Data out

MS_uC / fue1 / V08 23

SPI SD card partition (FAT)

Boot sector BIOS Parameter Block with some basic information about the FS Boot loader of the operating system

FAT Region This region contains two copies of the File Allocation Table

Root Directory Region Information about the files and directories located in the root directory

Data Region This region contains the files and directories

Files are allocated entirely in a cluster If a 1 KB file resides in a 32 KB cluster, 31 KB are wasted

Bootsector

File Allocation Table 2

File Allocation Table 2

RootDirectory(FAT12/16 only)

Data Region (for files and directories)

MS_uC / fue1 / V08 24

SPI File Allocation Table (FAT)

A partition is divided up into identically sized clusters Cluster sizes vary between 2 KB and 32 KB.

Each file may occupy one or more of these clusters A File is represented by a chain of these clusters (singly linked

list)

FAT contains information about the clusters For each cluster one of following five things will be stored

The cluster number of the next cluster in a chain A special end of cluster chain (EOC) A special entry to mark a bad cluster A special entry to mark a reserved cluster A zero to note that the cluster is unused

MS_uC / fue1 / V08 4- 25

SPI File Allocation Table (example)

Number Value Meaning

Cluster 1 0000 Empty

Cluster 2 0003 Used

Cluster 3 0004 Used

Cluster 4 0006 Used

Cluster 5 0001 Reserved

Cluster 6 0007 Used

Cluster 7 FFFF EOF

MS_uC / fue1 / V08 26

SPI Directory table

A directory table is a special type of file that represents a directory Its files or directories are represented by a 32-byte entries

Name Extension Attributes (archive, hidden, read-only) Date & time of creation Address of the first cluster Size of the file/directory

MS_uC / fue1 / V08 4- 27

SPI Microsoft Application Interface (API) for FS

The file are represented with FILE objects

The read & write functions need a pointer to the FILE objects fopen() furnishes a pointer to the given FILE object

Example #include <stdio.h>

FILE *FilePointer;

FilePointer = fopen ("c:\\Text.txt" , "w");

if (FilePointer == NULL) {

printf ("Error, the file could not be opened !\n");

}

MS_uC / fue1 / V08 4- 28

SSPFILE *fopen (char Filename[], char Mode[])

First argument of the fopen function File name

Second argument of the fopen function Access mode

"r" Open the file for read"w" Create the file for write"a" Create or open the file for write at the end of it"r+" Open the file for update (read and write)"w+" Create the file for update "a+" Create or open the file for update at the end of it

MS_uC / fue1 / V08 4- 29

SPI int fclose (FILE *stream)

When the file will not be used The link to the file must be close with fclose()

Example fclose (FilePointer);

MS_uC / fue1 / V08 4- 30

SPI Function to read from or print into files

Key board/screen Function

File

printf("v = %d", i) Formatted output

fprintf(FilePointer, "v = %d", i)

scanf("%f", f) Formatted input

fscanf(FilePointer, "%f", f)

c = getchar() Read a character

c = fgetc(FilePointer)

putchar(c) Write a character

fputc(c, FilePointer)

gets(Buffer) Read a sentence

fgets(Buffer,Maxlength,FilePointer)

puts(Text) Write a sentence

fputs(Text, FilePointer)

MS_uC / fue1 / V08 Keil API for FS (1/2)

Function to open a connection with a file FRESULT f_open (FIL *stream,

char FileName[],

BYTE mode); Values for mode

• FA_READ• FA_OPEN_EXISTING• FA_WRITE• FA_CREATE_NEW• FA_CREATE_ALWAYS• FA_OPEN_ALWAYS

Function to close the connection with a file FRESULT f_close (FIL *stream);

4- 31

SPI

MS_uC / fue1 / V08 Keil API for FS (2/2)

Function to write in to a file FRESULT f_write (FIL *stream,

const void *buffer,

UINT byteToWrite,

UINT *writtenByte); int f_printf (FIL *stream, const char Text[], ...);

int f_puts (char Text[], FIL *stream); int f_putc (int character, FIL *stream);

Function to read from a file FRESULT f_read (FIL *stream,

void *buffer,

UINT byteToRead,

UINT *readByte); char* f_gets (char Text[], int, FIL* stream);

4- 32

SPI

top related