blob: ac8d818b61fa64f10ee5cee12c9331d0fab0854b [file] [log] [blame] [view]
# Simple SPI Tests
`spitest` is a trivial Python tool for interacting with the SPI device
code in the `hello_world` test program running on `top_earlgrey` on the
FPGA board.
The same FTDI interface is used for SPI as for JTAG, so this tool
cannot be used at the same time as an OpenOCD debugger. The
`top_earlgray_nexsysvideo` pin mux has been modified to use one of the
FTDI GPIOs to select between the two interfaces, so it is possible to
dynamically switch between the tools. This status bit is also
presented as `GPIO[16]` (which was previously unused).
The example commands assume `$REPO_TOP` is set to the toplevel directory
of the repo.
### Setup
If packages have not previously been installed you will need to set a
few things up. First use `apt` and `pip3` to install some required packages:
```console
$ sudo apt-get install libusb-1.0
$ pip3 install --user pyftdi
```
You also need the `udev` rules to be set correctly by following the
instructions for setting up the Xilinx tools.
### SPI/JTAG selection GPIO
The tool can be used to test the SPI/JTAG selection gpio. This is done
by providing the `--flippy` or `-f` argument which causes the
selection to be flipped 10 times with 2 second pauses between. The
`hello_world` program will see the bit flip and print a message.
```console
$ cd $REPO_TOP/util/simplespi
$ ./spitest.py -f
```
### SPI Protocol Test
The SPI protocol used in the test is a simple exchange of 4-byte
messages. When data is received from the SPI Device interface the
`hello_world` program will receive and print it out on the UART. The
first four bytes have their bottom bit inverted and are returned in
the next SPI transaction. If the sender is faster than the FPGA then
messages are aggregated in the receive buffer and will appear as a
single long message to `hello_world` which will only return a single
4-byte message.
A simple test should therefore just use 4 characters.
```console
$ cd $REPO_TOP/util/simplespi
$ ./spitest.py 1234
$ ./spitest.py 5678
```
Long messages will be padded to a multiple of 4 bytes before being
sent, and there may be some garbage return messages.
```console
$ cd $REPO_TOP/util/simplespi
$ ./spitest.py the quick brown fox jumps
```
Messages of any length (the length given is used even if not a
multiple of 4) may be generated by the tool. The message is formed
from repeating the ascii characters `0123456789abcdef` (to fill the
required length) and sent, and there may be some garbage return
messages.
```console
$ cd $REPO_TOP/util/simplespi
$ ./spitest.py -l 120
```