diff --git a/src/energenie/drv/build_rpi b/src/energenie/drv/build_rpi index a796686..d717183 100755 --- a/src/energenie/drv/build_rpi +++ b/src/energenie/drv/build_rpi @@ -9,9 +9,9 @@ # build spis_test (soft SPI tester) -##gcc spi_test.c spis_rpi.c gpio_rpi.c -##mv a.out spis_test -##chmod u+x spis_test +gcc spi_test.c spis.c gpio_rpi.c delay_posix.c +mv a.out spis_test +chmod u+x spis_test # build spih_test (hard SPI tester) diff --git a/src/energenie/drv/spi_test.c b/src/energenie/drv/spi_test.c index 2962476..cef2dc1 100644 --- a/src/energenie/drv/spi_test.c +++ b/src/energenie/drv/spi_test.c @@ -1,9 +1,8 @@ /* 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. + * Written to do something vaguely useful on the HRFM69 module + * (i.e. read out the version number) */ @@ -19,79 +18,62 @@ /***** CONSTANTS *****/ -/* GPIO numbers on Raspberry Pi */ -#define CS 8 +/* GPIO BCM numbers on Raspberry Pi */ +#define RESET 25 +#define CS 7 #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 */ +//#define TSETTLE (1UL * 1000UL) /* us */ +//#define THOLD (1UL * 1000UL) /* us */ +//#define TFREQ (1UL * 1000UL) /* 1us = 1MHz */ + + +void reset(void) +{ + gpio_high(RESET); + delayms(150); + gpio_low(RESET); + delayus(100); +} + 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 cmd_readver[2] = {0x10, 0x00}; - unsigned char rx[4]; + unsigned char rx[2]; 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); + gpio_setout(RESET); + gpio_low(RESET); + reset(); + /* Read version number */ - /* Enter programming mode */ - - //printf("select\n"); - TRACE_OUTS("select"); + TRACE_OUTS("readver"); 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_frame(cmd_readver, rx, sizeof(cmd_readver)); 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_OUTS("ver="); + TRACE_OUTN(rx[1]); TRACE_NL(); + /* Cleanup */ + spi_finished(); + gpio_finished(); return 0; }