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:
Thu Dec 25 00:48:33 2014 +0000
Revision:
0:a9c975f17ca4
Child:
1:c92b1fb10573
commit before publish

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