From 95a31bf718dcf7db2057ed000468c54e9f1d524f Mon Sep 17 00:00:00 2001 From: Davide Mor <davide.mor@skywarder.eu> Date: Fri, 12 Aug 2022 19:30:24 +0200 Subject: [PATCH] [cc3135] Added dummy read just before initialization --- src/shared/radio/CC3135/CC3135.cpp | 13 +++++++++++++ src/shared/radio/CC3135/CC3135.h | 3 +++ src/tests/drivers/CC3135/test-cc3135.cpp | 12 +++++------- 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/src/shared/radio/CC3135/CC3135.cpp b/src/shared/radio/CC3135/CC3135.cpp index 15680adf1..536807b17 100644 --- a/src/shared/radio/CC3135/CC3135.cpp +++ b/src/shared/radio/CC3135/CC3135.cpp @@ -49,6 +49,9 @@ CC3135::CC3135(std::unique_ptr<ICC3135Iface> &&iface) : iface(std::move(iface)) CC3135::Error CC3135::init(bool wait_for_init) { + if (iface->is_spi()) + dummyDeviceRead(); + if (wait_for_init) { DeviceInitInfo init_info = {}; @@ -88,6 +91,16 @@ CC3135::Error CC3135::devigeGet(uint8_t set_id, uint8_t option, Buffer result) Buffer::from(&rx_command), result); } +CC3135::Error CC3135::dummyDeviceRead() +{ + ResponseHeader header; + TRY(readHeader(&header)); + + defaultPacketHandler(header); + + return Error::NO_ERROR; +} + CC3135::Error CC3135::setMode(CC3135Defs::Mode mode) { WlanSetMode tx_command = {}; diff --git a/src/shared/radio/CC3135/CC3135.h b/src/shared/radio/CC3135/CC3135.h index 8a569d72e..e3082b78e 100644 --- a/src/shared/radio/CC3135/CC3135.h +++ b/src/shared/radio/CC3135/CC3135.h @@ -83,6 +83,9 @@ private: CC3135::Error devigeGet(uint8_t set_id, uint8_t option, Buffer result); + //! Read something from the device, to wake it up? + CC3135::Error dummyDeviceRead(); + // Functions dedicated to interrupt servicing //! Wait for an incoming interrupt (only callable in service thread). diff --git a/src/tests/drivers/CC3135/test-cc3135.cpp b/src/tests/drivers/CC3135/test-cc3135.cpp index f3e2e034b..f1c137c30 100644 --- a/src/tests/drivers/CC3135/test-cc3135.cpp +++ b/src/tests/drivers/CC3135/test-cc3135.cpp @@ -86,7 +86,7 @@ using irq = Gpio<GPIOA_BASE, 4>; using hib = Gpio<GPIOA_BASE, 6>; #define CC3135_SPI SPI1 -#define CC3135_HIB +// #define CC3135_HIB #endif #endif @@ -190,7 +190,7 @@ int main() GpioPin cs_pin = cs::getPin(); SPIBusConfig config = {}; - config.clockDivider = SPI::ClockDivider::DIV_64; + config.clockDivider = SPI::ClockDivider::DIV_32; config.mode = SPI::Mode::MODE_0; config.bitOrder = SPI::BitOrder::MSB_FIRST; @@ -201,18 +201,16 @@ int main() std::unique_ptr<ICC3135Iface> iface(new CC3135Uart(CC3135_UART)); #endif - Thread::sleep(5000); - printf("[cc3135] Initializing...\n"); cc3135 = new CC3135(std::move(iface)); - cc3135->handleIrq(); + // cc3135->handleIrq(); - if (cc3135->init(true) != CC3135::Error::NO_ERROR) + if (cc3135->init(false) != CC3135::Error::NO_ERROR) { printf("[cc3135] Failed to start cc3135, retrying...\n"); Thread::sleep(2000); - return; + return 0; // miosix::reboot(); } -- GitLab