FM25W256, it was write protect first. 初期状態ではライトプロテクトがかかっていることに対応。 "The WREN command must be issued prior to any write operation." from FM25W256 datasheet.

Dependencies:   FM25W256 mbed

Fork of Hello-FM25W256 by Toyomasa Watarai

main.cpp

Committer:
MACRUM
Date:
2016-03-04
Revision:
0:3efb18460968
Child:
1:be908b1aafe6

File content as of revision 0:3efb18460968:

#include "mbed.h"

Serial pc(USBTX, USBRX);
SPI fram(dp2, dp1, dp6);
DigitalOut _cs(dp18);

#define CMD_WREN   0x06
#define CMD_WRDI   0x04
#define CMD_RDSR   0x05
#define CMD_WRSR   0x01
#define CMD_READ   0x03
#define CMD_WRITE  0x02

void write_byte(uint16_t address, uint8_t data)
{
    _cs = 0;
    fram.write(CMD_WREN);
    _cs = 1;

    _cs = 0;
    fram.write(CMD_WRITE);
    fram.write(address >> 8);
    fram.write(address & 0xFF);
    fram.write(data & 0xFF);
    _cs = 1;
}

uint8_t read_byte(uint16_t address)
{
    uint8_t data;

    _cs = 0;
    fram.write(CMD_READ);
    fram.write(address >> 8);
    fram.write(address & 0xFF);
    data = fram.write(0);
    _cs = 1;

    return data;
}

void read_bytes(uint16_t address, uint8_t *buf, uint16_t size)
{
    _cs = 0;
    fram.write(CMD_READ);
    fram.write(address >> 8);
    fram.write(address & 0xFF);
    while (size--) {
        *buf++ = fram.write(0);
    }
    _cs = 1;
}


void read_test()
{
    uint16_t adrs = 0;
    for(int i=0; i<16; i++) {
        pc.printf("0x%04X : ", i * 16);
        for(int j=0; j<16; j++) {
            //pc.printf("%02X ", fram.write(0));
            pc.printf("%02X ", read_byte(adrs++));
        }
        pc.printf("\n");
    }
}
    
void write_test()
{
    for(int i=0; i<256; i++) {
        write_byte(i, i);
    }
}

int main()
{
    fram.format(8, 0);
    fram.frequency(20000000);
    _cs = 1;

    pc.printf("\nFM25W256 test program - write test? (y/n) ");
    if (pc.getc() == 'y') {
        write_test();
    }

    pc.printf("\nFM25W256 test program - read test? (y/n) ");
    if (pc.getc() == 'y') {
        pc.printf("\n");
        read_test();
    }

    while(1) {
    }
}