Hello there,
I am trying to connect a WiFly Shield from Sarkfun to a Teensy 3.1 using a Serial Peripheral Interface (SPI). ( https://www.sparkfun.com/products/9954 )
For this i use the SPI.h lib and the SPI pins on Teensy (10-13 | SS-CLK) connected to the SPI Pins on the WiFly Shield (10-13 | SS-CLK).
The WiFly uses a Uart-Bridge chip by "NXP" called "SC16IS750". The datasheet as well as all sample sketches for the Arduino Uno show the following specs:
- 14 MHz crystal
- SPI_MODE0
- 4MHz
- MSBFIRST
( https://www.sparkfun.com/datasheets/...40_750_760.pdf )
Now alway when i try to perform a simple test by writing to and reading from a register (0x07 << 3) I read a 255 in every case.
When i switch the SPI setting to mode2 I get more or less random Numbers between 128 and 255 by reading from the Register.
What am i doing wrong ?! I tried nearly everything to find a way to get the SPI working but failed anytime.
Here is a sketch I use for testing:
Code:
#include <SPI.h>
SPISettings TeensySettings(4000000, MSBFIRST, SPI_MODE0);
void setup() {
pinMode(SS, OUTPUT);
digitalWrite(SS, LOW);
pinMode(MOSI, OUTPUT);
digitalWrite(MOSI, LOW);
pinMode(MISO, INPUT_PULLUP);
pinMode(SCK, OUTPUT);
digitalWrite(SCK, LOW);
SPI.begin();
Serial.begin(9600);
while(!Serial); // waiting for Serial port to be opened
Serial.println("START SPI TEST \n\n");
}
void loop(){
const byte value = 0xAA; // Value to be written 0xff 0=>255 // 0xee => 246 // 0x10 => 128
const byte adress = 0x07; // Register adress
writeRegister(adress, value); // write a value into register with adress "adress"
readRegister(adress); // read value stored in register with adress "adress"
delay(500);
Serial.println();
Serial.println("------");
Serial.println();
}
void writeRegister(uint8_t registerAddress, uint8_t data) {
SPI.beginTransaction(TeensySettings);
digitalWrite(10,LOW);
delay(100);
SPI.transfer(registerAddress << 3);
SPI.transfer(data);
delay(100);
digitalWrite(10,HIGH);
SPI.endTransaction();
}
uint8_t readRegister(uint8_t registerAddress) {
uint8_t result;
SPI.beginTransaction(TeensySettings);
digitalWrite(10,LOW);
delay(100);
SPI.transfer( 0x80 | (registerAddress << 3) );
result = SPI.transfer(0xFF);
delay(100);
digitalWrite(10,HIGH);
SPI.endTransaction();
Serial.print("result: ");Serial.println(result);
return result; // in mode0 the result is 255 in any case !! // in mode2 the result is between 128 and 255
}
I also tried using the datatype "byte" instead of "uint8_t" and got the same results in both cases.
i have no idea what i am doing wrong.
Would be very pleased for any hints and advices ! 
best, vinc
ps.: here is a thread to a similar problem. But there was no answer which neither solved this nor mine problem.
https://forum.pjrc.com/threads/26418...oto=nextoldest