瀏覽代碼

Fix unaligned writes

main
PaulStoffregen 10 年之前
父節點
當前提交
8d237c1411
共有 1 個檔案被更改,包括 6 行新增8 行删除
  1. +6
    -8
      SerialFlashChip.cpp

+ 6
- 8
SerialFlashChip.cpp 查看文件

const uint8_t *p = (const uint8_t *)buf; const uint8_t *p = (const uint8_t *)buf;
uint32_t max, pagelen; uint32_t max, pagelen;


//Serial.println("write");
//Serial.printf("WR: addr %08X, len %d\n", addr, len);
do { do {
if (busy) wait(); if (busy) wait();
//Serial.printf("pagelen=%d\n", pagelen);
SPI.beginTransaction(SPICONFIG); SPI.beginTransaction(SPICONFIG);
CSASSERT(); CSASSERT();
// write enable command // write enable command
CSRELEASE(); CSRELEASE();
max = 256 - (addr & 0xFF); max = 256 - (addr & 0xFF);
pagelen = (len <= max) ? len : max; pagelen = (len <= max) ? len : max;
len -= pagelen;
//Serial.printf("WR: addr %08X, pagelen %d\n", addr, pagelen);
CSASSERT(); CSASSERT();
if (flags & FLAG_32BIT_ADDR) { 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 >> 16);
SPI.transfer16(addr); SPI.transfer16(addr);
} else { } else {
SPI.transfer16(0x0200 | ((addr >> 16) & 255)); SPI.transfer16(0x0200 | ((addr >> 16) & 255));
SPI.transfer16(addr); SPI.transfer16(addr);
} }
// program page command
addr += pagelen;
len -= pagelen;
do { do {
SPI.transfer(*p++); SPI.transfer(*p++);
} while (--pagelen > 0); } while (--pagelen > 0);
CSRELEASE(); CSRELEASE();
SPI.endTransaction();
busy = 1; busy = 1;
//Serial.printf("busy=%d\n", busy);
SPI.endTransaction();
} while (len > 0); } while (len > 0);
} }



Loading…
取消
儲存