@@ -7,9 +7,7 @@ extern "C" {
77#include " bitbang.h"
88
99#include < algorithm>
10- #include < array>
1110#include < concepts>
12- #include < cstring>
1311#include < expected>
1412#include < limits>
1513
@@ -55,11 +53,7 @@ class SDCard {
5553
5654 ErrorStatus read_sector (uint32_t sector, std::span<uint8_t , 512 > buf)
5755 {
58- if (!initialized ||
59- (!sdhc && sector > std::numeric_limits<uint32_t >::max () / 512U ))
60- return NoREADY;
61- uint32_t addr = sdhc ? sector : sector * 512U ;
62- return transport.read_blocks (addr, buf);
56+ return read_sectors (sector, buf);
6357 }
6458
6559 ErrorStatus read_sectors (uint32_t start_sector, std::span<uint8_t > buf)
@@ -79,6 +73,7 @@ class SDCard {
7973 {
8074 uint32_t sector = start_sector + static_cast <uint32_t >(block_offset);
8175 uint32_t addr = sdhc ? sector : sector * 512U ;
76+
8277 std::size_t blocks_remaining =
8378 static_cast <std::size_t >(block_count) - block_offset;
8479 std::size_t blocks_this_transfer =
@@ -117,17 +112,6 @@ class SDCard {
117112 {
118113 uint32_t sector = start_sector + static_cast <uint32_t >(block_offset);
119114 uint32_t addr = sdhc ? sector : sector * 512U ;
120- const uint8_t * source = buf.data () + block_offset * 512U ;
121- bool aligned = (reinterpret_cast <uintptr_t >(source) & 3U ) == 0U ;
122-
123- if (!aligned)
124- {
125- std::memcpy (write_bounce.data (), source, write_bounce.size ());
126- if (transport.write_blocks (addr, write_bounce) != READY )
127- return NoREADY;
128- ++block_offset;
129- continue ;
130- }
131115
132116 std::size_t blocks_remaining =
133117 static_cast <std::size_t >(block_count) - block_offset;
@@ -154,7 +138,6 @@ class SDCard {
154138 bool initialized = false ;
155139 bool sdhc = false ;
156140 CID card_cid = {};
157- alignas (4 ) std::array<uint8_t , 512 > write_bounce{};
158141};
159142
160143// --- compile-time transport selection -------------------------------------
0 commit comments