Another short time hack. This one is for test the behavior of the spi module. Probably an Oscilloscope is required to check the wave.

Dependencies:   mbed

/media/uploads/Rhyme/test_spi.jpg

Another short time hack of mine. To check Mr. J's problem, I needed a way to control SPI in a short time. This is an aid for testing SPI module with an Oscilloscope.

You can specify, frequency, bits, mode and number of loops to let the spi write or read.

For FRDM-KL25Z MOSI: PTD2 MISO: PTD3 SCLK:PTD1

Please set "local echo on" in your terminal program.

某JさんのSPIトラブルの様子を確認するのに、作った簡単なSPIテストプログラムです。 オシロスコープでSPIの挙動を見るためのユティリティです。

FRDM-KL25Zの場合、MOSI(PTD2), MISO(PTD3), SCLK(PTD1) で使っています。

ターミナルプログラムのローカルエコーを有効にしてご使用ください。

SPIモジュールの設定(周波数、ビット、モード、そして読み書きのループ回数を設定できます。)

Committer:
Rhyme
Date:
Wed Jun 01 07:42:55 2016 +0000
Revision:
3:ec7a94b41102
Parent:
2:3d2009b507f5
MSS supported platforms added. Tested with FRDM-K64F with mbed lib 119

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 1:6fdc687abb43 1 /** Test Spi a quick and dirty spi test program
Rhyme 1:6fdc687abb43 2 */
Rhyme 1:6fdc687abb43 3
Rhyme 0:5fbf51aca95c 4 #include "mbed.h"
Rhyme 0:5fbf51aca95c 5 #include <string.h>
Rhyme 0:5fbf51aca95c 6 #include <stdio.h>
Rhyme 3:ec7a94b41102 7 #include "MSS.h"
Rhyme 0:5fbf51aca95c 8
Rhyme 3:ec7a94b41102 9 #if 0
Rhyme 0:5fbf51aca95c 10 #define PIN_MOSI PTD2
Rhyme 0:5fbf51aca95c 11 #define PIN_MISO PTD3
Rhyme 0:5fbf51aca95c 12 #define PIN_SCLK PTD1
Rhyme 0:5fbf51aca95c 13 #define PIN_CS_TSC PTA13
Rhyme 0:5fbf51aca95c 14 #define PIN_TSC_INTR PTC9
Rhyme 2:3d2009b507f5 15 #define PIN_MSS_CS PTD0
Rhyme 3:ec7a94b41102 16 #endif
Rhyme 0:5fbf51aca95c 17
Rhyme 0:5fbf51aca95c 18 int freq = 1000000 ;
Rhyme 0:5fbf51aca95c 19 int bits = 8 ;
Rhyme 0:5fbf51aca95c 20 int mode = 0 ;
Rhyme 0:5fbf51aca95c 21 int loop = 10 ;
Rhyme 0:5fbf51aca95c 22
Rhyme 3:ec7a94b41102 23 SPI mySpi(PIN_MOSI, PIN_MISO, PIN_SCK) ;
Rhyme 3:ec7a94b41102 24 DigitalOut cs(PIN_INT0, 1) ;
Rhyme 0:5fbf51aca95c 25
Rhyme 0:5fbf51aca95c 26 typedef void (*func_ptr)(void) ;
Rhyme 0:5fbf51aca95c 27
Rhyme 0:5fbf51aca95c 28 void doHelp(void) ;
Rhyme 0:5fbf51aca95c 29 void doStatus(void) ;
Rhyme 0:5fbf51aca95c 30 void doFreq(void) ;
Rhyme 0:5fbf51aca95c 31 void doMode(void) ;
Rhyme 0:5fbf51aca95c 32 void doBit(void) ;
Rhyme 0:5fbf51aca95c 33 void doWrite(void) ;
Rhyme 0:5fbf51aca95c 34 void doRead(void) ;
Rhyme 0:5fbf51aca95c 35 void doLoop(void) ;
Rhyme 0:5fbf51aca95c 36
Rhyme 0:5fbf51aca95c 37 typedef struct _cmd_func {
Rhyme 0:5fbf51aca95c 38 char *name ;
Rhyme 0:5fbf51aca95c 39 func_ptr func ;
Rhyme 0:5fbf51aca95c 40 } cmd_func_type ;
Rhyme 0:5fbf51aca95c 41
Rhyme 0:5fbf51aca95c 42 cmd_func_type cmd_list[] = {
Rhyme 0:5fbf51aca95c 43 {"help", doHelp},
Rhyme 0:5fbf51aca95c 44 {"status", doStatus},
Rhyme 0:5fbf51aca95c 45 {"freq", doFreq},
Rhyme 0:5fbf51aca95c 46 {"mode", doMode},
Rhyme 0:5fbf51aca95c 47 {"bit", doBit},
Rhyme 0:5fbf51aca95c 48 {"write", doWrite},
Rhyme 0:5fbf51aca95c 49 {"read", doRead},
Rhyme 0:5fbf51aca95c 50 {"loop", doLoop},
Rhyme 0:5fbf51aca95c 51 { 0, 0 }
Rhyme 0:5fbf51aca95c 52 } ;
Rhyme 0:5fbf51aca95c 53
Rhyme 0:5fbf51aca95c 54 func_ptr getFunc(char *cmd)
Rhyme 0:5fbf51aca95c 55 {
Rhyme 0:5fbf51aca95c 56 int i = 0 ;
Rhyme 0:5fbf51aca95c 57 while(cmd_list[i].name != 0) {
Rhyme 0:5fbf51aca95c 58 if (strcmp(cmd, cmd_list[i].name) == 0) {
Rhyme 0:5fbf51aca95c 59 return(cmd_list[i].func) ; ;
Rhyme 0:5fbf51aca95c 60 }
Rhyme 0:5fbf51aca95c 61 i++ ;
Rhyme 0:5fbf51aca95c 62 }
Rhyme 0:5fbf51aca95c 63 return(0) ;
Rhyme 0:5fbf51aca95c 64 }
Rhyme 0:5fbf51aca95c 65
Rhyme 0:5fbf51aca95c 66 void doHello()
Rhyme 0:5fbf51aca95c 67 {
Rhyme 0:5fbf51aca95c 68 printf("=== spi test program ===\n\r") ;
Rhyme 0:5fbf51aca95c 69 printf("please set your terminal program\n\r") ;
Rhyme 0:5fbf51aca95c 70 printf("local echo on\n\r") ;
Rhyme 0:5fbf51aca95c 71 printf("\n\r") ;
Rhyme 0:5fbf51aca95c 72 }
Rhyme 0:5fbf51aca95c 73
Rhyme 0:5fbf51aca95c 74 int main() {
Rhyme 0:5fbf51aca95c 75 char cmd[32] ;
Rhyme 0:5fbf51aca95c 76 func_ptr func ;
Rhyme 0:5fbf51aca95c 77 doHello() ;
Rhyme 0:5fbf51aca95c 78 while(1) {
Rhyme 0:5fbf51aca95c 79 printf("> ") ;
Rhyme 0:5fbf51aca95c 80 scanf("%s", cmd) ;
Rhyme 0:5fbf51aca95c 81 if ((func = getFunc(cmd)) != 0) {
Rhyme 0:5fbf51aca95c 82 (*func)() ;
Rhyme 0:5fbf51aca95c 83 } else {
Rhyme 0:5fbf51aca95c 84 doHelp() ;
Rhyme 0:5fbf51aca95c 85 }
Rhyme 0:5fbf51aca95c 86 printf("\n\r") ;
Rhyme 0:5fbf51aca95c 87 }
Rhyme 0:5fbf51aca95c 88 }
Rhyme 0:5fbf51aca95c 89
Rhyme 0:5fbf51aca95c 90 void doHelp(void)
Rhyme 0:5fbf51aca95c 91 {
Rhyme 0:5fbf51aca95c 92 printf("=== spi test ===\n\r") ;
Rhyme 0:5fbf51aca95c 93 printf("commands available\n\r") ;
Rhyme 0:5fbf51aca95c 94 printf("help\n\r") ;
Rhyme 0:5fbf51aca95c 95 printf("status\n\r") ;
Rhyme 0:5fbf51aca95c 96 printf("freq freq_in_hz\n\r") ;
Rhyme 0:5fbf51aca95c 97 printf("mode (0 | 1 | 2 | 3)\n\r") ;
Rhyme 0:5fbf51aca95c 98 printf("bit (4 - 16)\n\r") ;
Rhyme 0:5fbf51aca95c 99 printf("write value\n\r") ;
Rhyme 0:5fbf51aca95c 100 printf("read\n\r") ;
Rhyme 0:5fbf51aca95c 101 printf("loop number (set repeat number for read/write)\n\r") ;
Rhyme 0:5fbf51aca95c 102 }
Rhyme 0:5fbf51aca95c 103
Rhyme 0:5fbf51aca95c 104 void doStatus(void)
Rhyme 0:5fbf51aca95c 105 {
Rhyme 0:5fbf51aca95c 106 printf("=== Status Report ===\n\r") ;
Rhyme 0:5fbf51aca95c 107 printf("bits: %d\n\r", bits) ;
Rhyme 0:5fbf51aca95c 108 printf("mode: %d\n\r", mode) ;
Rhyme 0:5fbf51aca95c 109 printf("freq: %d Hz\n\r", freq) ;
Rhyme 0:5fbf51aca95c 110 printf("loop: %d\n\r", loop) ;
Rhyme 0:5fbf51aca95c 111 }
Rhyme 0:5fbf51aca95c 112
Rhyme 0:5fbf51aca95c 113 void doFreq(void)
Rhyme 0:5fbf51aca95c 114 {
Rhyme 0:5fbf51aca95c 115 int freq = 0 ;
Rhyme 0:5fbf51aca95c 116 scanf("%d", &freq) ;
Rhyme 0:5fbf51aca95c 117 printf("setting frequency to %d\n\r", freq) ;
Rhyme 0:5fbf51aca95c 118 mySpi.frequency(freq) ;
Rhyme 0:5fbf51aca95c 119 }
Rhyme 0:5fbf51aca95c 120
Rhyme 0:5fbf51aca95c 121 void doMode(void)
Rhyme 0:5fbf51aca95c 122 {
Rhyme 0:5fbf51aca95c 123 scanf("%d", &mode) ;
Rhyme 0:5fbf51aca95c 124 printf("setting format(%d, %d)\n\r",bits, mode) ;
Rhyme 0:5fbf51aca95c 125 mySpi.format(bits, mode) ;
Rhyme 0:5fbf51aca95c 126 }
Rhyme 0:5fbf51aca95c 127
Rhyme 0:5fbf51aca95c 128 void doBit(void)
Rhyme 0:5fbf51aca95c 129 {
Rhyme 0:5fbf51aca95c 130 scanf("%d", &bits) ;
Rhyme 0:5fbf51aca95c 131 printf("setting format(%d, %d)\n\r",bits, mode) ;
Rhyme 0:5fbf51aca95c 132 mySpi.format(bits, mode) ;
Rhyme 0:5fbf51aca95c 133 }
Rhyme 0:5fbf51aca95c 134
Rhyme 0:5fbf51aca95c 135 void doWrite(void)
Rhyme 0:5fbf51aca95c 136 {
Rhyme 0:5fbf51aca95c 137 int value, i ;
Rhyme 2:3d2009b507f5 138 scanf("%X", &value) ;
Rhyme 2:3d2009b507f5 139 printf("writing value 0x%X (%d) \n\r",value, value) ;
Rhyme 2:3d2009b507f5 140 cs = 0 ;
Rhyme 0:5fbf51aca95c 141 for (i = 0 ; i < loop ; i++ ) {
Rhyme 0:5fbf51aca95c 142 mySpi.write(value) ;
Rhyme 0:5fbf51aca95c 143 }
Rhyme 2:3d2009b507f5 144 cs = 1 ;
Rhyme 0:5fbf51aca95c 145 }
Rhyme 0:5fbf51aca95c 146
Rhyme 0:5fbf51aca95c 147 void doRead(void)
Rhyme 0:5fbf51aca95c 148 {
Rhyme 0:5fbf51aca95c 149 int dummy = 0 ;
Rhyme 0:5fbf51aca95c 150 int i ;
Rhyme 0:5fbf51aca95c 151 int value = 0 ;
Rhyme 2:3d2009b507f5 152 cs = 0 ;
Rhyme 0:5fbf51aca95c 153 for (i = 0 ; i < loop ; i++ ) {
Rhyme 0:5fbf51aca95c 154 value = mySpi.write(dummy) ;
Rhyme 0:5fbf51aca95c 155 }
Rhyme 2:3d2009b507f5 156 cs = 1 ;
Rhyme 0:5fbf51aca95c 157 printf("%d\n", value) ;
Rhyme 0:5fbf51aca95c 158 }
Rhyme 0:5fbf51aca95c 159
Rhyme 0:5fbf51aca95c 160 void doLoop(void)
Rhyme 0:5fbf51aca95c 161 {
Rhyme 0:5fbf51aca95c 162 scanf("%d", &loop) ;
Rhyme 0:5fbf51aca95c 163 printf("repeat number has been set to %d\n\r", loop) ;
Rhyme 0:5fbf51aca95c 164 }