Return to Unit Reference
Description
SPI (Serial Peripheral Interface) is a synchronous serial bus for communication with peripheral components.
The SPI protocol is not defined by any actual standard but some psuedo standards exist with all of the available devices. SPI is a master-slave protocol where the master asserts the chip selectline (CS) to select the slave device before sending data one byte at a time. For every byte written to the bus by the master the selected slave returns a byte as well so for every write there is an equivalent read. SPI can also operate in either 4 wire (standard) or 3 wire(bidirectional) modes.
Due to the lack of formal standards and the range of devices that exist various options are provided to allow setting clock phase and polarity as well chip select polarity.
For the purpose of this interface a device is the SPI controller attached to the local system and may be either a master or a slave. Since the protocol does not include any form of enumeration or identification the interface does not attempt to represent the devices connected to the bus, any driver written to communicate with a connected SPI device should know (or allow configuration of) the chip select for the for the device and the specific message format required for that device.
Constants
To be documented
Type definitions
To be documented
Public variables
To be documented
Function declarations
Initialization functions
[Expand]
procedure SPIInit;
Description: Initialize the SPI unit and SPI device table
Note
|
Called only during system startup
|
SPI functions
[Expand]
function SPIDeviceStart(SPI:PSPIDevice; Mode,ClockRate,ClockPhase,ClockPolarity:LongWord):LongWord;
Description: Start the specified SPI device ready for writing and reading
SPI
|
The SPI device to start
|
Mode
|
The device mode to set (eg SPI_MODE_4WIRE)
|
ClockRate
|
The clock rate to set for the device
|
ClockPhase
|
The clock phase to set (eg SPI_CLOCK_PHASE_LOW)
|
ClockPolarity
|
The clock polarity to set (eg SPI_CLOCK_POLARITY_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceStop(SPI:PSPIDevice):LongWord;
Description: Stop the specified SPI device and terminate writing and reading
SPI
|
The SPI device to stop
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceWrite(SPI:PSPIDevice; ChipSelect:Word; Source:Pointer; Size,Flags:LongWord; var Count:LongWord):LongWord;
Description: Write data to the specified SPI device
SPI
|
The SPI device to write to
|
ChipSelect
|
The chip select for the slave to write to (eg SPI_CS_0)
|
Source
|
Pointer to a buffer of data to transmit
|
Size
|
The size of the buffer
|
Flags
|
The flags for this transfer (eg SPI_TRANSFER_DMA)
|
Count
|
The number of bytes written on return
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
Note
|
Because SPI writes and then reads for each byte, received data will be discarded for each by written
|
[Expand]
function SPIDeviceSetMode(SPI:PSPIDevice; Mode:LongWord):LongWord;
Description: Set the device mode for the specified SPI device
SPI
|
The SPI device to set device mode for
|
Mode
|
The device mode to set (eg SPI_MODE_4WIRE)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceSetClockRate(SPI:PSPIDevice; ClockRate:LongWord):LongWord;
Description: Set the clock rate for the specified SPI device
SPI
|
The SPI device to set clock rate for
|
ClockRate
|
The clock rate to set in Hz
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceSetClockPhase(SPI:PSPIDevice; ClockPhase:LongWord):LongWord;
Description: Set the clock phase for the specified SPI device
SPI
|
The SPI device to set clock phase for
|
ClockPhase
|
The clock phase to set (eg SPI_CLOCK_PHASE_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceSetClockPolarity(SPI:PSPIDevice; ClockPolarity:LongWord):LongWord;
Description: Set the clock polarity for the specified SPI device
SPI
|
The SPI device to set clock polarity for
|
ClockPolarity
|
The clock polarity to set (eg SPI_CLOCK_POLARITY_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceSetSelectPolarity(SPI:PSPIDevice; ChipSelect:Word; SelectPolarity:LongWord):LongWord;
Description: Set the chip select polarity for the specified SPI device
SPI
|
The SPI device to set chip select polarity for
|
ChipSelect
|
The chip select number to set polarity for (SPI_CS_NONE for default)
|
SelectPolarity
|
The chip select polarity to set (eg SPI_CS_POLARITY_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SPIDeviceCreate:PSPIDevice;
Description: Create a new SPI entry
Return
|
Pointer to new SPI entry or nil if SPI could not be created
|
[Expand]
function SPIDeviceCreateEx(Size:LongWord):PSPIDevice;
Description: Create a new SPI entry
Size
|
Size in bytes to allocate for new SPI (Including the SPI entry)
|
Return
|
Pointer to new SPI entry or nil if SPI could not be created
|
[Expand]
function SPIDeviceDestroy(SPI:PSPIDevice):LongWord;
Description: Destroy an existing SPI entry
[Expand]
function SPIDeviceRegister(SPI:PSPIDevice):LongWord;
Description: Register a new SPI in the SPI table
[Expand]
function SPIDeviceFind(SPIId:LongWord):PSPIDevice;
Description: To be documented
[Expand]
function SPIDeviceFindByName(const Name:String):PSPIDevice; inline;
Description: To be documented
[Expand]
function SPIDeviceFindByDescription(const Description:String):PSPIDevice; inline;
Description: To be documented
[Expand]
function SPIDeviceEnumerate(Callback:TSPIEnumerate; Data:Pointer):LongWord;
Description: To be documented
[Expand]
function SPIDeviceNotification(SPI:PSPIDevice; Callback:TSPINotification; Data:Pointer; Notification,Flags:LongWord):LongWord;
Description: To be documented
RTL SPI functions
[Expand]
function SysSPIAvailable:Boolean;
Description: Check if an SPI device is available
[Expand]
function SysSPIStart(Mode,ClockRate,ClockPhase,ClockPolarity:LongWord):LongWord;
Description: Start the default SPI device ready for writing and reading
Mode
|
The device mode to set (eg SPI_MODE_4WIRE")
|
ClockRate
|
The clock rate to set for the device
|
ClockPhase
|
The clock phase to set (eg SPI_CLOCK_PHASE_LOW)
|
ClockPolarity
|
The clock polarity to set (eg SPI_CLOCK_POLARITY_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SysSPIStop:LongWord;
Description: Stop the default SPI device and terminate writing and reading
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SysSPIWrite(ChipSelect:Word; Source:Pointer; Size:LongWord; var Count:LongWord):LongWord;
Description: Write data to the default SPI device
ChipSet
|
The chip select for the slave to write to (eg SPI_CS_0)
|
Source
|
Pointer to a buffer of data to transmit
|
Size
|
The size of the buffer
|
Count
|
The number of bytes written on return
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
Note
|
Because SPI writes and then reads for each byte, received data will be discarded for each by written
|
[Expand]
function SysSPIGetMode:LongWord;
Description: Get the device mode of the default SPI device
Return
|
The device mode or SPI_MODE_UNKNOWN on failure
|
[Expand]
function SysSPISetMode(Mode:LongWord):LongWord;
Description: Set the device mode for the default SPI device
Mode
|
The device mode to set (eg SPI_MODE_4WIRE)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SysSPIGetClockRate:LongWord;
Description: Get the clock rate of the default SPI device
Return
|
The clock rate in Hz or 0 on failure
|
[Expand]
function SysSPISetClockRate(ClockRate:LongWord):LongWord;
Description: Set the clock rate for the default SPI device
ClockRate
|
The clock rate to set in Hz
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SysSPIGetClockPhase:LongWord;
Description: Get the clock phase of the default SPI device
Return
|
The clock phase or SPI_CLOCK_PHASE_UNKNOWN on failure
|
[Expand]
function SysSPISetClockPhase(ClockPhase:LongWord):LongWord;
Description: Set the clock phase for the default SPI device
ClockPhase
|
The clock phase to set (eg SPI_CLOCK_PHASE_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SysSPIGetClockPolarity:LongWord;
Description: Get the clock polarity of the default SPI device
Return
|
The clock polarity or SPI_CLOCK_POLARITY_UNKNOWN on failure
|
[Expand]
function SysSPISetClockPolarity(ClockPolarity:LongWord):LongWord;
Description: Set the clock polarity for the default SPI device
ClockPolarity
|
The clock polarity to set (eg SPI_CLOCK_POLARITY_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
[Expand]
function SysSPISetSelectPolarity(ChipSelect:Word; SelectPolarity:LongWord):LongWord;
Description: Set the chip select polarity for the default SPI device
ChipSet
|
The chip select number to set polarity for (SPI_CS_NONE for default)
|
SelectPolarity
|
The chip select polarity to set (eg SPI_CS_POLARITY_LOW)
|
Return
|
ERROR_SUCCESS if completed or another error code on failure
|
SPI helper functions
[Expand]
function SPIGetCount:LongWord; inline;
Description: Get the current SPI count
[Expand]
function SPIDeviceGetDefault:PSPIDevice; inline;
Description: Get the current default SPI device
[Expand]
function SPIDeviceSetDefault(SPI:PSPIDevice):LongWord;
Description: Set the current default SPI device
[Expand]
function SPIDeviceCheck(SPI:PSPIDevice):PSPIDevice;
Description: Check if the supplied SPI is in the SPI table
[Expand]
procedure SPILog(Level:LongWord; SPI:PSPIDevice; const AText:String);
Description: To be documented
[Expand]
procedure SPILogInfo(SPI:PSPIDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure SPILogError(SPI:PSPIDevice; const AText:String); inline;
Description: To be documented
[Expand]
procedure SPILogDebug(SPI:PSPIDevice; const AText:String); inline;
Description: To be documented
[Expand]
function SPIChipSelectToString(ChipSelect:Word):String;
Description: To be documented
[Expand]
function SPIModeToString(Mode:LongWord):String;
Description: To be documented
[Expand]
function SPIClockPhaseToString(Phase:LongWord):String;
Description: To be documented
[Expand]
function SPIClockPolarityToString(Polarity:LongWord):String;
Description: To be documented
[Expand]
function SPISelectPolarityToString(Polarity:LongWord):String;
Description: To be documented
Return to Unit Reference