1
0
mirror of https://github.com/esp8266/Arduino.git synced 2025-06-25 06:22:11 +03:00

ESP class - move interpretation of magic bytes in function

This commit is contained in:
Markus Sattler
2015-12-19 14:30:13 +01:00
parent a07838a19c
commit 898737422e
2 changed files with 53 additions and 36 deletions

View File

@ -177,7 +177,36 @@ uint32_t EspClass::getFlashChipSize(void)
uint8_t * bytes = (uint8_t *) &data; uint8_t * bytes = (uint8_t *) &data;
// read first 4 byte (magic byte + flash config) // read first 4 byte (magic byte + flash config)
if(spi_flash_read(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) { if(spi_flash_read(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) {
switch((bytes[3] & 0xf0) >> 4) { return magicFlashChipSize((bytes[3] & 0xf0) >> 4);
}
return 0;
}
uint32_t EspClass::getFlashChipSpeed(void)
{
uint32_t data;
uint8_t * bytes = (uint8_t *) &data;
// read first 4 byte (magic byte + flash config)
if(spi_flash_read(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) {
return magicFlashChipSpeed(bytes[3] & 0x0F);
}
return 0;
}
FlashMode_t EspClass::getFlashChipMode(void)
{
FlashMode_t mode = FM_UNKNOWN;
uint32_t data;
uint8_t * bytes = (uint8_t *) &data;
// read first 4 byte (magic byte + flash config)
if(spi_flash_read(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) {
mode = magicFlashChipMode(bytes[2]);
}
return mode;
}
uint32_t EspClass::magicFlashChipSize(uint8_t byte) {
switch(byte & 0x0F) {
case 0x0: // 4 Mbit (512KB) case 0x0: // 4 Mbit (512KB)
return (512_kB); return (512_kB);
case 0x1: // 2 MBit (256KB) case 0x1: // 2 MBit (256KB)
@ -198,16 +227,9 @@ uint32_t EspClass::getFlashChipSize(void)
return 0; return 0;
} }
} }
return 0;
}
uint32_t EspClass::getFlashChipSpeed(void) uint32_t EspClass::magicFlashChipSpeed(uint8_t byte) {
{ switch(byte & 0x0F) {
uint32_t data;
uint8_t * bytes = (uint8_t *) &data;
// read first 4 byte (magic byte + flash config)
if(spi_flash_read(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) {
switch(bytes[3] & 0x0F) {
case 0x0: // 40 MHz case 0x0: // 40 MHz
return (40_MHz); return (40_MHz);
case 0x1: // 26 MHz case 0x1: // 26 MHz
@ -220,21 +242,12 @@ uint32_t EspClass::getFlashChipSpeed(void)
return 0; return 0;
} }
} }
return 0;
}
FlashMode_t EspClass::getFlashChipMode(void) FlashMode_t EspClass::magicFlashChipMode(uint8_t byte) {
{ FlashMode_t mode = (FlashMode_t) byte;
FlashMode_t mode = FM_UNKNOWN;
uint32_t data;
uint8_t * bytes = (uint8_t *) &data;
// read first 4 byte (magic byte + flash config)
if(spi_flash_read(0x0000, &data, 4) == SPI_FLASH_RESULT_OK) {
mode = (FlashMode_t) bytes[2];
if(mode > FM_DOUT) { if(mode > FM_DOUT) {
mode = FM_UNKNOWN; mode = FM_UNKNOWN;
} }
}
return mode; return mode;
} }

View File

@ -117,6 +117,10 @@ class EspClass {
FlashMode_t getFlashChipMode(); FlashMode_t getFlashChipMode();
uint32_t getFlashChipSizeByChipId(); uint32_t getFlashChipSizeByChipId();
uint32_t magicFlashChipSize(uint8_t byte);
uint32_t magicFlashChipSpeed(uint8_t byte);
FlashMode_t magicFlashChipMode(uint8_t byte);
bool checkFlashConfig(bool needsEquals = false); bool checkFlashConfig(bool needsEquals = false);
bool flashEraseSector(uint32_t sector); bool flashEraseSector(uint32_t sector);