Fujitsu MB85RSxx SPI FRAM access library
Dependents: MB85RSxx_Hello TYBLE16_simple_data_logger
MB85RSxx_SPI.cpp
- Committer:
- MACRUM
- Date:
- 2017-04-24
- Revision:
- 0:f397b42257f8
File content as of revision 0:f397b42257f8:
/** ****************************************************************************** * @file MB85RSxx_SPI.cpp * @author Toyomasa Watarai * @version V1.0.0 * @date 24 April 2017 * @brief MB85RSxx_SPI class implementation ****************************************************************************** * @attention * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. */ #include "mbed.h" #include "MB85RSxx_SPI.h" MB85RSxx_SPI::MB85RSxx_SPI(PinName mosi, PinName miso, PinName sclk, PinName cs) : _spi(mosi, miso, sclk), _cs(cs) { uint8_t buf[4]; _cs = 1; _spi.format(8, 0); read_device_id(buf); if ((buf[2] & 0x1F) > MB85_DENSITY_512K) { _address_bits = 24; } else { _address_bits = 16; } } MB85RSxx_SPI::~MB85RSxx_SPI() { } void MB85RSxx_SPI::frequency(int hz) { _spi.frequency(hz); } void MB85RSxx_SPI::read_device_id(uint8_t* device_id) { _cs = 0; _spi.write(MB85_RDID); for (int i = 0; i < 4; i++) { *device_id++ = (uint8_t)_spi.write(0); } _cs = 1; } uint8_t MB85RSxx_SPI::read_status() { _cs = 0; _spi.write(MB85_RDSR); uint8_t st = (uint8_t)_spi.write(0); _cs = 1; return st; } void MB85RSxx_SPI::read(uint32_t address, uint8_t* data, uint32_t length) { _cs = 0; _spi.write(MB85_READ); if (_address_bits == 24) { _spi.write((uint8_t)((address >> 16) & 0xFF)); } _spi.write((uint8_t)((address >> 8) & 0xFF)); _spi.write((uint8_t)((address >> 0) & 0xFF)); for (uint32_t i = 0; i < length; i++) { *data++ = (uint8_t)_spi.write(0); } _cs = 1; } uint8_t MB85RSxx_SPI::read(uint32_t address) { uint8_t data; _cs = 0; _spi.write(MB85_READ); if (_address_bits == 24) { _spi.write((uint8_t)((address >> 16) & 0xFF)); } _spi.write((uint8_t)((address >> 8) & 0xFF)); _spi.write((uint8_t)((address >> 0) & 0xFF)); data = (uint8_t)_spi.write(0); _cs = 1; return data; } void MB85RSxx_SPI::write(uint32_t address, uint8_t* data, uint32_t length) { _cs = 0; _spi.write(MB85_WRITE); if (_address_bits == 24) { _spi.write((uint8_t)((address >> 16) & 0xFF)); } _spi.write((uint8_t)((address >> 8) & 0xFF)); _spi.write((uint8_t)((address >> 0) & 0xFF)); for (uint32_t i = 0; i < length; i++) { _spi.write(*data++); } _cs = 1; } void MB85RSxx_SPI::write(uint32_t address, uint8_t data) { _cs = 0; _spi.write(MB85_WRITE); if (_address_bits == 24) { _spi.write((uint8_t)((address >> 16) & 0xFF)); } _spi.write((uint8_t)((address >> 8) & 0xFF)); _spi.write((uint8_t)((address >> 0) & 0xFF)); _spi.write(data); _cs = 1; } void MB85RSxx_SPI::fill(uint32_t address, uint8_t data, uint32_t length) { _cs = 0; _spi.write(MB85_WRITE); if (_address_bits == 24) { _spi.write((uint8_t)((address >> 16) & 0xFF)); } _spi.write((uint8_t)((address >> 8) & 0xFF)); _spi.write((uint8_t)((address >> 0) & 0xFF)); for (uint32_t i = 0; i < length; i++) { _spi.write(data); } _cs = 1; } void MB85RSxx_SPI::write_enable() { _cs = 0; _spi.write(MB85_WREN); _cs = 1; } void MB85RSxx_SPI::write_disable() { _cs = 0; _spi.write(MB85_WRDI); _cs = 1; }