forked library

Fork of Ser23K256 by marcel van de Kamp

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?

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
marcelvandekamp 0:d049f6422506 6 #include "mbed.h"
marcelvandekamp 0:d049f6422506 7 #include "Ser23K256.h"
marcelvandekamp 0:d049f6422506 8
marcelvandekamp 0:d049f6422506 9 Ser23K256::Ser23K256(SPI& spi, PinName ncs) : _spi(spi), _ncs(ncs) {
marcelvandekamp 0:d049f6422506 10 deselect();
marcelvandekamp 0:d049f6422506 11 }
marcelvandekamp 0:d049f6422506 12
marcelvandekamp 0:d049f6422506 13 void Ser23K256::select() {
marcelvandekamp 0:d049f6422506 14 _ncs = 0;
marcelvandekamp 0:d049f6422506 15 }
marcelvandekamp 0:d049f6422506 16
marcelvandekamp 0:d049f6422506 17 void Ser23K256::deselect() {
marcelvandekamp 0:d049f6422506 18 _ncs = 1;
marcelvandekamp 0:d049f6422506 19 }
marcelvandekamp 0:d049f6422506 20
k4zuki 1:d8180cb9d9ab 21 void Ser23K256::writeStatus(uint8_t status) {
marcelvandekamp 0:d049f6422506 22 select();
marcelvandekamp 0:d049f6422506 23 _spi.write(WRITE_STATUS);
marcelvandekamp 0:d049f6422506 24 _spi.write(status);
marcelvandekamp 0:d049f6422506 25 deselect();
marcelvandekamp 0:d049f6422506 26 }
marcelvandekamp 0:d049f6422506 27
k4zuki 1:d8180cb9d9ab 28 uint8_t Ser23K256::readStatus() {
marcelvandekamp 0:d049f6422506 29 select();
marcelvandekamp 0:d049f6422506 30 _spi.write(READ_STATUS);
k4zuki 1:d8180cb9d9ab 31 uint8_t result = (uint8_t) _spi.write(0);
marcelvandekamp 0:d049f6422506 32 deselect();
marcelvandekamp 0:d049f6422506 33 return result;
marcelvandekamp 0:d049f6422506 34 }
marcelvandekamp 0:d049f6422506 35
k4zuki 1:d8180cb9d9ab 36 void Ser23K256::prepareCommand(uint8_t command, int address) {
marcelvandekamp 0:d049f6422506 37 select();
marcelvandekamp 0:d049f6422506 38 _spi.write(command);
marcelvandekamp 0:d049f6422506 39 _spi.write(address >> 8);
marcelvandekamp 0:d049f6422506 40 _spi.write(address & 0xFF);
marcelvandekamp 0:d049f6422506 41 }
marcelvandekamp 0:d049f6422506 42
marcelvandekamp 0:d049f6422506 43 // write or read a single byte
marcelvandekamp 0:d049f6422506 44
k4zuki 1:d8180cb9d9ab 45 void Ser23K256::write(int address, uint8_t byte) {
marcelvandekamp 0:d049f6422506 46 prepareCommand(WRITE, address);
marcelvandekamp 0:d049f6422506 47 _spi.write(byte);
marcelvandekamp 0:d049f6422506 48 deselect();
marcelvandekamp 0:d049f6422506 49 }
marcelvandekamp 0:d049f6422506 50
k4zuki 1:d8180cb9d9ab 51 uint8_t Ser23K256::read(int address) {
marcelvandekamp 0:d049f6422506 52 prepareCommand(READ, address);
marcelvandekamp 0:d049f6422506 53 int result = _spi.write(0);
marcelvandekamp 0:d049f6422506 54 deselect();
k4zuki 1:d8180cb9d9ab 55 return (uint8_t) result;
marcelvandekamp 0:d049f6422506 56 }
marcelvandekamp 0:d049f6422506 57
marcelvandekamp 0:d049f6422506 58 // buffered write and read
marcelvandekamp 0:d049f6422506 59
marcelvandekamp 0:d049f6422506 60 /*
marcelvandekamp 0:d049f6422506 61 * the single-byte read and write assume the 23K256 is in its default byte-mode
marcelvandekamp 0:d049f6422506 62 * so sequential-model commands must switch the chip into sequential mode
marcelvandekamp 0:d049f6422506 63 * at the start and return it to byte mode at the end.
marcelvandekamp 0:d049f6422506 64 */
marcelvandekamp 0:d049f6422506 65
k4zuki 1:d8180cb9d9ab 66 void Ser23K256::write(int address, uint8_t * buffer, int count) {
marcelvandekamp 0:d049f6422506 67 writeStatus(SEQUENTIAL_MODE);
marcelvandekamp 0:d049f6422506 68 prepareCommand(WRITE, address);
marcelvandekamp 0:d049f6422506 69 for (int i = 0; i < count; i++) {
marcelvandekamp 0:d049f6422506 70 _spi.write(buffer[i]);
marcelvandekamp 0:d049f6422506 71 }
marcelvandekamp 0:d049f6422506 72 deselect();
marcelvandekamp 0:d049f6422506 73 writeStatus(BYTE_MODE);
marcelvandekamp 0:d049f6422506 74 }
marcelvandekamp 0:d049f6422506 75
k4zuki 1:d8180cb9d9ab 76 void Ser23K256::read(int address, uint8_t * buffer, int count) {
marcelvandekamp 0:d049f6422506 77 writeStatus(SEQUENTIAL_MODE);
marcelvandekamp 0:d049f6422506 78 prepareCommand(READ, address);
marcelvandekamp 0:d049f6422506 79 for (int i = 0; i < count; i++) {
marcelvandekamp 0:d049f6422506 80 buffer[i] = _spi.write(0);
marcelvandekamp 0:d049f6422506 81 }
marcelvandekamp 0:d049f6422506 82 deselect();
marcelvandekamp 0:d049f6422506 83 writeStatus(BYTE_MODE);
marcelvandekamp 0:d049f6422506 84 }