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.
Fork of SPIRAM_23LC1024 by
main.cpp@1:a7b1803dfa44, 2012-11-09 (annotated)
- Committer:
- okini3939
- Date:
- Fri Nov 09 06:23:54 2012 +0000
- Revision:
- 1:a7b1803dfa44
- Parent:
- 0:c5ba7d914282
- Child:
- 2:a3e0f7f37ac9
fix
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| okini3939 | 0:c5ba7d914282 | 1 | /* |
| okini3939 | 0:c5ba7d914282 | 2 | * SPI RAM 23LC1024 (Microchip) |
| okini3939 | 1:a7b1803dfa44 | 3 | * 1Mbit |
| okini3939 | 0:c5ba7d914282 | 4 | */ |
| okini3939 | 0:c5ba7d914282 | 5 | #include "mbed.h" |
| okini3939 | 0:c5ba7d914282 | 6 | |
| okini3939 | 0:c5ba7d914282 | 7 | #define CMD_READ 0x03 |
| okini3939 | 0:c5ba7d914282 | 8 | #define CMD_WRITE 0x02 |
| okini3939 | 0:c5ba7d914282 | 9 | #define CMD_RDMR 0x05 |
| okini3939 | 0:c5ba7d914282 | 10 | #define CMD_WRMR 0x01 |
| okini3939 | 0:c5ba7d914282 | 11 | |
| okini3939 | 0:c5ba7d914282 | 12 | DigitalOut myled(LED1); |
| okini3939 | 0:c5ba7d914282 | 13 | Serial pc(USBTX, USBRX); |
| okini3939 | 0:c5ba7d914282 | 14 | |
| okini3939 | 0:c5ba7d914282 | 15 | SPI spi(p11, p12, p13); // mosi, miso, sclk |
| okini3939 | 1:a7b1803dfa44 | 16 | DigitalOut cs(p17), hold(p18); |
| okini3939 | 0:c5ba7d914282 | 17 | |
| okini3939 | 0:c5ba7d914282 | 18 | int ram_write (int addr, char *buf, int len) { |
| okini3939 | 0:c5ba7d914282 | 19 | int i; |
| okini3939 | 0:c5ba7d914282 | 20 | |
| okini3939 | 0:c5ba7d914282 | 21 | cs = 0; |
| okini3939 | 0:c5ba7d914282 | 22 | spi.write(CMD_WRITE); |
| okini3939 | 0:c5ba7d914282 | 23 | spi.write((addr >> 16) & 0xff); |
| okini3939 | 0:c5ba7d914282 | 24 | spi.write((addr >> 8) & 0xff); |
| okini3939 | 0:c5ba7d914282 | 25 | spi.write(addr & 0xff); |
| okini3939 | 0:c5ba7d914282 | 26 | |
| okini3939 | 0:c5ba7d914282 | 27 | for (i = 0; i < len; i ++) { |
| okini3939 | 0:c5ba7d914282 | 28 | spi.write(buf[i]); |
| okini3939 | 0:c5ba7d914282 | 29 | } |
| okini3939 | 0:c5ba7d914282 | 30 | cs = 1; |
| okini3939 | 0:c5ba7d914282 | 31 | return i; |
| okini3939 | 0:c5ba7d914282 | 32 | } |
| okini3939 | 0:c5ba7d914282 | 33 | |
| okini3939 | 0:c5ba7d914282 | 34 | int ram_read (int addr, char *buf, int len) { |
| okini3939 | 0:c5ba7d914282 | 35 | int i; |
| okini3939 | 0:c5ba7d914282 | 36 | |
| okini3939 | 0:c5ba7d914282 | 37 | cs = 0; |
| okini3939 | 0:c5ba7d914282 | 38 | spi.write(CMD_READ); |
| okini3939 | 0:c5ba7d914282 | 39 | spi.write((addr >> 16) & 0xff); |
| okini3939 | 0:c5ba7d914282 | 40 | spi.write((addr >> 8) & 0xff); |
| okini3939 | 0:c5ba7d914282 | 41 | spi.write(addr & 0xff); |
| okini3939 | 0:c5ba7d914282 | 42 | |
| okini3939 | 0:c5ba7d914282 | 43 | for (i = 0; i < len; i ++) { |
| okini3939 | 0:c5ba7d914282 | 44 | buf[i] = spi.write(0); |
| okini3939 | 0:c5ba7d914282 | 45 | } |
| okini3939 | 0:c5ba7d914282 | 46 | cs = 1; |
| okini3939 | 0:c5ba7d914282 | 47 | return i; |
| okini3939 | 0:c5ba7d914282 | 48 | } |
| okini3939 | 0:c5ba7d914282 | 49 | |
| okini3939 | 0:c5ba7d914282 | 50 | int main() { |
| okini3939 | 0:c5ba7d914282 | 51 | int i; |
| okini3939 | 0:c5ba7d914282 | 52 | char buf[256]; |
| okini3939 | 1:a7b1803dfa44 | 53 | Timer t; |
| okini3939 | 0:c5ba7d914282 | 54 | |
| okini3939 | 0:c5ba7d914282 | 55 | cs = 1; |
| okini3939 | 1:a7b1803dfa44 | 56 | hold = 1; |
| okini3939 | 0:c5ba7d914282 | 57 | pc.baud(115200); |
| okini3939 | 1:a7b1803dfa44 | 58 | spi.frequency(16000000); |
| okini3939 | 0:c5ba7d914282 | 59 | wait_ms(500); |
| okini3939 | 0:c5ba7d914282 | 60 | |
| okini3939 | 0:c5ba7d914282 | 61 | cs = 0; |
| okini3939 | 0:c5ba7d914282 | 62 | spi.write(CMD_RDMR); |
| okini3939 | 0:c5ba7d914282 | 63 | printf("RAM mode: %02x\r\n", spi.write(0)); |
| okini3939 | 0:c5ba7d914282 | 64 | cs = 1; |
| okini3939 | 0:c5ba7d914282 | 65 | |
| okini3939 | 1:a7b1803dfa44 | 66 | printf("\r\nHELLO test\r\n"); |
| okini3939 | 1:a7b1803dfa44 | 67 | |
| okini3939 | 0:c5ba7d914282 | 68 | printf("RAM write\r\n"); |
| okini3939 | 0:c5ba7d914282 | 69 | strcpy(buf, "Hello!"); |
| okini3939 | 0:c5ba7d914282 | 70 | ram_write(0, buf, 6); |
| okini3939 | 0:c5ba7d914282 | 71 | |
| okini3939 | 0:c5ba7d914282 | 72 | for (i = 0; i < 256; i ++) { |
| okini3939 | 0:c5ba7d914282 | 73 | buf[i] = i; |
| okini3939 | 0:c5ba7d914282 | 74 | } |
| okini3939 | 0:c5ba7d914282 | 75 | ram_write(6, buf, 256); |
| okini3939 | 0:c5ba7d914282 | 76 | |
| okini3939 | 1:a7b1803dfa44 | 77 | wait(1); |
| okini3939 | 0:c5ba7d914282 | 78 | memset(buf, 0, 256); |
| okini3939 | 0:c5ba7d914282 | 79 | |
| okini3939 | 0:c5ba7d914282 | 80 | printf("RAM read\r\n"); |
| okini3939 | 0:c5ba7d914282 | 81 | ram_read(0, buf, 256); |
| okini3939 | 0:c5ba7d914282 | 82 | for (i = 0; i < 256; i ++) { |
| okini3939 | 0:c5ba7d914282 | 83 | printf(" %02x", buf[i]); |
| okini3939 | 0:c5ba7d914282 | 84 | if ((i & 0x0f) == 0x0f) |
| okini3939 | 0:c5ba7d914282 | 85 | printf("\r\n"); |
| okini3939 | 0:c5ba7d914282 | 86 | } |
| okini3939 | 0:c5ba7d914282 | 87 | |
| okini3939 | 1:a7b1803dfa44 | 88 | wait(1); |
| okini3939 | 1:a7b1803dfa44 | 89 | |
| okini3939 | 1:a7b1803dfa44 | 90 | printf("\r\nWrite/Read time\r\n"); |
| okini3939 | 1:a7b1803dfa44 | 91 | |
| okini3939 | 1:a7b1803dfa44 | 92 | printf("RAM write\r\n"); |
| okini3939 | 1:a7b1803dfa44 | 93 | t.reset(); |
| okini3939 | 1:a7b1803dfa44 | 94 | t.start(); |
| okini3939 | 1:a7b1803dfa44 | 95 | for (i = 0; i < 0x20000; i += 256) { |
| okini3939 | 1:a7b1803dfa44 | 96 | buf[0] = (i >> 8) & 0xff; |
| okini3939 | 1:a7b1803dfa44 | 97 | ram_write(i, buf, 256); |
| okini3939 | 1:a7b1803dfa44 | 98 | if ((i & 0x0fff) == 0) printf("."); |
| okini3939 | 0:c5ba7d914282 | 99 | } |
| okini3939 | 1:a7b1803dfa44 | 100 | t.stop(); |
| okini3939 | 1:a7b1803dfa44 | 101 | printf("\r\ntime %f, %f KBytes/sec\r\n", t.read(), (float)0x20000 / 1024 / t.read()); |
| okini3939 | 1:a7b1803dfa44 | 102 | |
| okini3939 | 1:a7b1803dfa44 | 103 | wait(1); |
| okini3939 | 1:a7b1803dfa44 | 104 | |
| okini3939 | 1:a7b1803dfa44 | 105 | printf("RAM read\r\n"); |
| okini3939 | 1:a7b1803dfa44 | 106 | t.reset(); |
| okini3939 | 1:a7b1803dfa44 | 107 | t.start(); |
| okini3939 | 1:a7b1803dfa44 | 108 | for (i = 0; i < 0x20000; i += 256) { |
| okini3939 | 1:a7b1803dfa44 | 109 | ram_read(i, buf, 256); |
| okini3939 | 1:a7b1803dfa44 | 110 | if (buf[0] != ((i >> 8) & 0xff)) { |
| okini3939 | 1:a7b1803dfa44 | 111 | printf("error %d\r\n", i); |
| okini3939 | 1:a7b1803dfa44 | 112 | break; |
| okini3939 | 1:a7b1803dfa44 | 113 | } |
| okini3939 | 1:a7b1803dfa44 | 114 | if ((i & 0x0fff) == 0) printf("."); |
| okini3939 | 1:a7b1803dfa44 | 115 | } |
| okini3939 | 1:a7b1803dfa44 | 116 | t.stop(); |
| okini3939 | 1:a7b1803dfa44 | 117 | printf("\r\ntime %f, %f KBytes/sec\r\n", t.read(), 0x20000 / 1024 / t.read()); |
| okini3939 | 1:a7b1803dfa44 | 118 | |
| okini3939 | 0:c5ba7d914282 | 119 | } |
