/* spi_test.c D.J.Whale 18/07/2014 * * A simple SPI port exerciser. * currently only uses the soft SPI (spis) * TODO: Later will also support hard SPI (spih) * but will have to sort out the pin configuration structure first for that to work. */ /***** INCLUDES *****/ #include <stdio.h> #include <stdlib.h> #include "system.h" #include "gpio.h" #include "spi.h" #include "trace.h" /***** CONSTANTS *****/ /* GPIO numbers on Raspberry Pi */ #define CS 8 #define SCLK 11 #define MOSI 10 #define MISO 9 /* ms */ #define TSETTLE (1UL * 1000UL) /* us */ #define THOLD (1UL * 1000UL) /* us */ #define TFREQ (1UL * 1000UL) /* 1us = 1MHz */ int main(int argc, char **argv) { unsigned char cmd_prog[4] = {0xAC, 0x53, 0x00, 0x00}; unsigned char cmd_id0[4] = {0x30, 0x00, 0x00, 0x00}; unsigned char cmd_id1[4] = {0x30, 0x00, 0x01, 0x00}; unsigned char cmd_id2[4] = {0x30, 0x00, 0x02, 0x00}; unsigned char rx[4]; SPI_CONFIG spiConfig = {CS, SCLK, MOSI, MISO, SPI_SPOL0, SPI_CPOL0, SPI_CPHA0}; //{0,TSETTLE},{0,THOLD},{0,TFREQ}}; int i; unsigned char id[3]; /* Init */ //printf("init\n"); TRACE_OUTS("init"); TRACE_NL(); //gpio_init(); done by spi_init() spi_init(&spiConfig); /* Enter programming mode */ //printf("select\n"); TRACE_OUTS("select"); TRACE_NL(); spi_select(); spi_frame(cmd_prog, NULL, 4); /* Get ID bytes */ //printf("read ID bytes\n"); TRACE_OUTS("read ID bytes"); TRACE_NL(); spi_frame(cmd_id0, rx, 4); id[0] = rx[3]; spi_frame(cmd_id1, rx, 4); id[1] = rx[3]; spi_frame(cmd_id2, rx, 4); id[2] = rx[3]; spi_deselect(); /* Show ID bytes */ //printf("ID: %02X %02X %02X\n", id[0], id[1], id[2]); TRACE_OUTS("ID: "); for (int i=0; i<3; i++) { TRACE_OUTN(id[0]); TRACE_OUTC(' '); } TRACE_NL(); spi_finished(); return 0; } /***** END OF FILE *****/