Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: SPI_M25PE20 mbed
main.cpp@0:08c20170ad75, 2014-12-25 (annotated)
- Committer:
- Rhyme
- Date:
- Thu Dec 25 04:44:02 2014 +0000
- Revision:
- 0:08c20170ad75
commit before publish
Who changed what in which revision?
| User | Revision | Line number | New 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 | } |