Library to drive the Microchip 23K256 SRAM over SPI.

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
romilly
Date:
Sun Aug 15 14:28:05 2010 +0000
Parent:
2:f96c3c85aa3b
Commit message:
Added DOXYGEN comments

Changed in this revision

Ser23K256.cpp Show annotated file Show diff for this revision Revisions of this file
Ser23K256.h Show annotated file Show diff for this revision Revisions of this file
--- a/Ser23K256.cpp	Sun Aug 15 13:06:52 2010 +0000
+++ b/Ser23K256.cpp	Sun Aug 15 14:28:05 2010 +0000
@@ -1,91 +1,84 @@
-// Ser23K256 - drive the Microchip 23K256 SRAM using SPI
-// Copyright (c) 2010 Romilly Cocking
-// Released under the MIT License: http://mbed.org/license/mit
-
-// 23K256 data sheet at http://ww1.microchip.com/downloads/en/DeviceDoc/22100B.pdf
-
-// Page-mode commands have not been implemented; I have found no need for them yet.
-
-// Assumes spi mode is default (8,0).
-
-// You can clock the 23K256 at up to 20MHz, so it supports the mbed's maximum SPI frequency of 12MHz.
-
-#include "mbed.h"
-#include "Ser23K256.h"
-
-Ser23K256::Ser23K256(SPI& spi, PinName ncs) : _spi(spi), _ncs(ncs)  {
-    deselect();
-}
-
-void Ser23K256::select() {
-    _ncs = 0;
-}
-
-void Ser23K256::deselect() {
-    _ncs = 1;
-}
-
-void Ser23K256::writeStatus(char status) {
-    select();
-    _spi.write(WRITE_STATUS);
-    _spi.write(status);
-    deselect();
-}
-
-char Ser23K256::readStatus() {
-    select();
-    _spi.write(READ_STATUS);
-    char result = (char) _spi.write(0);
-    deselect();
-    return result;
-}
-
-void Ser23K256::prepareCommand(char command, int address) {
-    select();
-    _spi.write(command);
-    _spi.write(address >> 8);
-    _spi.write(address & 0xFF);
-}
-
-// write or read a single byte
-
-void Ser23K256::write(int address, char byte) {
-    prepareCommand(WRITE, address);
-    _spi.write(byte);
-    deselect();
-}
-
-char Ser23K256::read(int address) {
-    prepareCommand(READ, address);
-    int result = _spi.write(0);
-    deselect();
-    return (char) result;
-}
-
-// buffered write and read
-
-/*
-* the single-byte read and write assume the 23K256 is in its default byte-mode
-* so sequential-model commands must switch the chip into sequential mode
-* at the start and return it to byte mode at the end.
-*/
-
-void Ser23K256::write(int address, char * buffer, int count) {
-    writeStatus(SEQUENTIAL_MODE);
-    prepareCommand(WRITE, address);
-    for (int i = 0; i < count; i++) {
-        _spi.write(buffer[i]);
-    }
-    deselect();
-    writeStatus(BYTE_MODE);
-}
-
-void Ser23K256::read(int address, char * buffer, int count) {
-    writeStatus(SEQUENTIAL_MODE);
-    prepareCommand(READ, address);
-    for (int i = 0; i < count; i++) {
-        buffer[i] = _spi.write(0);
-    }
-    deselect();
-    writeStatus(BYTE_MODE);
+/* Ser23K256 - drive the Microchip 23K256 SRAM using SPI
+* Copyright (c) 2010 Romilly Cocking
+* Released under the MIT License: http://mbed.org/license/mit
+*/
+
+#include "mbed.h"
+#include "Ser23K256.h"
+
+Ser23K256::Ser23K256(SPI& spi, PinName ncs) : _spi(spi), _ncs(ncs)  {
+    deselect();
+}
+
+void Ser23K256::select() {
+    _ncs = 0;
+}
+
+void Ser23K256::deselect() {
+    _ncs = 1;
+}
+
+void Ser23K256::writeStatus(char status) {
+    select();
+    _spi.write(WRITE_STATUS);
+    _spi.write(status);
+    deselect();
+}
+
+char Ser23K256::readStatus() {
+    select();
+    _spi.write(READ_STATUS);
+    char result = (char) _spi.write(0);
+    deselect();
+    return result;
+}
+
+void Ser23K256::prepareCommand(char command, int address) {
+    select();
+    _spi.write(command);
+    _spi.write(address >> 8);
+    _spi.write(address & 0xFF);
+}
+
+// write or read a single byte
+
+void Ser23K256::write(int address, char byte) {
+    prepareCommand(WRITE, address);
+    _spi.write(byte);
+    deselect();
+}
+
+char Ser23K256::read(int address) {
+    prepareCommand(READ, address);
+    int result = _spi.write(0);
+    deselect();
+    return (char) result;
+}
+
+// buffered write and read
+
+/*
+* the single-byte read and write assume the 23K256 is in its default byte-mode
+* so sequential-model commands must switch the chip into sequential mode
+* at the start and return it to byte mode at the end.
+*/
+
+void Ser23K256::write(int address, char * buffer, int count) {
+    writeStatus(SEQUENTIAL_MODE);
+    prepareCommand(WRITE, address);
+    for (int i = 0; i < count; i++) {
+        _spi.write(buffer[i]);
+    }
+    deselect();
+    writeStatus(BYTE_MODE);
+}
+
+void Ser23K256::read(int address, char * buffer, int count) {
+    writeStatus(SEQUENTIAL_MODE);
+    prepareCommand(READ, address);
+    for (int i = 0; i < count; i++) {
+        buffer[i] = _spi.write(0);
+    }
+    deselect();
+    writeStatus(BYTE_MODE);
 }
\ No newline at end of file
--- a/Ser23K256.h	Sun Aug 15 13:06:52 2010 +0000
+++ b/Ser23K256.h	Sun Aug 15 14:28:05 2010 +0000
@@ -1,6 +1,15 @@
-// Ser23K256 - drive the Microchip 23K256 SRAM using SPI
-// Copyright (c) 2010 Romilly Cocking
-// Released under the MIT License: http://mbed.org/license/mit
+/** Ser23K256 - drive the Microchip 23K256 SRAM using SPI
+* Copyright (c) 2010 Romilly Cocking
+* Released under the MIT License: http://mbed.org/license/mit
+*
+* 23K256 data sheet at http://ww1.microchip.com/downloads/en/DeviceDoc/22100B.pdf
+*
+* Page-mode commands have not been implemented; I have found no need for them yet.
+*
+* Assumes spi mode is default (8,0).
+*
+* You can clock the 23K256 at up to 20MHz, so it supports the mbed's maximum SPI frequency of 12MHz.
+*/
 
 #include "mbed.h"
 
@@ -17,12 +26,74 @@
 #define READ_STATUS     0x05 // called RDSR in datasheet
 #define WRITE_STATUS    0x01 // called WRSR in datasheet
 
+/** An interface for the Microchip 32k byte 23K256 SRAM over SPI
+*
+* 
+*
+* @code
+* #include "mbed.h"
+* #include "Ser23K256.h"
+*
+*
+* SPI spi(p5,p6,p7);
+* Ser23K256 sram(spi,p14);
+*
+* int main() {
+*   char buff[50];
+*   sram.write(0, 'h');
+*   sram.write(1, 'i');
+*   sram.write(2, '!');
+*   sram.write(3, '\0');
+*   for (int address = 0; address < 4; address++) {
+*       buff[address] = sram.read(address);
+*   }
+*   printf("sram = %s\r\n", buff);
+*   sram.write(0, "Hello world!",12);
+*   sram.read(0, buff, 12);
+*   buff[12]='\0';
+*   printf("now = %s\r\n", buff);
+*}
+* @endcode
+* connections:
+* chip pin 1 to mbed ncs (see below)
+* chip pin 2 SO to mbed MISO
+* chip pin 3 - no connection
+* chip pin 4 to mbed Gnd
+* chip pin 5 SI pin to mbed MOSI
+* chip pin 6 SCK to mbed sck 
+* chip pin 7 (notHOLD) to mbed Vout
+* chip pin 8 to mbed Vout
+*/
 class Ser23K256 {
 public:
+/** Create an interface
+*
+*
+* @param spi   An SPI object
+* @param ncs   Not chip select pin - any free Digital pin will do
+*/
     Ser23K256(SPI& spi, PinName ncs);
+/** read a byte from SRAM
+* @param address    The address to read from
+* @return the character at that address
+*/
     char read(int address);
+/** read multiple bytes from SRAM into a buffer
+* @param address    The SRAM address to read from
+* @param buffer     The buffer to read into (must be big enough!)
+* @param count      The number of bytes to read
+*/
     void read(int address, char * buffer, int count);
+/** write a byte to SRAM
+* @param address    The address SRAM to write to
+* @param byte       The byte to write there
+*/
     void write(int address, char byte);
+    /** write multiple bytes to SRAM from a buffer
+* @param address    The SRAM address write to
+* @param buffer     The buffer to write from
+* @param count      The number of bytes to write
+*/
     void write(int address, char * buffer, int count);
 private:
     SPI& _spi;