Chihiro H
/
Microchip23K256_demo
Microchip 23K256 (SPI SRAM) sample code for https://www.switch-science.com/catalog/1072/ module.
Diff: main.cpp
- Revision:
- 1:793321f410a9
- Parent:
- 0:82c01bfc06e1
- Child:
- 2:0248049e65f1
--- a/main.cpp Fri Oct 31 12:45:25 2014 +0000 +++ b/main.cpp Fri Oct 31 13:07:40 2014 +0000 @@ -1,7 +1,5 @@ #include "mbed.h" -Timer timer; - /** */ SPI spi(SPI_MOSI, SPI_MISO, SPI_SCK); @@ -100,10 +98,13 @@ */ uint8_t read_byte(const uint16_t address) { + const uint8_t address_high = (address >> (8 * 1)) & 0xFFu; + const uint8_t address_low = (address >> (8 * 0)) & 0xFFu; + assert_CS(); spi.write(READ); - spi.write((address >> (8 * 1)) & 0xFFu); - spi.write((address >> (8 * 0)) & 0xFFu); + spi.write(address_high); + spi.write(address_low); const uint8_t data = spi.write(0x00); negate_CS(); @@ -118,10 +119,13 @@ */ void write_byte(const uint16_t address, const uint8_t data) { + const uint8_t address_high = (address >> (8 * 1)) & 0xFFu; + const uint8_t address_low = (address >> (8 * 0)) & 0xFFu; + assert_CS(); spi.write(WRITE); - spi.write((address >> (8 * 1)) & 0xFFu); - spi.write((address >> (8 * 0)) & 0xFFu); + spi.write(address_high); + spi.write(address_low); spi.write(data); negate_CS(); } @@ -132,10 +136,13 @@ */ void read_bytes(const uint16_t address, uint8_t __restrict data[], const uint16_t size) { + const uint8_t address_high = (address >> (8 * 1)) & 0xFFu; + const uint8_t address_low = (address >> (8 * 0)) & 0xFFu; + assert_CS(); spi.write(READ); - spi.write((address >> (8 * 1)) & 0xFFu); - spi.write((address >> (8 * 0)) & 0xFFu); + spi.write(address_high); + spi.write(address_low); for (uint16_t i = 0; i < size; ++i) { data[i] = spi.write(0x00); } @@ -148,10 +155,13 @@ */ void write_bytes(const uint16_t address, const uint8_t __restrict data[], const uint16_t size) { + const uint8_t address_high = (address >> (8 * 1)) & 0xFFu; + const uint8_t address_low = (address >> (8 * 0)) & 0xFFu; + assert_CS(); spi.write(WRITE); - spi.write((address >> (8 * 1)) & 0xFFu); - spi.write((address >> (8 * 0)) & 0xFFu); + spi.write(address_high); + spi.write(address_low); for (uint16_t i = 0; i < size; ++i) { spi.write(data[i]); } @@ -197,28 +207,28 @@ */ void try_page_access() { + const uint16_t address = 0x1000; const uint16_t size = 32; + change_mode(PAGE); + // write for (uint16_t i = 0; i < size; ++i) { buf[i] = i; } - - change_mode(PAGE); - write_bytes(0x1000u, buf, size); + write_bytes(address, buf, size); // read for (uint16_t i = 0; i < size; ++i) { buf[i] = 0; } - change_mode(PAGE); - read_bytes(0x1000u, buf, size); + read_bytes(address, buf, size); // show data (to SERIAL) pc.printf("page access test: result\r\n"); for (int i = 0; i < size; i++) { - pc.printf(" %04x : %02x\r\n", i, buf[i]); + pc.printf(" %04x : %02x\r\n", address + i, buf[i]); } } @@ -227,28 +237,29 @@ */ void try_sequential_access() { + const uint16_t address = 0x2000; const uint16_t size = 256; + change_mode(SEQUENTIAL); + // write for (uint16_t i = 0; i < size; ++i) { buf[i] = i; } - change_mode(SEQUENTIAL); - write_bytes(0x2000u, buf, size); + write_bytes(address, buf, size); // read for (uint16_t i = 0; i < size; ++i) { buf[i] = 0; } - change_mode(PAGE); - read_bytes(0x2000u, buf, size); + read_bytes(address, buf, size); // show data (to SERIAL) pc.printf("sequential access test: result\r\n"); for (int i = 0; i < size; i++) { - pc.printf(" %04x : %02x\r\n", i, buf[i]); + pc.printf(" %04x : %02x\r\n", address + i, buf[i]); } } @@ -256,7 +267,6 @@ void try_single_byte_access() { cs = 0; - spi.write(0x02u); spi.write(0); spi.write(0); @@ -267,7 +277,7 @@ spi.write(0x03u); spi.write(0); spi.write(0); - uint8_t value = spi.write(0); + const uint8_t value = spi.write(0); cs = 1; pc.printf("read: 0x%02x\r\n", value); @@ -285,8 +295,6 @@ negate_CS(); // test - pc.printf("TIME %8d\r\n", timer.read_ms()); - pc.printf("TEST START\r\n"); try_single_byte_access(); try_byte_access();