a test program for my SPI_IS25LQ032B library. please set local-echo on for the terminal program.

Dependencies:   SPI_IS25LQ032B mbed vt100

At start up the program show the list of available commands

起動すると、使用出来るコマンドの一覧が表示されます。

/media/uploads/Rhyme/000_is25_startup.jpg

To see the contents of the first 256 bytes of memory, type

dump 0x00

最初の256バイトを表示させるのには dump 0x00 と入力してください。

/media/uploads/Rhyme/001_is25_dump_0x00.jpg

Let's write a value 0xA5 to address 0x10

write 0x10 0xA5

Then see the result with

dump 0x00

先ず、アドレス 0x10 に 0xA5 を書き込みます。 write 0x10 0xA5

その結果を再度 dump 0x00 コマンドで表示させると

/media/uploads/Rhyme/002_is25_write_read_dump.jpg

To erase the entire memory, use command

cer

メモリ全体を初期化するのには cer コマンドを使用してください。

/media/uploads/Rhyme/003_is25_cer_dump.jpg

Committer:
Rhyme
Date:
Tue Mar 28 00:48:14 2017 +0000
Revision:
1:c92b1fb10573
Parent:
0:a9c975f17ca4
Child:
2:05ddb1d95e2a
quattro-II support added (not tested)

Who changed what in which revision?

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