Skip to content

Commit 278a78a

Browse files
Added flash read test #17 [WINBOND]
1 parent 7b49e08 commit 278a78a

File tree

3 files changed

+53
-4
lines changed

3 files changed

+53
-4
lines changed

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

+1-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ template <typename TSpiBusInstance> class WinbondFlashDriver
5555
{
5656
constexpr std::uint16_t PageSize = 256;
5757

58-
assert(_blockSize > PageSize);
58+
assert(_blockSize < PageSize);
5959

6060
using TTupleRead = decltype(std::forward_as_tuple(
6161
WindbondCommandSet::ReadData,
@@ -77,7 +77,6 @@ template <typename TSpiBusInstance> class WinbondFlashDriver
7777

7878
std::fill_n(
7979
transmitBuffer.begin(),
80-
transmitBuffer.end(),
8180
_blockSize,
8281
WindbondCommandSet::DummyByte);
8382

Firmware/firmware_tests/drivers/spi/spi_fake_backend.hpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,9 @@ class SpiBusBackendStub
3838
std::span<std::uint8_t> _receiveArray)
3939
{
4040
BusTransactionsTransmit.emplace_back(_transmitArray.data(), _transmitArray.size());
41-
BusTransactionsTransmit.emplace_back(_transmitArray.data(), _receiveArray.size());
41+
BusTransactionsTransmit.emplace_back(_receiveArray.data(), _receiveArray.size());
4242

43+
m_spiMocker.sentData(std::span(_transmitArray.data(), _transmitArray.size()));
4344
const auto& receivedRange = m_spiMocker.receivedData();
4445

4546
auto streamSpan = std::span(

Firmware/firmware_tests/drivers/windond_flash/flash_driver_test_suite.cpp

+50-1
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,55 @@ TEST_F(FlashDriverTest, RequestWriteBlock)
8686

8787
auto task = flashDriver.pageWrite(address, std::span(TransmitData.data(), TransmitData.size()));
8888
CoroUtils::syncWait(task);
89+
}
90+
91+
TEST_F(FlashDriverTest, RequestReadBlock)
92+
{
93+
94+
EXPECT_CALL(getMockGpio(), setGpioLow()).Times(1);
95+
EXPECT_CALL(getMockGpio(), setGpioHigh()).Times(1);
96+
97+
using TStream = std::array<std::uint8_t, 7>;
98+
99+
auto ReceiveData{
100+
TStream{0xEF, 0xFF, 0x18, 0x19, 0x20, 0x21, 0x22}};
101+
102+
auto Dummy{TStream{}};
103+
104+
EXPECT_CALL(spiMockAccess(), receivedData)
105+
.Times(1)
106+
.WillOnce(Return(std::span(
107+
reinterpret_cast<const std::uint8_t*>(ReceiveData.data()), ReceiveData.size())));
108+
109+
constexpr std::uint32_t address{0x10'00};
110+
111+
constexpr std::size_t ReadCommandLength = 4;
112+
constexpr const std::array<std::uint8_t, ReadCommandLength> readCommand{
113+
WindbondCommandSet::ReadData,
114+
static_cast<std::uint8_t>((address & 0x00'FF'00'00) >> 16),
115+
static_cast<std::uint8_t>((address & 0x00'00'FF'00) >> 8),
116+
static_cast<std::uint8_t>(address & 0x00'00'00'FF)};
117+
118+
testing::Sequence sequence;
119+
120+
// https://gist.github.com/cppengineer/f1b6bc0f04ac7c29e963364f2c564a5e
121+
122+
const auto DummySpan = std::span<const std::uint8_t>(Dummy.data(), Dummy.size());
123+
124+
const auto ReadDataSpan =
125+
std::span<const std::uint8_t>(readCommand.data(), readCommand.size());
126+
127+
EXPECT_CALL(spiMockAccess(), sentData)
128+
.With(SpanChecker(ReadDataSpan))
129+
.Times(1)
130+
.InSequence(sequence);
131+
EXPECT_CALL(spiMockAccess(), sentData)
132+
.With(SpanChecker(std::span(DummySpan.data(), DummySpan.size())))
133+
.Times(1)
134+
.InSequence(sequence);
135+
136+
auto task = flashDriver.requestReadBlock(address, ReceiveData.size());
137+
auto readSpan = CoroUtils::syncWait(task);
89138

90-
//EXPECT_EQ(jedecId, fToJedecId(ExpectedStream));
139+
EXPECT_TRUE(std::ranges::equal(readSpan, ReceiveData));
91140
}

0 commit comments

Comments
 (0)