Features: Serial Peripheral Interface (SPI) Slave
Features: Serial Peripheral Interface (SPI) Slave
Features
• 3 to 16-bit data width
• 4 SPI modes
• Bit Rate up to 5 Mbps*
General Description
The SPI Slave provides an industry-standard, 4-wire slave SPI interface and 3-wire. It can also
provide a 3-wire (bidirectional) SPI interface. Both interfaces support all four SPI operating
modes, allowing communication with any SPI master device. In addition to the standard 8-bit
word length, the SPI Slave supports a configurable 3- to 16-bit word length for communicating
with nonstandard SPI word lengths.
SPI signals include the standard Serial Clock (SCLK), Master In Slave Out (MISO), Master Out
Slave In (MOSI), bidirectional Serial Data (SDAT), and Slave Select (SS).
*
This value is valid only for MOSI+MISO (Full Duplex) interfacing mode (see “DC and AC electrical characteristics”
section for details) and is restricted up to 1 Mbps in Bidirectional mode because of internal bidirectional pin
constraints.
Cypress Semiconductor Corporation • 198 Champion Court • San Jose, CA 95134-1709 • 408-943-2600
Document Number: 001-65237 Rev. ** Revised November 30, 2010
Serial Peripheral Interface (SPI) Slave PSoC® Creator™ Component Data Sheet
Input/Output Connections
This section describes the various input and output connections for the SPI. An asterisk (*) in the
list of I/O indicates that the I/O may be hidden on the symbol under the conditions listed in the
description of that I/O.
mosi – Input *
The miso input carries the Master In Slave Out (MISO) signal from a slave device. This input is
visible when the Data Lines parameter is set to "MOSI + MISO." If visible, this input must be
connected.
sdat – Inout *
The sdat inout carries the Serial Data (SDAT) signal. This input is used when the Data Lines
parameter is set to "Bidirectional."
sclk– Input
The sclk input carries the Serial Clock (SCLK) signal. It provides the slave synchronization clock
input to this device. This input is always visible and must be connected.
Note Some SPI Master devices (such as the TotalPhase Aardvark I2C/SPI host adapter) drive
the sclk output in a specific way. For the SPI Slave component to function properly with such
devices in modes 1 and 3 (when CPOL =1), the sclk pin should be set to resistive pull up drive
mode. Otherwise, it gives out corrupted data. See the Functional Description section for more
information about modes.
ss – Input
The ss input carries the Slave Select (SS) signal to this device. This input is always visible and
must be connected.
The following diagrams show the timing correlation between SCLK and SS signals
reset – Input
Resets the SPI Slave. This will throw out any data that was currently being transmitted or
received but will not clear data from the FIFO that has already been received or is ready to be
transmitted. Note that ES2 silicon does not support routed reset functionality and this input
should be unconnected when component is used in ES2 silicon projects.
CPHA = 0:
CPHA = 1:
Note The SS timing shown in this diagram is valid for the PSoC Creator SPI Master. Generally
0.5 of the SCLK period is enough delay between the SS negative edge and the first SCLK edge
for the SPI Slave to work correctly in all supported bit rate ranges.
clock – Input *
The clock input defines the sampling rate of the status register. All data clocking happens on the
sclk input, so the clock input does not handle the bit-rate of the SPI Slave.
The clock input is visible when the Clock Selection parameter is set to "External." If visible, this
input must be connected.
miso – Output *
The miso output carries the Master In Slave Out (MISO) signal to the master device on the bus.
This output is visible when the Data Lines parameter is set to "MOSI + MISO."
interrupt – Output
The interrupt output is the logical OR of the group of possible interrupt sources. This signal will
go high while any of the enabled interrupt sources are true.
Note If you do not use a Schematic Macro, configure the Pins component to deselect the Input
Synchronized parameter for each of your assigned input pins (MOSI, SCLK and SS). The
parameter is located under the Pins > Input tab of the applicable Pins Configure dialog.
Configure Tab
The Configure tab contains basic parameters required for every SPI component. As such, these
parameters are the first ones visible to configure.
Note The sample signal in the waveform is not an input or output of the system; it simply indicates when
the data is sampled at the master and slave for the mode settings selected.
Mode *
The Mode parameter defines the desired clock phase and clock polarity mode used in the
communication. The options are "Mode 0" (default), "Mode 1," "Mode 2," and "Mode 3." These
modes are defined in the following table. Refer also to the Functional Description section of this
data sheet.
Mode CPHA CPOL
0 0 0
1 0 1
2 1 0
3 1 1
Data Lines
The Data Lines parameter defines which interfacing is used for SPI communication – 4-wire
(MOSI+MISO) or 3-wire (Bidirectional).
Data Bits *
The number of Data Bits defines the bit-width of a single transfer as transferred with the
SPIS_ReadRxData() and SPIS_WriteTxData() APIs. The default number of bits is a single byte
(8 bits). Any integer from 3 to 16 may be selected
Shift Direction *
The Shift Direction parameter defines the direction the serial data is transmitted. When set to
MSB_First, the most significant bit is transmitted first. This is implemented by shifting the data
left. When set to LSB_First, the least significant bit is transmitted first. This is implemented by
shifting the data right.
Bit Rate *
If the Clock Selection parameter (on the Advanced tab) is set to "Internal Clock," the Bit Rate
parameter defines the SCLK speed in Hertz. The clock frequency of the internal clock will be 2x
the SCLK rate. This parameter has no affect if the Clock Selection parameter is set to "External
Clock."
Advanced Tab
Clock Selection
Specifies whether to use an Internal Clock or External Clock. Refer to the Clock Selection
section later in this data sheet for more information.
RX Buffer Size *
The RX Buffer Size parameter defines the size (in bytes/words) of memory allocated for a The
TX Buffer Size parameter defines the size (in bytes/words) of memory allocated for a circular
data buffer. If this parameter is set to 1-4, the 4th byte/word of FIFO is implemented in the
hardware. Values 1-3 are available only for compatibility with the previous versions; using them
will cause an error icon to display that value is incorrect. All other values up to 255 will use the 4-
byte/word FIFO and a memory array controlled by the supplied API.
TX Buffer Size *
The TX Buffer Size parameter defines the size (in bytes/words) of memory allocated for a
circular data buffer. If this parameter is set to 1-4, the 4th byte/word of FIFO is implemented in the
hardware. Values 1-3 are available only for compatibility with the previous versions; using them
will cause an error icon to display that value is incorrect. All other values up to 255 will use the 4-
byte/word FIFO and a memory array controlled by the supplied API.
Interrupts
The Interrupts selection parameters allow you to configure the internal events that are enabled
to cause an interrupt. Interrupt generation is a masked OR of all of the enabled TX and RX
status register bits. The bits chosen with these parameters define the mask implemented with
the initial component configuration.
Clock Selection
When the internal clock configuration is selected, PSoC Creator calculates the needed frequency
and clock source, and generates the clocking resource needed for implementation. Otherwise,
you must supply the clock component and calculate the required clock frequency. That
frequency is at a minimum 2x the maximum bit-rate and SCLK frequency.
Note When setting the bitrate or external clock frequency value, make sure that this value can
be provided by PSoC Creator using the current system clock frequency. Otherwise, a warning
about the clock accuracy range will be generated while building the project. This warning will
contain the real clock value set by PSoC Creator. Choose whether the system clock or
component clock should be changed to fit the clocking system requirements and achieve an
optimal value.
Placement
The SPI Slave component is placed into the UDB array and all placement information is provided
to the API through the cyfitter.h file.
Resources
API Memory
Digital Blocks (Bytes)
Function Description
SPIS_Sleep Prepare SPIS component for low power modes by calling SPIS_SaveConfig() and
SPIS_Stop() functions.
SPIS_Wakeup Restore and re-enable the SPIS component after waking from low power mode.
SPIS_Init Initializes and restores the default SPIS configuration.
SPIS_Enable Enables the SPIS to start operation.
SPIS_SaveConfig Saves SPIS hardware configuration.
SPIS_RestoreConfig Restores SPIS hardware configuration.
Global Variables
Function Description
SPIS_initVar Indicates whether the SPI Slave has been initialized. The variable is initialized to 0 and later
set to 1 the first time SPIS_Start() is called. This allows the component to restart without
reinitialization after the first call to the SPIS_Start() routine.
If reinitialization of the component is required, then the SPIS_Init() function can be called
before the SPIS_Start() or SPIS_Enable() function.
SPIS_txBufferWrite Transmit buffer location of the last data written into the buffer by the API.
SPIS_txBufferRead Transmit buffer location of the last data read from the buffer and transmitted by SPIS
hardware.
SPIS_rxBufferWrite Receive buffer location of the last data written into the buffer after received by SPIS
hardware.
SPIS_rxBufferRead Receive buffer location of the last data read from the buffer by the API.
void SPIS_Start(void)
Description: This function calls both SPIS_Init() and SPIS_Start(). This should be called the first time the
component is started.
Parameters: None
Return Value: None
Side Effects: None
void SPIS_Stop(void)
Description: Disables the SPI Slave component. Has no affect on the SPIS operation.
Parameters: None
Return Value: None
Side Effects: None
void SPIS_Init(void)
Description: Initializes or restores the component according to the customizer Configure dialog settings. It
is not necessary to call SPIS_Init() because the SPIS_Start() routine calls this function and is
the preferred method to begin component operation.
Parameters: None
Return Value: None
Side Effects: When this function is called, it initializes all of the necessary parameters for execution. These
include setting the initial interrupt mask, configuring the interrupt service routine, configuring
the bit-counter parameters and clearing the FIFO and Status Register.
void SPIS_Enable(void)
Description: Enables SPIS to start operation. Starts the internal clock if so configured. If an external clock
is configured it must be started separately prior to calling this API. The SPIS_Enable()
function should be called before SPIS interrupts are enabled. This is because this function
configures the interrupt sources and clears any pending interrupts from device configuration,
and then enables the internal interrupts if so configured. A SPIS_Init() function must have
been previously called.
Parameters: None
Return Value: None
Side Effects: None
Defines
SPIS_TX_INIT_INTERRUPTS_MASK
Defines the initial configuration of the interrupt sources chosen in the Configure dialog. This is a
mask of the bits in the TX status register that have been enabled at configuration as sources for
the interrupt. Refer to Status Register Bits section for bit-field details.
SPIS_RX_INIT_INTERRUPTS_MASK
Defines the initial configuration of the interrupt sources chosen in the Configure dialog. This is a
mask of the bits in the RX status register that have been enabled at configuration as sources for
the interrupt. Refer to Status Register Bits section for bit-field details.
Table 1 SPIS_TXSTATUS
Bits 7 6 5 4 3 2 1 0
Value Interrupt Byte/Word Unused Unused Unused TX FIFO TX FIFO. SPI Done
Complete Empty Not Full
Table 2 SPIS_RXSTATUS
Bits 7 6 5 4 3 2 1 0
• SPI Done: Set when all of the data in the transmit FIFO has been sent. This may be used
to signal a transfer complete instead of using the byte/word complete status. (Set when
Byte/Word Complete has been set and TX Data FIFO is empty.)
SPIS_TXBUFFERSIZE
Defines the amount of memory to allocate for the TX memory array buffer. This does not include
the 4 bytes/words included in the FIFO. If this value is greater than 4, interrupts are implemented
which move data to the FIFO from the circular memory buffer automatically.
SPIS_RXBUFFERSIZE
Defines the amount of memory to allocate for the RX memory array buffer. This does not include
the 4 bytes/words included in the FIFO. If this value is greater than 4, interrupts are implemented
which move data from the FIFO to the circular memory buffer automatically.
SPIS_DATAWIDTH
Defines the number of bits per data transfer chosen in the Configure dialog.
Functional Description
Default Configuration
The default configuration for the SPIS is as an 8-bit SPIS with Mode 0 configuration.
Modes
To show the component’s status bits and component signals values which they assume during
data transmission 4 waveforms are shown. It is supposed that 5 data bytes are transmitted (4
bytes are written to the SPI Slave’s TX buffer at the beginning of transmission and 5th – is thrown
after 1st byte has been loaded into the A0 register). Rounded numbers represent the following
events:
1 – Tx FIFO Empty has being cleared when 4 bytes are written to the Tx buffer;
2 – Tx FIFO Not Full has been cleared because Tx FIFO is full after 4 bytes written;
3 – Tx FIFO Not Full status is set when 1st byte has been loaded into the A0 register and cleared
after 5th byte has been written to the free place into the Tx buffer.
4 – Slave Select line is set to Low state indicating beginning of the transmission.
5 – Tx FIFO Not Full status is set when 2nd bit is loaded to the A0. Rx Not Empty status is set
when 1st received byte has been loaded into the Rx buffer. Byte/Word Complete is set as well.
6 – Tx FIFO Empty status is set at the moment when last byte to be sent has been loaded into
the A0 register.(is not shown in details for simplification).
7 – the moment when 4th byte has been received so Rx FIFO Full is set along with Byte/Word
Complete.
8 – Byte/Word Complete, SPI Done and Rx Overrun are set because all bytes have been
transmitted and an attempt to load data into the full Rx buffer has been detected.
9 – SS line is set to High to indicate that transmission is complete.
10 – Rx FIFO Full is cleared when 1st byte has been read from the Rx buffer and Rx FIFO Empty
is set when all of them have been read.
Note Because the same register is used to transmit and receive data the diagram section “Tx/Rx
Data (A0)” contains two bit numbers in the following format : “Tx bit number (Rx bit number)”.
2x clock
SCLK
Tx/Rx Data
(A0)
4 9
SS
1 6
TX FIFO EMPTY 3
2
RX FIFO FULL
RX FIFO NOT 5
EMPTY
8
RX FIFO
OVERRUN
BYTE/WORD
COMPLETE
SPI DONE
Note Some SPI Master devices (such as the TotalPhase Aardvark I2C/SPI host adapter) drive
the sclk output in a specific way. For the SPI Slave component to function properly with such
devices in modes 1 and 3 (when CPOL =1), the sclk pin should be set to resistive pull up drive
mode. Otherwise, it gives out corrupted data.
Registers
Status TX
The TX status register is a read only register which contains the various status bits defined for a
given instance of the SPIS Component. Assuming that an instance of the SPI Slave is named
"SPIS," the value of these registers is available with the SPIS_ReadTxStatus() function call. The
interrupt output signal is generated from an ORing of the masked bit-fields within the TX status
register. You can set the mask using the SPIS_SetTxInterruptMode() function call and upon
receiving an interrupt you can retrieve the interrupt source by reading the TX Status register with
the SPIS_ReadTxStatus () function call. The TX Status register is cleared on reading so the
interrupt source is held until the SPIS_ReadTxStatus() function is called. All operations on the
TX status register must use the following defines for the bit-fields as these bit-fields may be
moved around within the TX status register at build time.
There are several bit-fields masks defined for the TX status registers. Any of these bit-fields may
be included as an interrupt source. The bit-fields indicated with an * are configured as sticky bits
in the TX status register, all other bits are configured as real-time indicators of status. The
#defines are available in the generated header file (.h) as follows:
• SPIS_STS_SPI_DONE * – Defined as the bit-mask of the Status register bit "SPI Done."
• SPIS_STS_TX_FIFO_NOT_FULL – Defined as the bit-mask of the Status register bit
"Transmit FIFO Empty."
Status RX
The RX status register is a read only register which contains the various status bits defined for
the SPIS. The value of these registers is available with the SPIS_ReadRxStatus() and function
call. The interrupt output signal is generated from an ORing of the masked bit-fields within the
RX status register. You can set the mask using the SPIS_SetRxInterruptMode() function call and
upon receiving an interrupt you can retrieve the interrupt source by reading the RX Status
register with the SPIS_ReadRxStatus () function call. The RX Status register is clear on read so
the interrupt source is held until the SPIS_ReadRxStatus() function is called. All operations on
the RX status register must use the following defines for the bit-fields as these bit-fields may be
moved around within the RX status register at build time.
There are several bit-fields masks defined for the RX status registers. Any of these bit-fields may
be included as an interrupt source. The bit-fields indicated with an * are configured as sticky bits
in the RX status register, all other bits are configured as real-time indicators of status.
The #defines are available in the generated header file (.h) as follows:
• SPIS_STS_RX_FIFO_FULL – Defined as the bit-mask of the Status register bit "Receive
FIFO Full."
• SPIS_STS_RX_FIFO_NOT_EMPTY – Defined as the bit-mask of the Status register bit
"Receive FIFO Not Empty."
• SPIS_STS_RX_FIFO_OVERRUN * – Defined as the bit-mask of the Status register bit
"Receive FIFO Overrun."
TX Data
The TX data register contains the transmit data value to send. This is implemented as a FIFO in
the SPIS. There is a software state machine to control data from the transmit memory buffer to
handle much larger portions of data to be sent. All APIs dealing with transmitting the data must
go through this register to place the data onto the bus. If there is data in this register and flow
control indicates that data can be sent, then the data will be transmitted on the bus. As soon as
this register (FIFO) is empty no more data will be transmitted on the bus until it is added to the
FIFO. DMA may be setup to fill this FIFO when empty using the TXDATA_REG address defined
in the header file.
RX Data
The RX data register contains the received data. This is implemented as a FIFO in the SPIS.
There is a software state machine to control data movement from this receive FIFO into the
memory buffer. Typically the RX interrupt will indicate that data has been received at which time
that data has several routes to the firmware. DMA may be setup from this register to the memory
array or the firmware may simply poll for the data at will. This will use the RXDATA_REG
address defined in the header file.
References
Not applicable
1
The component maximum component clock frequency is derived from tSCLK_MISO in combination with the routing
path delays of the SCLK input and the MISO output (Described later in this document). These “Nominal” numbers
provide a maximum safe operating frequency of the component under nominal routing conditions. It is possible to
run the component at higher clock frequencies, at which point you will need to validate the timing requirements with
STA results.
2
Config 1 options:
Data Lines: MOSI+MISO
Data Bits: 8
3
Config 2 options:
Data Lines: MOSI+MISO
Data Bits: 16
4
Config 3 options:
Data Lines: Bidirectional
Data Bits: 8
5
Config 4 options:
Data Lines: Bidirectional
Data Bits: 16
6
Component Clock is for status register only; it does not affect base functionality or bit-rate. Routing may limit the
maximum frequency of this parameter; therefore the maximum is listed with nominal routing results.
1
Maximum for “All Routing” is calculated by <nominal>/2 rounded to the nearest integer. This value provides a
basis for the user to not have to worry about meeting timing if they are running at or below this component
frequency.
2
Config 1 options:
Data Lines: MOSI+MISO
Data Bits: 8
3
Config 2 options:
Data Lines: MOSI+MISO
Data Bits: 16
4
Config 3 options:
Data Lines: Bidirectional
Data Bits: 8
5
Config 4 options:
Data Lines: Bidirectional
Data Bits: 16
6
Component Clock is for status register only; it does not affect base functionality or bit-rate. Routing may limit the
maximum frequency of this parameter; therefore the maximum is listed with nominal routing results.
Cypress Semiconductor Corporation • 198 Champion Court • San Jose, CA 95134-1709 • 408-943-2600
Document Number: 001-65237 Rev. ** Revised November 30, 2010
PSoC® Creator™ Component Data Sheet Serial Peripheral Interface (SPI) Slave
tPD_SCLK(slave)
tSCLK_MISO(slave)
N N-1
@ Slave Internal MISO (0) (1)
tSCLK_MISO(slave)
N N-1
@ Slave pin MISO (0) (1)
MISOPD_PCB
N N-1
@ Master pin MISO (0) (1)
In this case the component must meet the setup time of MISO at the Master using the
equation below:
tRT_PD < 1 / { [½ * fSCLK] – tPD_SCLK(master) - tS_MISO(master)}
-- OR --
fSCLK < 1 / {2 * [TRT_PD + tPD_SCLK(master) + tS_MISO(master)] }
Where tPD_SCLK(master) + tS_MISO(Master) must come from the Master Device Datasheet. And
tRT_PD is defined as:
tRT_PD = [SCLKPD_PCB + tPD_SCLK(slave) + tSCLK_MISO(slave) + MISOPD_PCB]
and:
SCLKPD_PCB is the PCB Path delay of SCLK from the pin of the master component to the
pin of the slave component.
TPD_SCLK(Slave) is the path delay of the input SCLK to the internal logic; TSCLK_MISO(slave) is
the SCLK pin to internal logic path delay of the slave component; And tPD_MISO(slave) is the
path delay of the internal MISO to the pin. The easiest way to find the values for these
three parameters is to take the combined path as directly listed in the STA results,
shown in the figure below:
Where TPD_SCLK(Slave) is the first two numbers, TSCLK_MISO(slave) is the second two numbers,
and tPD_MISO(slave) is the last two numbers. The full path of the three parameters is
45.889ns.
MISOPD_PCB is the PCB path delay of the MISO from the pin of the slave component to
the pin of the master component
The final equation that will provide the maximum frequency of SCLK and therefore the
maximum bit-rate is:
fSCLK (Max.) = 1 / { 2* [ SCLKPD_PCB + tPD_SCLK(slave) + tSCLK_MISO(slave) + MISOPD_PCB +
tPD_SCLK(master) + tS_MISO(master) ] }
fclock Maximum Component Clock Frequency is provided in Timing results in the clock
summary as the IntClock (if internal clock is selected) or the named external clock. An
example of the internal clock limitations from the _timing.html file is below:
tCKH The SPI Slave component requires a 50% duty cycle SCLK
tCKL The SPI Slave component requires a 50% duty cycle SCLK
tS_MOSI To meet the setup time of the internal logic MOSI must be valid at the pin, before SCLK
is valid at the pin, by this amount of time
tH_MOSI To meet the hold time of the internal logic MOSI must be valid at the pin, after SCLK is
valid at the pin, by this amount of time.
tSS_SCLK To meet the internal functionality of the block. Slave Select (SS) must be valid at the pin
before SCLK is valid at the pin by this parameter.
tSCLK_SS Maximum - To meet the internal functionality of the block. Slave Select (SS) must be
valid at the pin after the last falling edge of SCLK at the pin by this parameter.
Component Changes
This section lists the major changes in the component from the previous version.
Version Description of Changes Reason for Changes / Impact
2.10 Data Bits range is changed from 2-16 bits to 3-16 Changes related to status synchronization issues
fixed in current version
“Byte transfer complete” checkbox name is changed To fit the real meaning
to the “Byte/Word transfer complete”
Added characterization data to datasheet
Minor datasheet edits and updates
2.0.a Moved component into subfolders of the component
catalog.
Minor datasheet edits and updates
2.0 Added SPIS_Sleep()/SPIS_Wakeup() and To support low power modes, as well as to
SPIS_Init()/SPIS_Enable() APIs. provide common interfaces to separate control of
initialization and enabling of most components.
Number and positions of component outputs have PSoC 3 ES3 reset functionality was added. Two
been changed: status interrupt registers (Tx and Rx) are now
• The reset input was added; presented instead of one shared. The changes
• The interrupt output was removed; rx_interrupt, must be taken into account to prevent binding
tx_interrupt outputs were added instead. errors when migrating from previous SPI
versions
Removed SPIS_EnableInt(), SPIS_DisableInt(), The removed APIs are obsolete because the
SPIS_SetInterruptMode(), and SPIS_ReadStatus() component now contains RX and TX interrupts
APIs. instead of one shared interrupt. Also updated the
interrupt handler implementation for TX and RX
Added SPIS_EnableTxInt(), SPIS_EnableRxInt(), Buffer.
SPIS_DisableTxInt(), SPIS_DisableRxInt(),
SPIS_SetTxInterruptMode(),
SPIS_SetRxInterruptMode(), SPIS_ReadTxStatus(),
SPIS_ReadRxStatus() APIs.
Renamed SPIS_ReadByte(), SPIS_WriteByte(), and Clarifies the APIs and how they should be used.
SPIS_WriteByteZero() APIs to SPIS_ReadRxData(),
SPIS_WriteTxData(), SPIS_WriteTxDataZero().
© Cypress Semiconductor Corporation, 2010. The information contained herein is subject to change without notice. Cypress Semiconductor Corporation assumes no responsibility for the use of
any circuitry other than circuitry embodied in a Cypress product. Nor does it convey or imply any license under patent or other rights. Cypress products are not warranted nor intended to be used
for medical, life support, life saving, critical control or safety applications, unless pursuant to an express written agreement with Cypress. Furthermore, Cypress does not authorize its products for
use as critical components in life-support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress products in life-
support systems application implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
PSoC® is a registered trademark, and PSoC Creator™ and Programmable System-on-Chip™ are trademarks of Cypress Semiconductor Corp. All other trademarks or registered trademarks
referenced herein are property of the respective corporations.
Any Source Code (software and/or firmware) is owned by Cypress Semiconductor Corporation (Cypress) and is protected by and subject to worldwide patent protection (United States and
foreign), United States copyright laws and international treaty provisions. Cypress hereby grants to licensee a personal, non-exclusive, non-transferable license to copy, use, modify, create
derivative works of, and compile the Cypress Source Code and derivative works for the sole purpose of creating custom software and or firmware in support of licensee product to be used only in
conjunction with a Cypress integrated circuit as specified in the applicable agreement. Any reproduction, modification, translation, compilation, or representation of this Source Code except as
specified above is prohibited without the express written permission of Cypress.
Disclaimer: CYPRESS MAKES NO WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, WITH REGARD TO THIS MATERIAL, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. Cypress reserves the right to make changes without further notice to the materials described herein.
Cypress does not assume any liability arising out of the application or use of any product or circuit described herein. Cypress does not authorize its products for use as critical components in life-
support systems where a malfunction or failure may reasonably be expected to result in significant injury to the user. The inclusion of Cypress’ product in a life-support systems application
implies that the manufacturer assumes all risk of such use and in doing so indemnifies Cypress against all charges.
Use may be limited by and subject to the applicable Cypress software license agreement.