Library to drive the Microchip 23K256 SRAM over SPI.
Revision 3:d2314b1ac797, committed 2010-08-15
- 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;
Microchip 23K256 SRAM