Maybe some of you know well the SPI?
I am trying to communicate between STM32F401RCT6 and an ADC module MCP3561.
The expected com on SPI is attached at the end of the message.
The SPI used is SPI2 with alternate pins
Code: Select all
const byte SPI_MOSI = PC3;
const byte SPI_MISO = PC2;
const byte SPI_SCK = PB13;
const byte SPI_CS = PB12;
const uint32_t spiClk = 5000000; // or 10 MHz
byte passedValue = (MCP3561DeviceAddress << 6) & REGISTER_CONFIG1 << 2 & COMMAND_STATIC_READ_REGISTER;
Code: Select all
SPIClass mySPI2(SPI_MOSI, SPI_MISO, SPI_SCK, SPI_CS);
SPISettings mySPIsettings = SPISettings(spiClk, MSBFIRST, SPI_MODE0);
mySPI2.begin();
mySPI2.beginTransaction(mySPIsettings);
returnedValue = mySPI2.transfer(passedValue);
// The returned value is as expected (returning the MCP3561DeviceAddress): 00011111
returnedData = mySPI2.transfer(0);
// Not correct all "1" . The device is supposed to send the data immediatly after receiving and answering to the command, never mind what is on MOSI. But indeed if CS goes high MISO is supposed to return to HIGH. Or maybe I didn't catch the data ? (I did not find a shiftIn method).
mySPI2.endTransaction();
2) Using the CS management in the library: not working
Code: Select all
SPIClass mySPI2(SPI_MOSI, SPI_MISO, SPI_SCK);
SPISettings mySPIsettings = SPISettings(spiClk, MSBFIRST, SPI_MODE0);
mySPI2.begin(SPI_CS);
mySPI2.beginTransaction(mySPIsettings);
returnedValue = mySPI2.transfer(passedValue, SPI_CONTINUE);
// The returned value is NOT as expected - all "1"
returnedData = mySPI2.transfer(0, SPI_LAST);
// The returned value is NOT as expected
mySPI2.endTransaction();
3) Managing CS pin in the code: working as with hardware management
Code: Select all
pinMode(SPI_CS, OUTPUT);
digitalWrite(SPI_CS, HIGH);
SPIClass mySPI2(SPI_MOSI, SPI_MISO, SPI_SCK);
SPISettings mySPIsettings = SPISettings(spiClk, MSBFIRST, SPI_MODE0);
mySPI2.begin();
mySPI2.beginTransaction(mySPIsettings);
digitalWrite(SPI_CS, LOW);
returnedValue = mySPI2.transfer(passedValue);
// The returned value is as expected (returning the MCP3561DeviceAddress): 00011111
returnedData = mySPI2.transfer(0);
// The returned value is NOT as expected
digitalWrite(SPI_CS, HIGH);
mySPI2.endTransaction();
What might be wrong? Also I could not find a shiftIn() method.