This Figure shows the timing diagram for a standard SPI mode data write-read cycle when CPHA = 0. The waveforms are shown for CPOL = 0, LSB First = 0, and the value of generic C_SCK_RATIO = 4. All AXI and SPI signals have the same relation regarding S_AXI_AClk and SCK respectively.
Signal SCK remains in the idle state until one-half period following the assertion of the slave select line which denotes the start of a transaction. Because assertion of the SS(N) line denotes the start of a transfer, it must be deasserted and re-asserted for sequential element transfers to the same slave device.
One bit of data is transferred per SCK clock period. Data is shifted on one edge of SCK and is sampled on the opposite edge when the data is stable. Consistent with the M68HC11 SPI specification, selection of clock polarity and a choice of two different clocking protocols on an 8/16/32-bit oriented data transfer is possible using bits in the SPICR.
The IO0 pin is equivalent to IO0 (MOSI) in standard SPI mode. The IO1 pin is equivalent to IO1 (MISO) in standard SPI mode.
The IO0 and IO1 ports behave differently depending on whether the SPI device is configured as a master or a slave. When configured as a master, the IO0 port is a serial data output port, while the IO1 is a serial data input port. The opposite is true when the device is configured as a slave; the IO1 port is a slave serial data output port and the IO0 is a serial data input port. There can be only one master and one slave transmitting data at any given time. The bus architecture provides limited contention error detection (that is, multiple devices driving the shared IO1 and IO0 signals) and requires the software to provide arbitration to prevent possible contention errors.
All SCK, IO0, and IO1 pins of all devices are hard-wired together. For all transactions, a single SPI device is configured as a master and all other SPI devices on the SPI bus are configured as slaves.
The single master drives the SCK and IO0 pins to the SCK and IO0 pins of the slaves. The uniquely-selected slave device drives data from its IO1 pin to the IO1 master pin, thus realizing full-duplex communication.
The Nth bit of the SS(N) signal selects the Nth SPI slave with an active-Low signal. All other slave devices ignore both SCK and IO0 signals. In addition, the non-selected slaves (that is, SS pin High) drive their IO1 pin to 3-state so as not to interfere with SPI bus activities. When external slave SPI devices are implemented, the SCK, IO0 and IO1, as well as the needed SS(N) signals, are brought out to pins. All signals are true 3-state bus signals and erroneous external bus activity can corrupt internal transfers when both internal and external devices are present.
Ensure that the external pull-up or pull-down of external SPI 3-state signals are consistent with the sink/source capability of the FPGA I/O drivers. The I/O drivers can be configured for different drive strengths, as well as internal pull-ups. The 3-state signals for multiple external slaves can be implemented per the system design requirements, but the external bus must follow the SPI M68HC11 specifications.