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:
Mon May 16 06:28:42 2016 +0000
Revision:
2:3d2009b507f5
Parent:
1:6fdc687abb43
Child:
3:ec7a94b41102
Chip select (D10) added

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