forked library
Fork of Ser23K256 by
Ser23K256.h@1:d8180cb9d9ab, 2014-08-28 (annotated)
- Committer:
- k4zuki
- Date:
- Thu Aug 28 17:23:36 2014 +0000
- Revision:
- 1:d8180cb9d9ab
- Parent:
- 0:d049f6422506
changed all definition by char to uint8_t
Who changed what in which revision?
User | Revision | Line number | New 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() { |
k4zuki | 1:d8180cb9d9ab | 42 | * uint8_t 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 |
k4zuki | 1:d8180cb9d9ab | 78 | * @return the uint8_tacter at that address |
marcelvandekamp | 0:d049f6422506 | 79 | */ |
k4zuki | 1:d8180cb9d9ab | 80 | uint8_t 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 | */ |
k4zuki | 1:d8180cb9d9ab | 86 | void read(int address, uint8_t * 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 | */ |
k4zuki | 1:d8180cb9d9ab | 91 | void write(int address, uint8_t 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 | */ |
k4zuki | 1:d8180cb9d9ab | 97 | void write(int address, uint8_t * buffer, int count); |
marcelvandekamp | 0:d049f6422506 | 98 | private: |
marcelvandekamp | 0:d049f6422506 | 99 | SPI& _spi; |
marcelvandekamp | 0:d049f6422506 | 100 | DigitalOut _ncs; |
k4zuki | 1:d8180cb9d9ab | 101 | uint8_t readStatus(); |
k4zuki | 1:d8180cb9d9ab | 102 | void writeStatus(uint8_t status); |
k4zuki | 1:d8180cb9d9ab | 103 | void prepareCommand(uint8_t 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 |