Motoo Tanaka / Mbed 2 deprecated testSPI_M25PE20

Dependencies:   SPI_M25PE20 mbed

Committer:
Rhyme
Date:
Thu Dec 25 04:44:02 2014 +0000
Revision:
0:08c20170ad75
commit before publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:08c20170ad75 1 #include <ctype.h>
Rhyme 0:08c20170ad75 2 #include "mbed.h"
Rhyme 0:08c20170ad75 3 #include "serial_api.h"
Rhyme 0:08c20170ad75 4 #include "SPI_M25PE20.h"
Rhyme 0:08c20170ad75 5
Rhyme 0:08c20170ad75 6 // SPI_M25PE20(PinName mosi, PinName miso, PinName sclk, PinName cs) ;
Rhyme 0:08c20170ad75 7 // FRDM_KL25Z
Rhyme 0:08c20170ad75 8 // D13 SPI0_SCK (PTD1)
Rhyme 0:08c20170ad75 9 // D12 SPI0_MISO (PTD3)
Rhyme 0:08c20170ad75 10 // D11 SPI0_MOSI (PTD2)
Rhyme 0:08c20170ad75 11 // D10 SPI0_PCS0 (PTD0)
Rhyme 0:08c20170ad75 12 SPI_M25PE20 spi_mem(PTD2, PTD3, PTD1, PTD0) ;
Rhyme 0:08c20170ad75 13
Rhyme 0:08c20170ad75 14 void usage(void)
Rhyme 0:08c20170ad75 15 {
Rhyme 0:08c20170ad75 16 printf("=== commands ===\n\r") ;
Rhyme 0:08c20170ad75 17 printf("read address (ex: read 0x0000)\n\r") ;
Rhyme 0:08c20170ad75 18 printf("dump address (ex: dump 0x2000)\n\r") ;
Rhyme 0:08c20170ad75 19 printf("rdsr (read status register)\n\r") ;
Rhyme 0:08c20170ad75 20 printf("wren (write enable)\n\r") ;
Rhyme 0:08c20170ad75 21 printf("wrdi (write disable)\n\r") ;
Rhyme 0:08c20170ad75 22 printf("write address value (program a 8bit data to the address)\n\r") ;
Rhyme 0:08c20170ad75 23 printf("pp address (program page: ex pp 0x00)\n\r") ;
Rhyme 0:08c20170ad75 24 printf("pe (page erase)\n\r") ;
Rhyme 0:08c20170ad75 25 printf("se (sector erase)\n\r") ;
Rhyme 0:08c20170ad75 26 printf("\n\r") ;
Rhyme 0:08c20170ad75 27 }
Rhyme 0:08c20170ad75 28
Rhyme 0:08c20170ad75 29 void dump(unsigned long address)
Rhyme 0:08c20170ad75 30 {
Rhyme 0:08c20170ad75 31 unsigned int i, j ;
Rhyme 0:08c20170ad75 32 unsigned char data[0x10] ;
Rhyme 0:08c20170ad75 33
Rhyme 0:08c20170ad75 34 printf(" : ") ;
Rhyme 0:08c20170ad75 35 for (i = 0 ; i < 0x10 ; i++ ) {
Rhyme 0:08c20170ad75 36 printf("+%X ",i) ;
Rhyme 0:08c20170ad75 37 }
Rhyme 0:08c20170ad75 38 printf("\n\r") ;
Rhyme 0:08c20170ad75 39 for (j = 0 ; j < 0x10 ; j++ ) {
Rhyme 0:08c20170ad75 40 printf("%06X : ", address + (0x10 * j)) ;
Rhyme 0:08c20170ad75 41 for (i = 0 ; i < 0x10 ; i++ ) {
Rhyme 0:08c20170ad75 42 data[i] = spi_mem.read8(address + 0x10 * j + i) ;
Rhyme 0:08c20170ad75 43 printf("%02X ", data[i]) ;
Rhyme 0:08c20170ad75 44 }
Rhyme 0:08c20170ad75 45 printf(": ") ;
Rhyme 0:08c20170ad75 46 for (i = 0 ; i < 0x10 ; i++ ) {
Rhyme 0:08c20170ad75 47 if (isprint(data[i])) {
Rhyme 0:08c20170ad75 48 printf("%c", data[i]) ;
Rhyme 0:08c20170ad75 49 } else {
Rhyme 0:08c20170ad75 50 printf(".") ;
Rhyme 0:08c20170ad75 51 }
Rhyme 0:08c20170ad75 52 }
Rhyme 0:08c20170ad75 53 printf(" :\n\r") ;
Rhyme 0:08c20170ad75 54 }
Rhyme 0:08c20170ad75 55 printf("\n\r") ;
Rhyme 0:08c20170ad75 56 }
Rhyme 0:08c20170ad75 57
Rhyme 0:08c20170ad75 58 int main() {
Rhyme 0:08c20170ad75 59 char cmd[32] ;
Rhyme 0:08c20170ad75 60 int tmp = 0 ;
Rhyme 0:08c20170ad75 61 int i ;
Rhyme 0:08c20170ad75 62 int numData = 256 ;
Rhyme 0:08c20170ad75 63 unsigned long address = 0 ;
Rhyme 0:08c20170ad75 64 unsigned char data[256] ;
Rhyme 0:08c20170ad75 65
Rhyme 0:08c20170ad75 66 extern serial_t stdio_uart ;
Rhyme 0:08c20170ad75 67 serial_baud(&stdio_uart, 115200) ;
Rhyme 0:08c20170ad75 68
Rhyme 0:08c20170ad75 69 printf("\n\r============================\n\r") ;
Rhyme 0:08c20170ad75 70 printf("M25PE20 test program\n\r") ;
Rhyme 0:08c20170ad75 71 printf("please enable local echo\n\r") ;
Rhyme 0:08c20170ad75 72 printf("============================\n\r") ;
Rhyme 0:08c20170ad75 73 printf("\n\r") ;
Rhyme 0:08c20170ad75 74 usage() ;
Rhyme 0:08c20170ad75 75
Rhyme 0:08c20170ad75 76 while(1) {
Rhyme 0:08c20170ad75 77 printf("> ") ;
Rhyme 0:08c20170ad75 78 scanf("%s", cmd) ;
Rhyme 0:08c20170ad75 79 if (strcmp(cmd, "read") == 0) {
Rhyme 0:08c20170ad75 80 scanf("%X", &address) ;
Rhyme 0:08c20170ad75 81 data[0] = spi_mem.read8(address) ;
Rhyme 0:08c20170ad75 82 printf("%08X : 0x%02X\n\r", address, data[0]) ;
Rhyme 0:08c20170ad75 83 } else if (strcmp(cmd, "rdsr") == 0) { // read status
Rhyme 0:08c20170ad75 84 data[0] = spi_mem.readStatus() ;
Rhyme 0:08c20170ad75 85 printf("status register = 0x%02X\n\r", data[0]) ;
Rhyme 0:08c20170ad75 86 } else if (strcmp(cmd, "wren") == 0) { // write enable
Rhyme 0:08c20170ad75 87 spi_mem.writeEnable() ;
Rhyme 0:08c20170ad75 88 printf("done\n\r") ;
Rhyme 0:08c20170ad75 89 } else if (strcmp(cmd, "wrdi") == 0) { // write disable
Rhyme 0:08c20170ad75 90 spi_mem.writeDisable() ;
Rhyme 0:08c20170ad75 91 printf("done\n\r") ;
Rhyme 0:08c20170ad75 92 } else if (strcmp(cmd, "write") == 0) { // write a byte
Rhyme 0:08c20170ad75 93 scanf("%X", &address) ;
Rhyme 0:08c20170ad75 94 scanf("%X", &tmp) ;
Rhyme 0:08c20170ad75 95 data[0] = tmp & 0xFF ;
Rhyme 0:08c20170ad75 96 printf("mem[0x%06X] <= 0x%02X\n\r",address, data[0]) ;
Rhyme 0:08c20170ad75 97 spi_mem.writeEnable() ;
Rhyme 0:08c20170ad75 98 spi_mem.programPage(address, data, 1) ;
Rhyme 0:08c20170ad75 99 printf("done\n\r") ;
Rhyme 0:08c20170ad75 100 } else if (strcmp(cmd, "pp") == 0) { // program page
Rhyme 0:08c20170ad75 101 scanf("%X", &address) ;
Rhyme 0:08c20170ad75 102 printf("writing %d bytes to 0x%X\n\r",numData, address) ;
Rhyme 0:08c20170ad75 103 spi_mem.writeEnable() ;
Rhyme 0:08c20170ad75 104 for (i = 0 ; i < numData ; i++ ) {
Rhyme 0:08c20170ad75 105 data[i] = i & 0xFF ;
Rhyme 0:08c20170ad75 106 }
Rhyme 0:08c20170ad75 107 spi_mem.programPage(address, data, numData) ;
Rhyme 0:08c20170ad75 108 data[0] = 0 ;
Rhyme 0:08c20170ad75 109 while((data[0] & 0x01) != 0x01 ) {
Rhyme 0:08c20170ad75 110 printf(".") ;
Rhyme 0:08c20170ad75 111 data[0] = spi_mem.readStatus() ;
Rhyme 0:08c20170ad75 112 wait(0.01) ;
Rhyme 0:08c20170ad75 113 }
Rhyme 0:08c20170ad75 114 printf("\n\r") ;
Rhyme 0:08c20170ad75 115 } else if (strcmp(cmd, "pe") == 0) {
Rhyme 0:08c20170ad75 116 spi_mem.writeEnable() ;
Rhyme 0:08c20170ad75 117 scanf("%X", &address) ;
Rhyme 0:08c20170ad75 118 spi_mem.pageErase(address) ;
Rhyme 0:08c20170ad75 119 } else if (strcmp(cmd, "se") == 0) {
Rhyme 0:08c20170ad75 120 spi_mem.writeEnable() ;
Rhyme 0:08c20170ad75 121 scanf("%X", &address) ;
Rhyme 0:08c20170ad75 122 spi_mem.sectorErase(address) ;
Rhyme 0:08c20170ad75 123 } else if (strcmp(cmd, "dump") == 0) {
Rhyme 0:08c20170ad75 124 scanf("%X", &address) ;
Rhyme 0:08c20170ad75 125 dump(address) ;
Rhyme 0:08c20170ad75 126 } else if (strcmp(cmd, "help") == 0) {
Rhyme 0:08c20170ad75 127 usage() ;
Rhyme 0:08c20170ad75 128 } else {
Rhyme 0:08c20170ad75 129 printf("Unknown command [ %s ]\n\r", cmd) ;
Rhyme 0:08c20170ad75 130 usage() ;
Rhyme 0:08c20170ad75 131 }
Rhyme 0:08c20170ad75 132 }
Rhyme 0:08c20170ad75 133 }