1212
1313// --------------------------------------------------------------------------------------------
1414// CTOR
15- sfDevFPC2534SPI::sfDevFPC2534SPI () : _spiPort{nullptr }, _csPin{0 }
15+ sfDevFPC2534SPI::sfDevFPC2534SPI () : _inWrite{ false }, _spiPort{nullptr }, _csPin{0 }
1616{
1717}
1818
@@ -42,7 +42,7 @@ bool sfDevFPC2534SPI::initialize(SPIClass &spiPort, SPISettings &busSPISettings,
4242bool sfDevFPC2534SPI::initialize (uint8_t csPin, uint32_t interruptPin, bool bInit)
4343{
4444 // If the transaction settings are not provided by the user they are built here.
45- SPISettings spiSettings = SPISettings (3000000 , MSBFIRST, SPI_MODE3 );
45+ SPISettings spiSettings = SPISettings (3000000 , MSBFIRST, SPI_MODE0 );
4646 return initialize (SPI, spiSettings, csPin, interruptPin, bInit);
4747}
4848// --------------------------------------------------------------------------------------------
@@ -67,29 +67,45 @@ void sfDevFPC2534SPI::clearData()
6767 clearISRDataAvailable ();
6868}
6969
70- // --------------------------------------------------------------------------------------------
71- // Write data to the device
72- //
73- uint16_t sfDevFPC2534SPI::write (const uint8_t *data, size_t len)
70+ void sfDevFPC2534SPI::beginWrite (void )
7471{
72+
7573 if (_spiPort == nullptr )
76- return FPC_RESULT_IO_RUNTIME_FAILURE ; // I2C bus not initialized
74+ return ; // SPI bus not initialized
7775
7876 _spiPort->beginTransaction (_spiSettings);
7977
8078 // Signal communication start
8179 digitalWrite (_csPin, LOW);
82-
8380 // the datasheet specifiies a delay greater than 500us after CS goes low
8481 delayMicroseconds (600 );
82+ _inWrite = true ;
83+ Serial.println (" Begin SPI Write" );
84+ }
8585
86- // now send the data
87- for ( size_t i = 0 ; i < len; i++)
88- _spiPort-> transfer (*data++);
89-
86+ void sfDevFPC2534SPI ::endWrite ( void )
87+ {
88+ if (_spiPort == nullptr )
89+ return ; // SPI bus not initialized
9090 // End comms
9191 digitalWrite (_csPin, HIGH);
9292 _spiPort->endTransaction ();
93+ _inWrite = false ;
94+ Serial.println (" End SPI Write" );
95+ }
96+ // --------------------------------------------------------------------------------------------
97+ // Write data to the device
98+ //
99+ uint16_t sfDevFPC2534SPI::write (const uint8_t *data, size_t len)
100+ {
101+ if (_spiPort == nullptr )
102+ return FPC_RESULT_IO_RUNTIME_FAILURE; // I2C bus not initialized
103+
104+ Serial.printf (" Writing %d bytes to SPI\r\n " , len);
105+ // now send the data
106+
107+ for (size_t i = 0 ; i < len; i++)
108+ _spiPort->transfer (*data++);
93109
94110 return FPC_RESULT_OK;
95111}
@@ -108,6 +124,9 @@ uint16_t sfDevFPC2534SPI::read(uint8_t *data, size_t len)
108124 if (data == nullptr )
109125 return FPC_RESULT_INVALID_PARAM;
110126
127+ if (_inWrite)
128+ endWrite ();
129+
111130 _spiPort->beginTransaction (_spiSettings);
112131
113132 // Signal communication start
@@ -116,6 +135,7 @@ uint16_t sfDevFPC2534SPI::read(uint8_t *data, size_t len)
116135 // the datasheet specifiies a delay greater than 500us after CS goes low
117136 delayMicroseconds (600 );
118137
138+ Serial.printf (" Reading %d bytes from SPI\r\n " , len);
119139 // Lets read the data...
120140 for (size_t i = 0 ; i < len; i++)
121141 *data++ = _spiPort->transfer (0x00 );
0 commit comments