|
|
@@ -182,10 +182,9 @@ void SerialFlashChip::write(uint32_t addr, const void *buf, uint32_t len) |
|
|
|
const uint8_t *p = (const uint8_t *)buf; |
|
|
|
uint32_t max, pagelen; |
|
|
|
|
|
|
|
//Serial.println("write"); |
|
|
|
//Serial.printf("WR: addr %08X, len %d\n", addr, len); |
|
|
|
do { |
|
|
|
if (busy) wait(); |
|
|
|
//Serial.printf("pagelen=%d\n", pagelen); |
|
|
|
SPI.beginTransaction(SPICONFIG); |
|
|
|
CSASSERT(); |
|
|
|
// write enable command |
|
|
@@ -193,25 +192,24 @@ void SerialFlashChip::write(uint32_t addr, const void *buf, uint32_t len) |
|
|
|
CSRELEASE(); |
|
|
|
max = 256 - (addr & 0xFF); |
|
|
|
pagelen = (len <= max) ? len : max; |
|
|
|
len -= pagelen; |
|
|
|
//Serial.printf("WR: addr %08X, pagelen %d\n", addr, pagelen); |
|
|
|
CSASSERT(); |
|
|
|
if (flags & FLAG_32BIT_ADDR) { |
|
|
|
//Serial.printf("write 32 bit addr %08X %02X\n", addr, addr >> 24); |
|
|
|
SPI.transfer(0x02); |
|
|
|
SPI.transfer(0x02); // program page command |
|
|
|
SPI.transfer16(addr >> 16); |
|
|
|
SPI.transfer16(addr); |
|
|
|
} else { |
|
|
|
SPI.transfer16(0x0200 | ((addr >> 16) & 255)); |
|
|
|
SPI.transfer16(addr); |
|
|
|
} |
|
|
|
// program page command |
|
|
|
addr += pagelen; |
|
|
|
len -= pagelen; |
|
|
|
do { |
|
|
|
SPI.transfer(*p++); |
|
|
|
} while (--pagelen > 0); |
|
|
|
CSRELEASE(); |
|
|
|
SPI.endTransaction(); |
|
|
|
busy = 1; |
|
|
|
//Serial.printf("busy=%d\n", busy); |
|
|
|
SPI.endTransaction(); |
|
|
|
} while (len > 0); |
|
|
|
} |
|
|
|
|