Microchip 23K256 (SPI SRAM) sample code for https://www.switch-science.com/catalog/1072/ module.

Dependencies:   mbed

Revision:
1:793321f410a9
Parent:
0:82c01bfc06e1
Child:
2:0248049e65f1
--- a/main.cpp	Fri Oct 31 12:45:25 2014 +0000
+++ b/main.cpp	Fri Oct 31 13:07:40 2014 +0000
@@ -1,7 +1,5 @@
 #include "mbed.h"
 
-Timer timer;
-
 /** */
 SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK);
 
@@ -100,10 +98,13 @@
  */
 uint8_t
 read_byte(const uint16_t address) {
+    const uint8_t address_high = (address >> (8 * 1)) & 0xFFu;
+    const uint8_t address_low  = (address >> (8 * 0)) & 0xFFu;
+    
     assert_CS();
     spi.write(READ);
-    spi.write((address >> (8 * 1)) & 0xFFu);
-    spi.write((address >> (8 * 0)) & 0xFFu);
+    spi.write(address_high);
+    spi.write(address_low);
     const uint8_t data = spi.write(0x00);
     negate_CS();
 
@@ -118,10 +119,13 @@
  */
 void
 write_byte(const uint16_t address, const uint8_t data) {
+    const uint8_t address_high = (address >> (8 * 1)) & 0xFFu;
+    const uint8_t address_low  = (address >> (8 * 0)) & 0xFFu;
+
     assert_CS();
     spi.write(WRITE);
-    spi.write((address >> (8 * 1)) & 0xFFu);
-    spi.write((address >> (8 * 0)) & 0xFFu);
+    spi.write(address_high);
+    spi.write(address_low);
     spi.write(data);
     negate_CS();
 }
@@ -132,10 +136,13 @@
  */
 void
 read_bytes(const uint16_t address, uint8_t __restrict data[], const uint16_t size) {
+    const uint8_t address_high = (address >> (8 * 1)) & 0xFFu;
+    const uint8_t address_low  = (address >> (8 * 0)) & 0xFFu;
+
     assert_CS();
     spi.write(READ);
-    spi.write((address >> (8 * 1)) & 0xFFu);
-    spi.write((address >> (8 * 0)) & 0xFFu);
+    spi.write(address_high);
+    spi.write(address_low);
     for (uint16_t i = 0; i < size; ++i) {
         data[i] = spi.write(0x00);
     }
@@ -148,10 +155,13 @@
  */
 void
 write_bytes(const uint16_t address, const uint8_t __restrict data[], const uint16_t size) {
+    const uint8_t address_high = (address >> (8 * 1)) & 0xFFu;
+    const uint8_t address_low  = (address >> (8 * 0)) & 0xFFu;
+
     assert_CS();
     spi.write(WRITE);
-    spi.write((address >> (8 * 1)) & 0xFFu);
-    spi.write((address >> (8 * 0)) & 0xFFu);
+    spi.write(address_high);
+    spi.write(address_low);
     for (uint16_t i = 0; i < size; ++i) {
         spi.write(data[i]);
     }
@@ -197,28 +207,28 @@
  */
 void
 try_page_access() {
+    const uint16_t address = 0x1000;
     const uint16_t size = 32;
 
+    change_mode(PAGE);
+
     // write
     for (uint16_t i = 0; i < size; ++i) {
         buf[i] = i;
     }
-
-    change_mode(PAGE);
-    write_bytes(0x1000u, buf, size);
+    write_bytes(address, buf, size);
 
     // read
     for (uint16_t i = 0; i < size; ++i) {
         buf[i] = 0;
     }
 
-    change_mode(PAGE);
-    read_bytes(0x1000u, buf, size);
+    read_bytes(address, buf, size);
 
     // show data (to SERIAL)
     pc.printf("page access test: result\r\n");
     for (int i = 0; i < size; i++) {
-        pc.printf("  %04x : %02x\r\n", i, buf[i]);
+        pc.printf("  %04x : %02x\r\n", address + i, buf[i]);
     }
 }
 
@@ -227,28 +237,29 @@
  */
 void
 try_sequential_access() {
+    const uint16_t address = 0x2000;
     const uint16_t size = 256;
 
+    change_mode(SEQUENTIAL);
+
     // write
     for (uint16_t i = 0; i < size; ++i) {
         buf[i] = i;
     }
 
-    change_mode(SEQUENTIAL);
-    write_bytes(0x2000u, buf, size);
+    write_bytes(address, buf, size);
 
     // read
     for (uint16_t i = 0; i < size; ++i) {
         buf[i] = 0;
     }
 
-    change_mode(PAGE);
-    read_bytes(0x2000u, buf, size);
+    read_bytes(address, buf, size);
 
     // show data (to SERIAL)
     pc.printf("sequential access test: result\r\n");
     for (int i = 0; i < size; i++) {
-        pc.printf("  %04x : %02x\r\n", i, buf[i]);
+        pc.printf("  %04x : %02x\r\n", address + i, buf[i]);
     }
 }
 
@@ -256,7 +267,6 @@
 void
 try_single_byte_access() {
     cs = 0;
-    
     spi.write(0x02u);
     spi.write(0);
     spi.write(0);
@@ -267,7 +277,7 @@
     spi.write(0x03u);
     spi.write(0);
     spi.write(0);
-    uint8_t value = spi.write(0);
+    const uint8_t value = spi.write(0);
     cs = 1;
 
     pc.printf("read: 0x%02x\r\n", value);
@@ -285,8 +295,6 @@
     negate_CS();
 
     // test
-    pc.printf("TIME %8d\r\n", timer.read_ms());
-
     pc.printf("TEST START\r\n");
     try_single_byte_access();
     try_byte_access();