Microchip SPI SRAM (23LC1024, 23LC512) access library.
23LCxx_SPI.h
- Committer:
- discypus
- Date:
- 2015-11-27
- Revision:
- 1:56e01e806364
- Parent:
- 0:625ac56d810e
- Child:
- 2:52d3272b886c
File content as of revision 1:56e01e806364:
#ifndef MICROCHIP_23LCXXX_SPI_H #define MICROCHIP_23LCXXX_SPI_H #include <mbed.h> /** Microchip SPI SRAM access library for 23LC1024, 23LC512 * * Example: * @code * #include <mbed.h> * #include "23LCxx_SPI.h" * * Microchip23LCxx sram(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS, 20 * 1000 * 1000); * * uint8_t buf[256] = {}; * * void main() { * const uint32_t address = 0x2000; * const uint32_t size = 256; * * sram.change_mode(Microchip23LCxx::SEQUENTIAL); * * // write * for (uint32_t i = 0; i < size; ++i) { * buf[i] = i; * } * sram.write_bytes(address, buf, size); * * // read * for (uint32_t i = 0; i < size; ++i) { * buf[i] = 0; * } * sram.read_bytes(address, buf, size); * } * @endcode */ class Microchip23LCxx { public: /** SPI COMMAND for Microchip 23LC1024, 23LC512 */ enum Microchip23LCxxCommnd { READ = 0x03u, WRITE = 0x02u, EDIO = 0x3bu, EQIO = 0x38u, RSTIO = 0xffu, RDMR = 0x05u, WRMR = 0x01u, }; /** Access mode for Microchip 23LC1024, 23LC512 */ enum Microchip23LCxxMode { MODE_MASK = 0xc0u, BYTE = 0x00u, SEQUENTIAL = 0x40u, // default operation PAGE = 0x80u, RESERVED = 0xc0u, }; /** Constructor. * * @param[in] mosi SPI MOSI pin name * @param[in] miso SPI MISO pin name * @param[in] sck SPI SCK pin name * @param[in] cs SPI CS pin name * @param[in] hz SPI Frequency */ Microchip23LCxx(const PinName mosi, const PinName miso, const PinName sck, const PinName cs, const uint32_t hz); /** read from mode register. * * @return register value */ uint8_t read_mode_register(); /** write to mode register. * * @param[in] mode */ void write_mode_register(const uint8_t value); /** change mode bits. * * @param[in] mode mode * @return mode before change * @invariant other bits in register. */ uint8_t change_mode(const uint8_t next_mode); /** 1byte read * * @param[in] address adress in 24bit * @return read data */ uint8_t read_byte(const uint32_t address); /** 1byte write * * @param[in] address address in 24bit * @param[in] write data */ void write_byte(const uint32_t address, const uint8_t data); /** multi-byte read * * @pre sequential mode or page mode is required. */ void read_bytes(const uint32_t address, uint8_t __restrict data[], const uint32_t size); /** multi-byte write * * @pre sequential mode or page mode is required. */ void write_bytes(const uint32_t address, const uint8_t __restrict data[], const uint32_t size); private: SPI _spi; DigitalOut _cs; void _set_address(const uint32_t address); }; #endif