I'm working on a custom board which uses the Atmega1280. The SPI library does not seem to work when using transactions. Example code without transactions:
pinMode(FLASH_SS, OUTPUT);
digitalWrite(FLASH_SS, HIGH);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setDataMode(SPI_MODE0);
SPI.setClockDivider(SPI_CLOCK_DIV4);
digitalWrite(FLASH_SS, LOW);
SPI.transfer(0x9F);
byte id1 = SPI.transfer(0);
byte id2 = SPI.transfer(0);
byte id3 = SPI.transfer(0);
digitalWrite(FLASH_SS, HIGH);
SPI.end();
Serial.begin(115200);
Serial.println(id1, DEC);
Serial.println(id2, DEC);
Serial.println(id3, DEC);
This works perfectly:
EDIT: link to full size image
But when I switch to transactions:
pinMode(FLASH_SS, OUTPUT);
digitalWrite(FLASH_SS, HIGH);
settings = SPISettings(4000000, MSBFIRST, SPI_MODE0);
SPI.beginTransaction(settings);
digitalWrite(FLASH_SS, LOW);
SPI.transfer(0x9F);
byte id1 = SPI.transfer(0);
byte id2 = SPI.transfer(0);
byte id3 = SPI.transfer(0);
digitalWrite(FLASH_SS, HIGH);
SPI.endTransaction();
Serial.begin(115200);
Serial.println(id1, DEC);
Serial.println(id2, DEC);
Serial.println(id3, DEC);
No activity is seen on the SPI lines. In fact, it looks like the SPI library hangs up on the transfer() call and does not return. Am I doing something wrong?
Thanks!
Josh