| # 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 |
| ``` |