Dependents:   Internal_ADC_with_interrupt

Committer:
marcelvandekamp
Date:
Fri Mar 04 15:22:24 2011 +0000
Revision:
0:d049f6422506

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marcelvandekamp 0:d049f6422506 1 /** Ser23K256 - drive the Microchip 23K256 SRAM using SPI
marcelvandekamp 0:d049f6422506 2 * Copyright (c) 2010 Romilly Cocking
marcelvandekamp 0:d049f6422506 3 * Released under the MIT License: http://mbed.org/license/mit
marcelvandekamp 0:d049f6422506 4 *
marcelvandekamp 0:d049f6422506 5 * 23K256 data sheet at http://ww1.microchip.com/downloads/en/DeviceDoc/22100B.pdf
marcelvandekamp 0:d049f6422506 6 *
marcelvandekamp 0:d049f6422506 7 * Page-mode commands have not been implemented; I have found no need for them yet.
marcelvandekamp 0:d049f6422506 8 *
marcelvandekamp 0:d049f6422506 9 * Assumes spi mode is default (8,0).
marcelvandekamp 0:d049f6422506 10 *
marcelvandekamp 0:d049f6422506 11 * You can clock the 23K256 at up to 20MHz, so it supports the mbed's maximum SPI frequency of 12MHz.
marcelvandekamp 0:d049f6422506 12 */
marcelvandekamp 0:d049f6422506 13
marcelvandekamp 0:d049f6422506 14 #include "mbed.h"
marcelvandekamp 0:d049f6422506 15
marcelvandekamp 0:d049f6422506 16 #ifndef SER23K256_H
marcelvandekamp 0:d049f6422506 17 #define SER23K256_H
marcelvandekamp 0:d049f6422506 18
marcelvandekamp 0:d049f6422506 19 // mode codes for 23K256
marcelvandekamp 0:d049f6422506 20 #define BYTE_MODE 0x00
marcelvandekamp 0:d049f6422506 21 #define SEQUENTIAL_MODE 0x40
marcelvandekamp 0:d049f6422506 22
marcelvandekamp 0:d049f6422506 23 // command codes for 23K256
marcelvandekamp 0:d049f6422506 24 #define READ 0x03
marcelvandekamp 0:d049f6422506 25 #define WRITE 0x02
marcelvandekamp 0:d049f6422506 26 #define READ_STATUS 0x05 // called RDSR in datasheet
marcelvandekamp 0:d049f6422506 27 #define WRITE_STATUS 0x01 // called WRSR in datasheet
marcelvandekamp 0:d049f6422506 28
marcelvandekamp 0:d049f6422506 29 /** An interface for the Microchip 32k byte 23K256 SRAM over SPI
marcelvandekamp 0:d049f6422506 30 *
marcelvandekamp 0:d049f6422506 31 *
marcelvandekamp 0:d049f6422506 32 *
marcelvandekamp 0:d049f6422506 33 * @code
marcelvandekamp 0:d049f6422506 34 * #include "mbed.h"
marcelvandekamp 0:d049f6422506 35 * #include "Ser23K256.h"
marcelvandekamp 0:d049f6422506 36 *
marcelvandekamp 0:d049f6422506 37 *
marcelvandekamp 0:d049f6422506 38 * SPI spi(p5,p6,p7);
marcelvandekamp 0:d049f6422506 39 * Ser23K256 sram(spi,p14);
marcelvandekamp 0:d049f6422506 40 *
marcelvandekamp 0:d049f6422506 41 * int main() {
marcelvandekamp 0:d049f6422506 42 * char buff[50];
marcelvandekamp 0:d049f6422506 43 * sram.write(0, 'h');
marcelvandekamp 0:d049f6422506 44 * sram.write(1, 'i');
marcelvandekamp 0:d049f6422506 45 * sram.write(2, '!');
marcelvandekamp 0:d049f6422506 46 * sram.write(3, '\0');
marcelvandekamp 0:d049f6422506 47 * for (int address = 0; address < 4; address++) {
marcelvandekamp 0:d049f6422506 48 * buff[address] = sram.read(address);
marcelvandekamp 0:d049f6422506 49 * }
marcelvandekamp 0:d049f6422506 50 * printf("sram = %s\r\n", buff);
marcelvandekamp 0:d049f6422506 51 * sram.write(0, "Hello world!",12);
marcelvandekamp 0:d049f6422506 52 * sram.read(0, buff, 12);
marcelvandekamp 0:d049f6422506 53 * buff[12]='\0';
marcelvandekamp 0:d049f6422506 54 * printf("now = %s\r\n", buff);
marcelvandekamp 0:d049f6422506 55 *}
marcelvandekamp 0:d049f6422506 56 * @endcode
marcelvandekamp 0:d049f6422506 57 * connections:
marcelvandekamp 0:d049f6422506 58 * chip pin 1 to mbed ncs (see below)
marcelvandekamp 0:d049f6422506 59 * chip pin 2 SO to mbed MISO
marcelvandekamp 0:d049f6422506 60 * chip pin 3 - no connection
marcelvandekamp 0:d049f6422506 61 * chip pin 4 to mbed Gnd
marcelvandekamp 0:d049f6422506 62 * chip pin 5 SI pin to mbed MOSI
marcelvandekamp 0:d049f6422506 63 * chip pin 6 SCK to mbed sck
marcelvandekamp 0:d049f6422506 64 * chip pin 7 (notHOLD) to mbed Vout
marcelvandekamp 0:d049f6422506 65 * chip pin 8 to mbed Vout
marcelvandekamp 0:d049f6422506 66 */
marcelvandekamp 0:d049f6422506 67 class Ser23K256 {
marcelvandekamp 0:d049f6422506 68 public:
marcelvandekamp 0:d049f6422506 69 /** Create an interface
marcelvandekamp 0:d049f6422506 70 *
marcelvandekamp 0:d049f6422506 71 *
marcelvandekamp 0:d049f6422506 72 * @param spi An SPI object
marcelvandekamp 0:d049f6422506 73 * @param ncs Not chip select pin - any free Digital pin will do
marcelvandekamp 0:d049f6422506 74 */
marcelvandekamp 0:d049f6422506 75 Ser23K256(SPI& spi, PinName ncs);
marcelvandekamp 0:d049f6422506 76 /** read a byte from SRAM
marcelvandekamp 0:d049f6422506 77 * @param address The address to read from
marcelvandekamp 0:d049f6422506 78 * @return the character at that address
marcelvandekamp 0:d049f6422506 79 */
marcelvandekamp 0:d049f6422506 80 char read(int address);
marcelvandekamp 0:d049f6422506 81 /** read multiple bytes from SRAM into a buffer
marcelvandekamp 0:d049f6422506 82 * @param address The SRAM address to read from
marcelvandekamp 0:d049f6422506 83 * @param buffer The buffer to read into (must be big enough!)
marcelvandekamp 0:d049f6422506 84 * @param count The number of bytes to read
marcelvandekamp 0:d049f6422506 85 */
marcelvandekamp 0:d049f6422506 86 void read(int address, char * buffer, int count);
marcelvandekamp 0:d049f6422506 87 /** write a byte to SRAM
marcelvandekamp 0:d049f6422506 88 * @param address The address SRAM to write to
marcelvandekamp 0:d049f6422506 89 * @param byte The byte to write there
marcelvandekamp 0:d049f6422506 90 */
marcelvandekamp 0:d049f6422506 91 void write(int address, char byte);
marcelvandekamp 0:d049f6422506 92 /** write multiple bytes to SRAM from a buffer
marcelvandekamp 0:d049f6422506 93 * @param address The SRAM address write to
marcelvandekamp 0:d049f6422506 94 * @param buffer The buffer to write from
marcelvandekamp 0:d049f6422506 95 * @param count The number of bytes to write
marcelvandekamp 0:d049f6422506 96 */
marcelvandekamp 0:d049f6422506 97 void write(int address, char * buffer, int count);
marcelvandekamp 0:d049f6422506 98 private:
marcelvandekamp 0:d049f6422506 99 SPI& _spi;
marcelvandekamp 0:d049f6422506 100 DigitalOut _ncs;
marcelvandekamp 0:d049f6422506 101 char readStatus();
marcelvandekamp 0:d049f6422506 102 void writeStatus(char status);
marcelvandekamp 0:d049f6422506 103 void prepareCommand(char command, int address);
marcelvandekamp 0:d049f6422506 104 void select();
marcelvandekamp 0:d049f6422506 105 void deselect();
marcelvandekamp 0:d049f6422506 106 };
marcelvandekamp 0:d049f6422506 107
marcelvandekamp 0:d049f6422506 108 #endif