1
0
Fork 0
mirror of https://github.com/betaflight/betaflight.git synced 2025-07-24 16:55:36 +03:00

Update flash drivers to support QuadSPI

- Update flash w25n01g driver to support QuadSPI.

- flash_m25p16 update for QuadSPI support

- w25m driver update for QuadSPI support

- Use 100Mhz (ULTRAFAST) clock for QuadSPI w25n01

- Conditionalize QUADSPI code in w25n01g driver

- Use handle instead of handle_u
This commit is contained in:
Dominic Clifton 2019-05-07 14:55:59 +09:00 committed by jflyper
parent c0ee056d68
commit dcd138ae20
7 changed files with 385 additions and 148 deletions

View file

@ -84,7 +84,7 @@ static bool w25m_isReady(flashDevice_t *fdevice)
for (int die = 0 ; die < dieCount ; die++) {
if (dieDevice[die].couldBeBusy) {
w25m_dieSelect(fdevice->busdev, die);
w25m_dieSelect(fdevice->io.handle.busdev, die);
if (!dieDevice[die].vTable->isReady(&dieDevice[die])) {
return false;
}
@ -115,8 +115,9 @@ bool w25m_detect(flashDevice_t *fdevice, uint32_t chipID)
dieCount = 2;
for (int die = 0 ; die < dieCount ; die++) {
w25m_dieSelect(fdevice->busdev, die);
dieDevice[die].busdev = fdevice->busdev;
w25m_dieSelect(fdevice->io.handle.busdev, die);
dieDevice[die].io.handle.busdev = fdevice->io.handle.busdev;
dieDevice[die].io.mode = fdevice->io.mode;
m25p16_detect(&dieDevice[die], JEDEC_ID_WINBOND_W25Q256);
}
@ -147,7 +148,7 @@ void w25m_eraseSector(flashDevice_t *fdevice, uint32_t address)
{
int dieNumber = address / dieSize;
w25m_dieSelect(fdevice->busdev, dieNumber);
w25m_dieSelect(fdevice->io.handle.busdev, dieNumber);
dieDevice[dieNumber].vTable->eraseSector(&dieDevice[dieNumber], address % dieSize);
}
@ -155,7 +156,7 @@ void w25m_eraseSector(flashDevice_t *fdevice, uint32_t address)
void w25m_eraseCompletely(flashDevice_t *fdevice)
{
for (int dieNumber = 0 ; dieNumber < dieCount ; dieNumber++) {
w25m_dieSelect(fdevice->busdev, dieNumber);
w25m_dieSelect(fdevice->io.handle.busdev, dieNumber);
dieDevice[dieNumber].vTable->eraseCompletely(&dieDevice[dieNumber]);
}
}
@ -168,7 +169,7 @@ void w25m_pageProgramBegin(flashDevice_t *fdevice, uint32_t address)
UNUSED(fdevice);
currentWriteDie = address / dieSize;
w25m_dieSelect(fdevice->busdev, currentWriteDie);
w25m_dieSelect(fdevice->io.handle.busdev, currentWriteDie);
currentWriteAddress = address % dieSize;
dieDevice[currentWriteDie].vTable->pageProgramBegin(&dieDevice[currentWriteDie], currentWriteAddress);
}
@ -210,7 +211,7 @@ int w25m_readBytes(flashDevice_t *fdevice, uint32_t address, uint8_t *buffer, in
uint32_t dieAddress = address % dieSize;
tlen = MIN(dieAddress + rlen, dieSize) - dieAddress;
w25m_dieSelect(fdevice->busdev, dieNumber);
w25m_dieSelect(fdevice->io.handle.busdev, dieNumber);
rbytes = dieDevice[dieNumber].vTable->readBytes(&dieDevice[dieNumber], dieAddress, buffer, tlen);