Suga koubou
/
SPIRAM_23LC1024
SPI RAM 23LC1024 (Microchip) 1Mbit see: http://mbed.org/users/okini3939/notebook/extend-memory/
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 /* 00002 * SPI RAM 23LC1024 (Microchip) 00003 * 1Mbit 00004 */ 00005 #include "mbed.h" 00006 00007 #define CMD_READ 0x03 00008 #define CMD_WRITE 0x02 00009 #define CMD_RDMR 0x05 00010 #define CMD_WRMR 0x01 00011 00012 DigitalOut myled(LED1); 00013 Serial pc(USBTX, USBRX); 00014 00015 SPI spi(p11, p12, p13); // mosi, miso, sclk 00016 DigitalOut cs(p17), hold(p18); 00017 00018 int ram_write (int addr, char *buf, int len) { 00019 int i; 00020 00021 cs = 0; 00022 spi.write(CMD_WRITE); 00023 spi.write((addr >> 16) & 0xff); 00024 spi.write((addr >> 8) & 0xff); 00025 spi.write(addr & 0xff); 00026 00027 for (i = 0; i < len; i ++) { 00028 spi.write(buf[i]); 00029 } 00030 cs = 1; 00031 return i; 00032 } 00033 00034 int ram_read (int addr, char *buf, int len) { 00035 int i; 00036 00037 cs = 0; 00038 spi.write(CMD_READ); 00039 spi.write((addr >> 16) & 0xff); 00040 spi.write((addr >> 8) & 0xff); 00041 spi.write(addr & 0xff); 00042 00043 for (i = 0; i < len; i ++) { 00044 buf[i] = spi.write(0); 00045 } 00046 cs = 1; 00047 return i; 00048 } 00049 00050 int main() { 00051 int i; 00052 char buf[256]; 00053 Timer t; 00054 00055 cs = 1; 00056 hold = 1; 00057 pc.baud(115200); 00058 spi.frequency(16000000); 00059 wait_ms(500); 00060 00061 cs = 0; 00062 spi.write(CMD_RDMR); 00063 printf("RAM mode: %02x\r\n", spi.write(0)); 00064 cs = 1; 00065 00066 printf("\r\nHELLO test\r\n"); 00067 00068 printf("RAM write\r\n"); 00069 strcpy(buf, "Hello!"); 00070 ram_write(0, buf, 6); 00071 00072 for (i = 0; i < 256; i ++) { 00073 buf[i] = i; 00074 } 00075 ram_write(6, buf, 256); 00076 00077 wait(1); 00078 memset(buf, 0, 256); 00079 00080 printf("RAM read\r\n"); 00081 ram_read(0, buf, 256); 00082 for (i = 0; i < 256; i ++) { 00083 printf(" %02x", buf[i]); 00084 if ((i & 0x0f) == 0x0f) 00085 printf("\r\n"); 00086 } 00087 00088 wait(1); 00089 00090 printf("\r\nWrite/Read time\r\n"); 00091 00092 printf("RAM write\r\n"); 00093 t.reset(); 00094 t.start(); 00095 for (i = 0; i < 0x20000; i += 256) { 00096 buf[0] = (i >> 8) & 0xff; 00097 ram_write(i, buf, 256); 00098 if ((i & 0x0fff) == 0) printf("."); 00099 } 00100 t.stop(); 00101 printf("\r\ntime %f, %f KBytes/sec\r\n", t.read(), (float)0x20000 / 1024 / t.read()); 00102 00103 wait(1); 00104 00105 printf("RAM read\r\n"); 00106 t.reset(); 00107 t.start(); 00108 for (i = 0; i < 0x20000; i += 256) { 00109 ram_read(i, buf, 256); 00110 if (buf[0] != ((i >> 8) & 0xff)) { 00111 printf("error %d\r\n", i); 00112 break; 00113 } 00114 if ((i & 0x0fff) == 0) printf("."); 00115 } 00116 t.stop(); 00117 printf("\r\ntime %f, %f KBytes/sec\r\n", t.read(), 0x20000 / 1024 / t.read()); 00118 00119 }
Generated on Tue Jul 19 2022 15:25:39 by 1.7.2