From 0de96367af41790e3a1b1f085fa825f2afbebfc6 Mon Sep 17 00:00:00 2001 From: dario Date: Sat, 25 May 2024 14:23:46 +0200 Subject: [PATCH] Fixed the binary search --- src/w25qxx.cpp | 40 +++++++++++++++++++++++++++++----------- 1 file changed, 29 insertions(+), 11 deletions(-) diff --git a/src/w25qxx.cpp b/src/w25qxx.cpp index 61f0287..3351bbe 100644 --- a/src/w25qxx.cpp +++ b/src/w25qxx.cpp @@ -81,22 +81,26 @@ namespace sta while (left < right) { middle = (left + right) / 2; + STA_DEBUG_PRINTF("left=%d, middle=%d, right=%d", left, middle, right); readData(middle * bytes, buffer, bytes); - STA_DEBUG_PRINTF("Left %d Middle %d Right %d\n", left, middle, right); if (criterion(buffer)) { - left = middle+1; + left = middle + 1; } else { - right = middle-1; + right = middle - 1; } } + middle = (left + right) / 2; + readData(middle * bytes, buffer, bytes); - if (!criterion(buffer)) - middle -= 1; + if (criterion(buffer)) + { + middle += 1; + } delete[] buffer; @@ -189,13 +193,27 @@ namespace sta } else { - uint8_t addrBuffer[3] = { - (uint8_t) (address >> 16), - (uint8_t) (address >> 8), - (uint8_t) (address) - }; + if (fast) + { + uint8_t addrBuffer[4] = { + (uint8_t) (address >> 16), + (uint8_t) (address >> 8), + (uint8_t) (address), + 0x00 // Dummy byte for fast mode + }; - return busRead(instruction, buffer, length, addrBuffer, 3); + return busRead(instruction, buffer, length, addrBuffer, 4); + } + else + { + uint8_t addrBuffer[3] = { + (uint8_t) (address >> 16), + (uint8_t) (address >> 8), + (uint8_t) (address) + }; + + return busRead(instruction, buffer, length, addrBuffer, 3); + } } }