Skip to content

Commit f8972ab

Browse files
ValentiWorkLearningVKorniienko
authored and
VKorniienko
committed
Added draft request read block, added runQueue for request deviceId, powerdown enter/restore #17 [SPI_FLASH]
1 parent 84a9052 commit f8972ab

File tree

3 files changed

+42
-10
lines changed

3 files changed

+42
-10
lines changed

Firmware/drivers/headers/ih/drivers/ih_iexternal_flash.hpp

+7-1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,11 @@ class IFlashStorageDriver
2424
, const std::uint32_t _blockSize
2525
) = 0;
2626

27+
virtual void requestReadBlock(
28+
const std::uint32_t _address
29+
, const std::uint32_t _blockSize
30+
) = 0;
31+
2732
virtual void requestChipErase() = 0;
2833

2934
virtual void requestDeviceId() = 0;
@@ -41,7 +46,8 @@ class IFlashStorageDriver
4146

4247
public:
4348

44-
Simple::Signal<void()> onBlockWriteCompleted;
49+
Simple::Signal<void()> onBlockWriteRequestCompleted;
50+
Simple::Signal<void()> onBlockReadRequestCompleted;
4551
Simple::Signal<void()> onRequestDeviceIdCompleted;
4652
Simple::Signal<void(std::uint32_t)> onRequestJedecIdCompleted;
4753

Firmware/drivers/winbondflash/inc/windbondflash/winbond_flash.hpp

+5
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ class WinbondFlash
3939
, const std::uint32_t _blockSize
4040
)override;
4141

42+
void requestReadBlock(
43+
const std::uint32_t _address
44+
, const std::uint32_t _blockSize
45+
) override;
46+
4247
void requestChipErase() override;
4348

4449
void requestDeviceId() override;

Firmware/drivers/winbondflash/winbond_flash.cpp

+30-9
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,16 @@ WinbondFlash::requestWriteBlock(
2828
, const std::uint32_t _blockSize
2929
)
3030
{
31+
onBlockWriteRequestCompleted.emit();
32+
}
33+
34+
void
35+
WinbondFlash::requestReadBlock(
36+
const std::uint32_t _address
37+
, const std::uint32_t _blockSize
38+
)
39+
{
40+
onBlockReadRequestCompleted.emit();
3141
}
3242

3343
void
@@ -43,20 +53,20 @@ WinbondFlash::requestChipErase()
4353
void
4454
WinbondFlash::requestDeviceId()
4555
{
46-
Interface::Spi::Transaction requestIdCommandTransaction = writeTransaction(
56+
Interface::Spi::Transaction requestId = writeTransaction(
4757
WindbondCommandSet::ReadUniqueId
4858
, WindbondCommandSet::DummyByte
4959
, WindbondCommandSet::DummyByte
5060
, WindbondCommandSet::DummyByte
5161
, WindbondCommandSet::DummyByte
5262
);
53-
m_pBusPtr->addTransaction( std::move( requestIdCommandTransaction ) );
63+
m_pBusPtr->addTransaction( std::move( requestId ) );
5464

5565

56-
Interface::Spi::Transaction receiveDataTranscation =
66+
Interface::Spi::Transaction receiveData =
5767
readTransaction( WindbondCommandSet::UniqueIdLength );
5868

59-
receiveDataTranscation.afterTransaction =
69+
receiveData.afterTransaction =
6070
[this]
6171
{
6272
const auto& dmaReceiveBuffer = m_pBusPtr->getDmaBufferReceive();
@@ -68,7 +78,7 @@ WinbondFlash::requestDeviceId()
6878
onRequestDeviceIdCompleted.emit();
6979
};
7080

71-
m_pBusPtr->addTransaction( std::move( receiveDataTranscation ) );
81+
m_pBusPtr->addTransaction( std::move( receiveData ) );
7282
m_pBusPtr->runQueue();
7383
}
7484

@@ -80,9 +90,9 @@ WinbondFlash::requestJEDEDCId()
8090
);
8191
m_pBusPtr->addTransaction( std::move( requestIdCommandTransaction ) );
8292

83-
Interface::Spi::Transaction receiveDataTranscation =
93+
Interface::Spi::Transaction receiveData =
8494
readTransaction( WindbondCommandSet::JedecIdLength );
85-
receiveDataTranscation.afterTransaction =
95+
receiveData.afterTransaction =
8696
[this]
8797
{
8898
std::uint32_t JedecDeviceId{};
@@ -93,18 +103,29 @@ WinbondFlash::requestJEDEDCId()
93103
}
94104
onRequestJedecIdCompleted.emit(JedecDeviceId);
95105
};
106+
m_pBusPtr->addTransaction( std::move( receiveData ) );
107+
m_pBusPtr->runQueue();
96108
}
97109

98110
void
99111
WinbondFlash::requestEnterSleepMode()
100112
{
101-
113+
Interface::Spi::Transaction requestPowerdown = writeTransaction(
114+
WindbondCommandSet::PowerDownMode
115+
);
116+
m_pBusPtr->addTransaction( std::move( requestPowerdown ) );
117+
m_pBusPtr->runQueue();
102118
}
103119

104120
void
105121
WinbondFlash::requestRestoreFromSleepMode()
106122
{
107-
123+
Interface::Spi::Transaction requestRestoreFromSleep
124+
= writeTransaction(
125+
WindbondCommandSet::ResumePowerDownMode
126+
);
127+
m_pBusPtr->addTransaction( std::move( requestRestoreFromSleep ) );
128+
m_pBusPtr->runQueue();
108129
};
109130

110131
IFlashStorageDriver::TDeviceIdType&

0 commit comments

Comments
 (0)