This is a simple terminal used for send and receive data via SPI (p5, p6, p7). It use the usb as serial (9600bps) interface port.

Dependencies:   mbed

Commands:

# All the numeric constants MUST be in Hexadecimal #

  • C[level] - Change the [level] of the CS line (p8)
  • D[data] - Send single byte of [data]
  • M[data],[data], .. ,[data] - Send multiple bytes of [data]
  • F[data],[size] - Send a flow sized [size] of [data] bytes
  • R[size] - Receive [size] bytes

Examples

  • C0 - Put the CS at logic level 0
  • C1 - Put the CS at logic level 1
  • Dab - Send out the byte 0xab
  • M55,aa,01,ab,cd - Send out the bytes 0x55, 0xaa, 0x01, 0xab, 0xcd
  • Fff,05 - Send out 5 bytes of value 0xff
  • R10 - Receive 16 bytes
Committer:
trombettamichele
Date:
Mon May 19 18:45:27 2014 +0000
Revision:
0:7beba59b8a7d
Simple SPI Terminal

Who changed what in which revision?

UserRevisionLine numberNew contents of line
trombettamichele 0:7beba59b8a7d 1 #include "mbed.h"
trombettamichele 0:7beba59b8a7d 2 #include <string.h>
trombettamichele 0:7beba59b8a7d 3 #include <stdlib.h>
trombettamichele 0:7beba59b8a7d 4
trombettamichele 0:7beba59b8a7d 5 /* Commands:
trombettamichele 0:7beba59b8a7d 6 Dd - Data out
trombettamichele 0:7beba59b8a7d 7 Cx - CS line state (0/1)
trombettamichele 0:7beba59b8a7d 8 Fd,l - Data flow out, the total size is l
trombettamichele 0:7beba59b8a7d 9 Rl - Receive data, l is the size
trombettamichele 0:7beba59b8a7d 10 Md,d.. - Multiple data write
trombettamichele 0:7beba59b8a7d 11 */
trombettamichele 0:7beba59b8a7d 12
trombettamichele 0:7beba59b8a7d 13 DigitalOut myled(LED1);
trombettamichele 0:7beba59b8a7d 14
trombettamichele 0:7beba59b8a7d 15 SPI spi_device(p5, p6, p7);
trombettamichele 0:7beba59b8a7d 16 DigitalOut spi_cs(p8);
trombettamichele 0:7beba59b8a7d 17
trombettamichele 0:7beba59b8a7d 18 Serial tty_usb(USBTX, USBRX);
trombettamichele 0:7beba59b8a7d 19 char tty_buffer[0x100];
trombettamichele 0:7beba59b8a7d 20
trombettamichele 0:7beba59b8a7d 21 void receive_command() {
trombettamichele 0:7beba59b8a7d 22 uint8_t buffer_ptr = 0;
trombettamichele 0:7beba59b8a7d 23 char ch;
trombettamichele 0:7beba59b8a7d 24
trombettamichele 0:7beba59b8a7d 25 tty_usb.putc('>');
trombettamichele 0:7beba59b8a7d 26 while (1) {
trombettamichele 0:7beba59b8a7d 27 if (tty_usb.readable()) {
trombettamichele 0:7beba59b8a7d 28 ch = tty_usb.getc();
trombettamichele 0:7beba59b8a7d 29 tty_usb.putc(ch);
trombettamichele 0:7beba59b8a7d 30
trombettamichele 0:7beba59b8a7d 31 tty_buffer[buffer_ptr] = ch;
trombettamichele 0:7beba59b8a7d 32 buffer_ptr++;
trombettamichele 0:7beba59b8a7d 33 if ((ch == '\n') || (ch == '\r')) {
trombettamichele 0:7beba59b8a7d 34 tty_usb.putc('\n');
trombettamichele 0:7beba59b8a7d 35 tty_usb.putc('\r');
trombettamichele 0:7beba59b8a7d 36 break;
trombettamichele 0:7beba59b8a7d 37 }
trombettamichele 0:7beba59b8a7d 38 if (ch == 0x7f) {
trombettamichele 0:7beba59b8a7d 39 buffer_ptr -= 2;
trombettamichele 0:7beba59b8a7d 40 tty_usb.putc(0x8);
trombettamichele 0:7beba59b8a7d 41 tty_usb.putc(' ');
trombettamichele 0:7beba59b8a7d 42 tty_usb.putc(0x8);
trombettamichele 0:7beba59b8a7d 43 }
trombettamichele 0:7beba59b8a7d 44 }
trombettamichele 0:7beba59b8a7d 45 }
trombettamichele 0:7beba59b8a7d 46 }
trombettamichele 0:7beba59b8a7d 47
trombettamichele 0:7beba59b8a7d 48 int main() {
trombettamichele 0:7beba59b8a7d 49 uint8_t arg_data, arg_data_in;
trombettamichele 0:7beba59b8a7d 50 uint16_t arg_size;
trombettamichele 0:7beba59b8a7d 51 char *arg_ptr;
trombettamichele 0:7beba59b8a7d 52
trombettamichele 0:7beba59b8a7d 53 tty_usb.baud(9600);
trombettamichele 0:7beba59b8a7d 54
trombettamichele 0:7beba59b8a7d 55 while(1) {
trombettamichele 0:7beba59b8a7d 56
trombettamichele 0:7beba59b8a7d 57 receive_command();
trombettamichele 0:7beba59b8a7d 58 switch (tty_buffer[0]) {
trombettamichele 0:7beba59b8a7d 59 case 'D':
trombettamichele 0:7beba59b8a7d 60 case 'd':
trombettamichele 0:7beba59b8a7d 61 arg_data = strtol(&tty_buffer[1], NULL, 16);
trombettamichele 0:7beba59b8a7d 62 arg_data_in = spi_device.write(arg_data);
trombettamichele 0:7beba59b8a7d 63 tty_usb.printf("#\tSingle data: OUT: $%02X - IN: $%02X\n\r", arg_data, arg_data_in);
trombettamichele 0:7beba59b8a7d 64 break;
trombettamichele 0:7beba59b8a7d 65 case 'C':
trombettamichele 0:7beba59b8a7d 66 case 'c':
trombettamichele 0:7beba59b8a7d 67 spi_cs = (tty_buffer[1] == '0') ? 0 : 1;
trombettamichele 0:7beba59b8a7d 68 break;
trombettamichele 0:7beba59b8a7d 69 case 'R':
trombettamichele 0:7beba59b8a7d 70 case 'r':
trombettamichele 0:7beba59b8a7d 71 arg_size = strtol(&tty_buffer[1], NULL, 16);
trombettamichele 0:7beba59b8a7d 72 for (int i = 0; i < arg_size; i++)
trombettamichele 0:7beba59b8a7d 73 tty_usb.printf("#\tReceived data [$%04X]: $%02X\n\r", i, spi_device.write(0x00));
trombettamichele 0:7beba59b8a7d 74 break;
trombettamichele 0:7beba59b8a7d 75
trombettamichele 0:7beba59b8a7d 76 case 'F':
trombettamichele 0:7beba59b8a7d 77 case 'f':
trombettamichele 0:7beba59b8a7d 78 arg_size = strtol(strchr(tty_buffer, ',')+1, NULL, 16);
trombettamichele 0:7beba59b8a7d 79 *(strchr(tty_buffer, ',') + 1) = 0x00;
trombettamichele 0:7beba59b8a7d 80 arg_data = strtol(&tty_buffer[1], NULL, 16);
trombettamichele 0:7beba59b8a7d 81
trombettamichele 0:7beba59b8a7d 82 for (int i = 0; i < arg_size; i++) {
trombettamichele 0:7beba59b8a7d 83 arg_data_in = spi_device.write(arg_data);
trombettamichele 0:7beba59b8a7d 84 tty_usb.printf("#\tFlow data [$%04X]: OUT: $%02X - IN: $%02X\n\r", i, arg_data, arg_data_in);
trombettamichele 0:7beba59b8a7d 85
trombettamichele 0:7beba59b8a7d 86 }
trombettamichele 0:7beba59b8a7d 87 break;
trombettamichele 0:7beba59b8a7d 88
trombettamichele 0:7beba59b8a7d 89 case 'M':
trombettamichele 0:7beba59b8a7d 90 case 'm':
trombettamichele 0:7beba59b8a7d 91 arg_ptr = strtok(&tty_buffer[1], ",\n\r");
trombettamichele 0:7beba59b8a7d 92 arg_size = 0;
trombettamichele 0:7beba59b8a7d 93 while (arg_ptr != NULL) {
trombettamichele 0:7beba59b8a7d 94 arg_data = strtol(arg_ptr, NULL, 16);
trombettamichele 0:7beba59b8a7d 95 arg_data_in = spi_device.write(arg_data);
trombettamichele 0:7beba59b8a7d 96 tty_usb.printf("#\tMultiple data [$%04X]: OUT: $%02X - IN: $%02X\n\r", arg_size, arg_data, arg_data_in);
trombettamichele 0:7beba59b8a7d 97 arg_ptr = strtok(NULL, ",\n\r");
trombettamichele 0:7beba59b8a7d 98 arg_size++;
trombettamichele 0:7beba59b8a7d 99 }
trombettamichele 0:7beba59b8a7d 100 break;
trombettamichele 0:7beba59b8a7d 101
trombettamichele 0:7beba59b8a7d 102 }
trombettamichele 0:7beba59b8a7d 103 }
trombettamichele 0:7beba59b8a7d 104 }