Skip to content

Commit 96fc13b

Browse files
ValentiWorkLearningVKorniienko
authored and
VKorniienko
committed
Added draft for fastread, read, write block imeplemntation #17 [SPI_FLASH]
1 parent f8972ab commit 96fc13b

File tree

3 files changed

+82
-2
lines changed

3 files changed

+82
-2
lines changed

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

+5
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ class IFlashStorageDriver
2929
, const std::uint32_t _blockSize
3030
) = 0;
3131

32+
virtual void requestFastReadBlock(
33+
const std::uint32_t _address
34+
, const std::uint32_t _blockSize
35+
) = 0;
36+
3237
virtual void requestChipErase() = 0;
3338

3439
virtual void requestDeviceId() = 0;

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

+5
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@ class WinbondFlash
4444
, const std::uint32_t _blockSize
4545
) override;
4646

47+
void requestFastReadBlock(
48+
const std::uint32_t _address
49+
, const std::uint32_t _blockSize
50+
) override;
51+
4752
void requestChipErase() override;
4853

4954
void requestDeviceId() override;

Firmware/drivers/winbondflash/winbond_flash.cpp

+72-2
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,31 @@ WinbondFlash::requestWriteBlock(
2828
, const std::uint32_t _blockSize
2929
)
3030
{
31-
onBlockWriteRequestCompleted.emit();
31+
Interface::Spi::Transaction requestWriteEnable = writeTransaction(
32+
WindbondCommandSet::WriteEnable
33+
);
34+
m_pBusPtr->addTransaction( std::move( requestWriteEnable ) );
35+
36+
Interface::Spi::Transaction requestWriteAddress = writeTransaction(
37+
WindbondCommandSet::PageProgram
38+
, ( _address >> 16 )
39+
, ( _address >> 8 )
40+
, ( _address >> 0 )
41+
);
42+
m_pBusPtr->addTransaction( std::move( requestWriteAddress ) );
43+
44+
45+
Interface::Spi::TransactionDescriptor blockSetup{
46+
nullptr
47+
, [this]{ onBlockWriteRequestCompleted.emit(); }
48+
, Interface::Spi::TransactionDescriptor::DataSequence{
49+
reinterpret_cast<const std::uint8_t*>( _blockData )
50+
, _blockSize
51+
}
52+
};
53+
54+
m_pBusPtr->addXferTransaction( std::move( blockSetup ) );
55+
m_pBusPtr->runQueue();
3256
}
3357

3458
void
@@ -37,7 +61,53 @@ WinbondFlash::requestReadBlock(
3761
, const std::uint32_t _blockSize
3862
)
3963
{
40-
onBlockReadRequestCompleted.emit();
64+
Interface::Spi::Transaction requestRead = writeTransaction(
65+
WindbondCommandSet::ReadData
66+
, ( _address >> 16 )
67+
, ( _address >> 8 )
68+
, ( _address >> 0 )
69+
);
70+
m_pBusPtr->addTransaction( std::move( requestRead ) );
71+
72+
Interface::Spi::Transaction receiveData =
73+
readTransaction( _blockSize );
74+
75+
receiveData.afterTransaction =
76+
[this]
77+
{
78+
onBlockReadRequestCompleted.emit();
79+
};
80+
81+
m_pBusPtr->addTransaction( std::move( receiveData ) );
82+
m_pBusPtr->runQueue();
83+
}
84+
85+
void
86+
WinbondFlash::requestFastReadBlock(
87+
const std::uint32_t _address
88+
, const std::uint32_t _blockSize
89+
)
90+
{
91+
Interface::Spi::Transaction requestRead = writeTransaction(
92+
WindbondCommandSet::ReadData
93+
, ( _address >> 16 )
94+
, ( _address >> 8 )
95+
, ( _address >> 0 )
96+
, 0xFF
97+
);
98+
m_pBusPtr->addTransaction( std::move( requestRead ) );
99+
100+
Interface::Spi::Transaction receiveData =
101+
readTransaction( _blockSize );
102+
103+
receiveData.afterTransaction =
104+
[this]
105+
{
106+
onBlockReadRequestCompleted.emit();
107+
};
108+
109+
m_pBusPtr->addTransaction( std::move( receiveData ) );
110+
m_pBusPtr->runQueue();
41111
}
42112

43113
void

0 commit comments

Comments
 (0)