mirror of
https://git.intern.spaceteamaachen.de/ALPAKA/driver-w25qxxx.git
synced 2025-06-10 02:26:00 +00:00
A couple of bugfixes
This commit is contained in:
parent
e2adee029e
commit
789fa4cd3e
@ -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);
|
||||
|
@ -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
|
||||
|
@ -81,10 +81,10 @@ namespace sta
|
||||
uint32_t address_;
|
||||
|
||||
uint8_t buffer_[W25QXX_PAGE_SIZE];
|
||||
uint8_t ptr_;
|
||||
uint32_t ptr_;
|
||||
};
|
||||
} // namespace sta
|
||||
|
||||
#include <sta/utils/logger.tpp>
|
||||
|
||||
#endif // STA_UTILS_LOGGER_HPP
|
||||
#endif // STA_UTILS_LOGGER_HPP
|
||||
|
@ -49,7 +49,7 @@ namespace sta
|
||||
|
||||
// Convert the data to a byte array.
|
||||
uint8_t * bytes = reinterpret_cast<uint8_t*>(&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 <typename T>
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user