diff --git a/include/sta/drivers/w25qxx.hpp b/include/sta/drivers/w25qxx.hpp index 3e8e962..79c96c0 100644 --- a/include/sta/drivers/w25qxx.hpp +++ b/include/sta/drivers/w25qxx.hpp @@ -209,7 +209,7 @@ namespace sta * @remarks Afterwards, the device won't accept any instructions for a duration T_SE. This can be checked * by reading the busy bit. * - * @param address The address of the sector to erase. + * @param address The number of the sector to erase. Here, 0 is the first sector, 1 the second and so on. * @return bool Returns 1 if the operation was successful, 0 otherwise. */ uint8_t sectorErase(uint32_t address); diff --git a/include/sta/drivers/w25qxx_defs.hpp b/include/sta/drivers/w25qxx_defs.hpp index 8f0b86a..897b625 100644 --- a/include/sta/drivers/w25qxx_defs.hpp +++ b/include/sta/drivers/w25qxx_defs.hpp @@ -39,12 +39,14 @@ #define W25QXX_PAGE_PROGAM 0x02 #define W25QXX_QUAD_PAGE_PROGAM 0x32 -#define W25QXX_SECTOR_ERASE 0x21 +#define W25QXX_SECTOR_ERASE 0x20 #define W25QXX_BLOCK_ERASE_32_KB 0x52 #define W25QXX_BLOCK_ERASE_64_KB 0xD8 #define W25QXX_READ 0x03 +#define W25QXX_READ_32_BIT 0x13 #define W25QXX_FAST_READ 0x0B +#define W25QXX_FAST_READ_32_BIT 0x0C #define W25QXX_FAST_READ_DUAL_OUT 0x3B #define W25QXX_FAST_READ_QUAD_OUT 0x6B #define W25QXX_SFDP_REG 0x5A diff --git a/include/sta/utils/logger.hpp b/include/sta/utils/logger.hpp index 5491e23..8465c67 100644 --- a/include/sta/utils/logger.hpp +++ b/include/sta/utils/logger.hpp @@ -81,10 +81,10 @@ namespace sta uint32_t address_; uint8_t buffer_[W25QXX_PAGE_SIZE]; - uint8_t ptr_; + uint32_t ptr_; }; } // namespace sta #include -#endif // STA_UTILS_LOGGER_HPP \ No newline at end of file +#endif // STA_UTILS_LOGGER_HPP diff --git a/include/sta/utils/logger.tpp b/include/sta/utils/logger.tpp index 4c1501c..f5db5af 100644 --- a/include/sta/utils/logger.tpp +++ b/include/sta/utils/logger.tpp @@ -49,7 +49,7 @@ namespace sta // Convert the data to a byte array. uint8_t * bytes = reinterpret_cast(&data); - uint8_t length = sizeof(T); + uint32_t length = sizeof(T); // Bytes remaining until the page is full. uint8_t remaining = W25QXX_PAGE_SIZE - ptr_; @@ -89,14 +89,6 @@ namespace sta ptr_ = 0; flash_->sectorErase(address_); - - /* - for (uint32_t i = start_; i < end_; i++) - { - flash_->sectorErase(i * W25QXX_SECTOR_SIZE); - } - - */ } template diff --git a/src/w25qxx.cpp b/src/w25qxx.cpp index 737b940..66dcbcf 100644 --- a/src/w25qxx.cpp +++ b/src/w25qxx.cpp @@ -101,13 +101,6 @@ namespace sta } middle = (left + right) / 2; - - readData(middle * bytes, buffer, bytes); - if (criterion(buffer)) - { - middle += 1; - } - delete[] buffer; return middle * bytes; @@ -190,25 +183,34 @@ namespace sta uint8_t instruction = fast ? W25QXX_FAST_READ : W25QXX_READ; - // In fast mode we have to send a 8 dummy clock cycles first. - if (fast) - { - // TODO - } - while (isBusy()) {} // Depending on address mode, send 3 bytes or 4 bytes. if (addrMode_ == AddressMode::_32BIT) { - uint8_t addrBuffer[4] = { - (uint8_t) (address >> 24), - (uint8_t) (address >> 16), - (uint8_t) (address >> 8), - (uint8_t) (address) - }; + if (fast) + { + uint8_t addrBuffer[5] = { + (uint8_t) (address >> 24), + (uint8_t) (address >> 16), + (uint8_t) (address >> 8), + (uint8_t) (address), + 0x00 // Dummy byte for fast mode + }; - return busRead(instruction, buffer, length, addrBuffer, 4); + return busRead(instruction, buffer, length, addrBuffer, 5); + } + else + { + uint8_t addrBuffer[5] = { + (uint8_t) (address >> 24), + (uint8_t) (address >> 16), + (uint8_t) (address >> 8), + (uint8_t) (address) + }; + + return busRead(instruction, buffer, length, addrBuffer, 4); + } } else { @@ -433,24 +435,24 @@ namespace sta if (addrMode_ == AddressMode::_32BIT) { - uint8_t addrBuffer[4] = { - (uint8_t) (address >> 24), - (uint8_t) (address >> 16), - (uint8_t) (address >> 8), - (uint8_t) (address) - }; + uint8_t addrBuffer[4] = { + (uint8_t) (address >> 24), + (uint8_t) (address >> 16), + (uint8_t) (address >> 8), + (uint8_t) (address) + }; - return busWrite(W25QXX_SECTOR_ERASE, addrBuffer, 4); + return busWrite(W25QXX_SECTOR_ERASE, addrBuffer, 4); } else { - uint8_t addrBuffer[3] = { - (uint8_t) (address >> 16), - (uint8_t) (address >> 8), - (uint8_t) (address) - }; + uint8_t addrBuffer[3] = { + (uint8_t) (address >> 16), + (uint8_t) (address >> 8), + (uint8_t) (address) + }; - return busWrite(W25QXX_SECTOR_ERASE, addrBuffer, 3); + return busWrite(W25QXX_SECTOR_ERASE, addrBuffer, 3); } return 1;