@@ -28,7 +28,31 @@ WinbondFlash::requestWriteBlock(
28
28
, const std::uint32_t _blockSize
29
29
)
30
30
{
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 ();
32
56
}
33
57
34
58
void
@@ -37,7 +61,53 @@ WinbondFlash::requestReadBlock(
37
61
, const std::uint32_t _blockSize
38
62
)
39
63
{
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 ();
41
111
}
42
112
43
113
void
0 commit comments