Hi glorifiedplumber,
To avoid mistakes, I first send the information by email.
I hope this is information, otherwise let me know.
Regards,
Jan
Test setup
Here is a measurement with the program below.
// SPI Serial EEPROM 25LC512 I/P Arduino DUE
// 1 CS Low Actief Pin 4
// 2 MISO ,, PA25 CIPO
// 3 WP to Vcc / 3.3V
// 4 Vss / GND
// 5 MOSI ,, PA26 COPI
// 6 SCK ,, PA27 SCK
// 7 HOLD to Vcc / 3.3V
// 8 Vcc / 3.3V
const byte WREN = 0b110; // ?
const byte WRITE_DATA = 0b10; // write opcode
const byte READ_DATA = 0b11; // read opcode
uint16_t ADDR = 0x00; // address 0
byte data_write = 0x04; // data for test = 4
#include <SPI.h>
void setup() {
Serial.begin(9600);
SPI.begin(4); // Special chip select pin 4
SPI.setClockDivider(4, 84); // Clock
SPI.setDataMode(4,SPI_MODE0); // Clock polarity
SPI.setBitOrder(4,MSBFIRST); // Most significant bit shifted in and out first
}
void loop() {
SPI.transfer( 4, WREN, SPI_LAST);
SPI.transfer( 4, WRITE_DATA, SPI_CONTINUE); // send command
SPI.transfer( 4, ADDR, SPI_CONTINUE ); // address High
SPI.transfer( 4, data_write, SPI_LAST ); // data write on address low
SPI.transfer( 4, READ_DATA, SPI_CONTINUE ); // read command
SPI.transfer( 4, ADDR, SPI_CONTINUE ); // address High
byte data_read = SPI.transfer(4,ADDR); // data read on address low
SPI.endTransaction();
delay (1000);
Serial.println ( data_read );
/*
SPI.transfer( 4, WREN ); // Enable write access
SPI.transfer( 4, WRITE_DATA, SPI_CONTINUE); // send write command
SPI.transfer16( 4, ADDR, SPI_CONTINUE ); // address - 2 bytes
SPI.transfer( 4, data_write); // data write on address low
SPI.transfer( 4, READ_DATA, SPI_CONTINUE ); // read command
SPI.transfer16( 4, ADDR, SPI_CONTINUE ); // address - 2 bytes
byte data_read = SPI.transfer(4, 0x00 ); // data read on address low
SPI.endTransaction();
delay (1000);
Serial.println ( data_read );
*/
}
// Transfer functions
byte transfer(byte _pin, uint8_t _data, SPITransferMode _mode = SPI_LAST);
uint16_t transfer16(byte _pin, uint16_t _data, SPITransferMode _mode = SPI_LAST);
void transfer(byte _pin, void *_buf, size_t _count, SPITransferMode _mode = SPI_LAST);
// Transfer functions on default pin BOARD_SPI_DEFAULT_SS
byte transfer(uint8_t _data, SPITransferMode _mode = SPI_LAST) { return transfer(BOARD_SPI_DEFAULT_SS, _data, _mode); }
uint16_t transfer16(uint16_t _data, SPITransferMode _mode = SPI_LAST) { return transfer16(BOARD_SPI_DEFAULT_SS, _data, _mode); }
void transfer(void *_buf, size_t _count, SPITransferMode _mode = SPI_LAST) { transfer(BOARD_SPI_DEFAULT_SS, _buf, _count, _mode); }
Signal colors
Yellow CS
Blue CLK
Red SI
Green SO
Here is a measurement with the program below.
// SPI Serial EEPROM 25LC512 I/P Arduino DUE
// 1 CS Low Actief Pin 4
// 2 MISO ,, PA25 CIPO
// 3 WP to Vcc / 3.3V
// 4 Vss / GND
// 5 MOSI ,, PA26 COPI
// 6 SCK ,, PA27 SCK
// 7 HOLD to Vcc / 3.3V
// 8 Vcc / 3.3V
const byte WREN = 0b110; // ?
const byte WRITE_DATA = 0b10; // write opcode
const byte READ_DATA = 0b11; // read opcode
uint16_t ADDR = 0x00; // address 0
byte data_write = 0x04; // data for test = 4
#include <SPI.h>
void setup() {
Serial.begin(9600);
SPI.begin(4); // Special chip select pin 4
SPI.setClockDivider(4, 84); // Clock
SPI.setDataMode(4,SPI_MODE0); // Clock polarity
SPI.setBitOrder(4,MSBFIRST); // Most significant bit shifted in and out first
}
void loop() {
/*
SPI.transfer( 4, WREN, SPI_LAST);
SPI.transfer( 4, WRITE_DATA, SPI_CONTINUE); // send command
SPI.transfer( 4, ADDR, SPI_CONTINUE ); // address High
SPI.transfer( 4, data_write, SPI_LAST ); // data write on address low
SPI.transfer( 4, READ_DATA, SPI_CONTINUE ); // read command
SPI.transfer( 4, ADDR, SPI_CONTINUE ); // address High
byte data_read = SPI.transfer(4,ADDR); // data read on address low
SPI.endTransaction();
delay (1000);
Serial.println ( data_read );
*/
SPI.transfer( 4, WREN ); // Enable write access
SPI.transfer( 4, WRITE_DATA, SPI_CONTINUE); // send write command
SPI.transfer16( 4, ADDR, SPI_CONTINUE ); // address - 2 bytes
SPI.transfer( 4, data_write); // data write on address low
SPI.transfer( 4, READ_DATA, SPI_CONTINUE ); // read command
SPI.transfer16( 4, ADDR, SPI_CONTINUE ); // address - 2 bytes
byte data_read = SPI.transfer(4, 0x00 ); // data read on address low
SPI.endTransaction();
delay (1000);
Serial.println ( data_read );
}
// Transfer functions
byte transfer(byte _pin, uint8_t _data, SPITransferMode _mode = SPI_LAST);
uint16_t transfer16(byte _pin, uint16_t _data, SPITransferMode _mode = SPI_LAST);
void transfer(byte _pin, void *_buf, size_t _count, SPITransferMode _mode = SPI_LAST);
// Transfer functions on default pin BOARD_SPI_DEFAULT_SS
byte transfer(uint8_t _data, SPITransferMode _mode = SPI_LAST) { return transfer(BOARD_SPI_DEFAULT_SS, _data, _mode); }
uint16_t transfer16(uint16_t _data, SPITransferMode _mode = SPI_LAST) { return transfer16(BOARD_SPI_DEFAULT_SS, _data, _mode); }
void transfer(void *_buf, size_t _count, SPITransferMode _mode = SPI_LAST) { transfer(BOARD_SPI_DEFAULT_SS, _buf, _count, _mode); }