From ab8cb3955a9a2057c6b4261f6eda755b353f5412 Mon Sep 17 00:00:00 2001 From: jjwbruijn Date: Sun, 31 Dec 2023 15:07:26 +0100 Subject: [PATCH] Fixed M2 0024 issue->0025 --- binaries/Tag/SOLUM_154_SSD1619-00-0025.bin | Bin 0 -> 61141 bytes binaries/Tag/SOLUM_29_BW_LOWTEMP-21-0025.bin | Bin 0 -> 61266 bytes binaries/Tag/SOLUM_29_SSD1619-01-0025.bin | Bin 0 -> 61522 bytes binaries/Tag/SOLUM_29_UC8151-11-0025.bin | Bin 0 -> 58811 bytes binaries/Tag/SOLUM_42_SSD1619-02-0025.bin | Bin 0 -> 61468 bytes zbs243_Tag_FW/drawing.c | 50 +- zbs243_Tag_FW/main.c | 16 +- zbs243_Tag_FW/settings.h | 12 +- zbs243_Tag_FW/syncedproto.c | 18 +- zbs243_Tag_FW/userinterface.c | 24 +- zbs243_shared/board/boardZBS29common.c | 8 +- zbs243_shared/board/ssd1619.c | 29 +- zbs243_shared/board/zbs29_BW_ssd1619/screen.c | 1 + zbs243_shared/eeprom.c | 546 +++++++++--------- 14 files changed, 346 insertions(+), 358 deletions(-) create mode 100644 binaries/Tag/SOLUM_154_SSD1619-00-0025.bin create mode 100644 binaries/Tag/SOLUM_29_BW_LOWTEMP-21-0025.bin create mode 100644 binaries/Tag/SOLUM_29_SSD1619-01-0025.bin create mode 100644 binaries/Tag/SOLUM_29_UC8151-11-0025.bin create mode 100644 binaries/Tag/SOLUM_42_SSD1619-02-0025.bin diff --git a/binaries/Tag/SOLUM_154_SSD1619-00-0025.bin b/binaries/Tag/SOLUM_154_SSD1619-00-0025.bin new file mode 100644 index 0000000000000000000000000000000000000000..ff0928dd6c5658f6370e694e69d6fc8f9c852753 GIT binary patch literal 61141 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

>W^c7C@KL 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 z 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 K-M{`q`14=HfvX7s literal 0 HcmV?d00001 diff --git a/binaries/Tag/SOLUM_29_SSD1619-01-0025.bin b/binaries/Tag/SOLUM_29_SSD1619-01-0025.bin new file mode 100644 index 0000000000000000000000000000000000000000..12a55c87fbe869c0ce8c3aa8b562f2022821bf21 GIT binary patch literal 61522 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 literal 0 HcmV?d00001 diff --git a/binaries/Tag/SOLUM_29_UC8151-11-0025.bin b/binaries/Tag/SOLUM_29_UC8151-11-0025.bin new file mode 100644 index 0000000000000000000000000000000000000000..97925a7d1eed412a8c73941976d614834a73a596 GIT binary patch literal 58811 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

ZZ@FG)ET>ZDzv|;XGm;nP^f7K7{ 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 literal 0 HcmV?d00001 diff --git a/binaries/Tag/SOLUM_42_SSD1619-02-0025.bin b/binaries/Tag/SOLUM_42_SSD1619-02-0025.bin new file mode 100644 index 0000000000000000000000000000000000000000..b487cb458e048023dfcdabceed1ea5c060a52247 GIT binary patch literal 61468 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 S!<%Fz?El{y5PvZr>;4x_-;z)O literal 0 HcmV?d00001 diff --git a/zbs243_Tag_FW/drawing.c b/zbs243_Tag_FW/drawing.c index 09cf0027..5443ddea 100755 --- a/zbs243_Tag_FW/drawing.c +++ b/zbs243_Tag_FW/drawing.c @@ -12,30 +12,18 @@ #include "screen.h" #include "timer.h" #include "userinterface.h" // for addIcons +#include -extern uint8_t blockbuffer[]; +uint8_t __xdata* drawBuffer; -#if (SCREEN_WIDTH == 152) -void drawImageFromBuffer(uint8_t* buffer, const uint8_t lut) { - pr("Doing raw 1bpp\n"); - epdSetup(); - if (lut) selectLUT(lut); - beginFullscreenImage(); - clearScreen(); - beginWriteFramebuffer(EPD_COLOR_BLACK); - epdSelect(); - for (uint16_t c = 0; c < (SCREEN_HEIGHT * (SCREEN_WIDTH / 8)); c++) { - epdSend(buffer[c]); - } - epdDeselect(); - endWriteFramebuffer(); - addOverlay(); - drawWithSleep(); -} -#endif void drawImageAtAddress(uint32_t addr, uint8_t lut) { - struct EepromImageHeader* __xdata eih = (struct EepromImageHeader*)blockbuffer; - eepromRead(addr, blockbuffer, sizeof(struct EepromImageHeader)); + drawBuffer = malloc(512); + if (!drawBuffer) { + pr("malloc during draw failed..\n"); + return; + } + struct EepromImageHeader* __xdata eih = (struct EepromImageHeader*)drawBuffer; + eepromRead(addr, drawBuffer, sizeof(struct EepromImageHeader)); switch (eih->dataType) { case DATATYPE_IMG_RAW_1BPP: pr("Doing raw 1bpp\n"); @@ -46,12 +34,12 @@ void drawImageAtAddress(uint32_t addr, uint8_t lut) { beginWriteFramebuffer(EPD_COLOR_BLACK); epdSelect(); for (uint16_t c = 0; c < (SCREEN_HEIGHT * (SCREEN_WIDTH / 8)); c++) { - if (c % 256 == 0) { + if (c % 512 == 0) { epdDeselect(); - eepromRead(addr + sizeof(struct EepromImageHeader) + c, blockbuffer, 256); + eepromRead(addr + sizeof(struct EepromImageHeader) + c, drawBuffer, 512); epdSelect(); } - epdSend(blockbuffer[c % 256]); + epdSend(drawBuffer[c % 512]); } epdDeselect(); endWriteFramebuffer(); @@ -64,12 +52,12 @@ void drawImageAtAddress(uint32_t addr, uint8_t lut) { beginWriteFramebuffer(EPD_COLOR_BLACK); epdSelect(); for (uint16_t c = 0; c < (SCREEN_HEIGHT * (SCREEN_WIDTH / 8)); c++) { - if (c % 256 == 0) { + if (c % 512 == 0) { epdDeselect(); - eepromRead(addr + sizeof(struct EepromImageHeader) + c, blockbuffer, 256); + eepromRead(addr + sizeof(struct EepromImageHeader) + c, drawBuffer, 512); epdSelect(); } - epdSend(blockbuffer[c % 256]); + epdSend(drawBuffer[c % 512]); } epdDeselect(); endWriteFramebuffer(); @@ -77,20 +65,22 @@ void drawImageAtAddress(uint32_t addr, uint8_t lut) { beginWriteFramebuffer(EPD_COLOR_RED); epdSelect(); for (uint16_t c = 0; c < (SCREEN_HEIGHT * (SCREEN_WIDTH / 8)); c++) { - if (c % 256 == 0) { + if (c % 512 == 0) { epdDeselect(); - eepromRead(addr + sizeof(struct EepromImageHeader) + (SCREEN_HEIGHT * (SCREEN_WIDTH / 8)) + c, blockbuffer, 256); + eepromRead(addr + sizeof(struct EepromImageHeader) + (SCREEN_HEIGHT * (SCREEN_WIDTH / 8)) + c, drawBuffer, 512); epdSelect(); } - epdSend(blockbuffer[c % 256]); + epdSend(drawBuffer[c % 512]); } epdDeselect(); endWriteFramebuffer(); break; default: // prevent drawing from an unknown file image type pr("Image with type 0x%02X was requested, but we don't know what to do with that currently...\n", eih->dataType); + free(drawBuffer); return; } + free(drawBuffer); addOverlay(); drawWithSleep(); } \ No newline at end of file diff --git a/zbs243_Tag_FW/main.c b/zbs243_Tag_FW/main.c index 74bfb701..9ea75dd9 100755 --- a/zbs243_Tag_FW/main.c +++ b/zbs243_Tag_FW/main.c @@ -41,7 +41,7 @@ uint8_t __xdata slideShowCurrentImg = 0; uint8_t __xdata slideShowRefreshCount = 1; extern uint8_t *__idata blockp; -extern uint8_t blockbuffer[]; +extern uint8_t __xdata blockbuffer[]; uint8_t *rebootP; #ifdef ENABLE_EEPROM_LOADER @@ -673,14 +673,24 @@ void main() { pr("%02X%02X", mSelfMac[4], mSelfMac[5]); pr("%02X%02X\n", mSelfMac[6], mSelfMac[7]); + for (uint16_t c = 0; c < 4096; c++) { + blockbuffer[c] = (c % 256) & 0xFF; + } + // do a little sleep, this prevents a partial boot during battery insertion - doSleep(200UL); - powerUp(INIT_EEPROM); + doSleep(2000UL); + powerUp(INIT_EEPROM | INIT_UART); + + uint8_t __idata dati; + pr("blockbuffer @%d, idata@%d\n",&blockbuffer[0], &dati); + dump(blockbuffer, 4096); + // load settings from infopage loadSettings(); // invalidate the settings, and write them back in a later state invalidateSettingsEEPROM(); + #ifdef WRITE_MAC_FROM_FLASH if (mSelfMac[7] == 0xFF && mSelfMac[6] == 0xFF) { wdt10s(); diff --git a/zbs243_Tag_FW/settings.h b/zbs243_Tag_FW/settings.h index a5114263..362d62ab 100755 --- a/zbs243_Tag_FW/settings.h +++ b/zbs243_Tag_FW/settings.h @@ -3,15 +3,15 @@ #include -#define FW_VERSION 0x0024 // version number -#define FW_VERSION_SUFFIX "-SET" // suffix, like -RC1 or whatever. +#define FW_VERSION 0x0025 // version number +#define FW_VERSION_SUFFIX "-FIX3" // suffix, like -RC1 or whatever. // #define DEBUGBLOCKS // uncomment to enable extra debug information on the block transfers // #define PRINT_LUT // uncomment if you want the tag to print the LUT for the current temperature bracket // #define ENABLE_EEPROM_LOADER // uncomment if you want to load eeprom images via the serial interface -#define ENABLE_GPIO_WAKE // uncomment to enable GPIO wake -// #define ENABLE_RETURN_DATA // enables the tag to send blocks of data back. Enabling this costs about 4 IRAM bytes -// #define LEAN_VERSION // makes a smaller version, leaving extra flash space for other things -// #define WRITE_MAC_FROM_FLASH // takes mac address from flash if none is set in the infopage +// #define ENABLE_GPIO_WAKE // uncomment to enable GPIO wake +// #define ENABLE_RETURN_DATA // enables the tag to send blocks of data back. Enabling this costs about 4 IRAM bytes +// #define LEAN_VERSION // makes a smaller version, leaving extra flash space for other things +// #define WRITE_MAC_FROM_FLASH // takes mac address from flash if none is set in the infopage #define SETTINGS_STRUCT_VERSION 0x01 diff --git a/zbs243_Tag_FW/syncedproto.c b/zbs243_Tag_FW/syncedproto.c index 2867524b..d07b14e3 100755 --- a/zbs243_Tag_FW/syncedproto.c +++ b/zbs243_Tag_FW/syncedproto.c @@ -25,9 +25,10 @@ #include "timer.h" #include "userinterface.h" #include "wdt.h" +#include "uart.h" // download-stuff -uint8_t __xdata blockbuffer[BLOCK_XFER_BUFFER_SIZE]; +uint8_t __xdata blockbuffer[BLOCK_XFER_BUFFER_SIZE] = {0}; static struct blockRequest __xdata curBlock = {0}; // used by the block-requester, contains the next request that we'll send static uint8_t __xdata curDispDataVer[8] = {0}; static struct AvailDataInfo __xdata xferDataInfo = {0}; // holds the AvailDataInfo during the transfer @@ -98,6 +99,7 @@ void dump(const uint8_t *__xdata a, const uint16_t __xdata l) { pr("\n0x%04X | ", c); } pr("%02X ", a[c]); + UartTxWait(); } pr("\n--------"); for (uint8_t c = 0; c < ROWS; c++) { @@ -314,6 +316,10 @@ static bool processBlockPart(const struct blockPart *bp) { if ((start + size) > sizeof(blockbuffer)) { size = sizeof(blockbuffer) - start; } + + // check if we already processed this blockpart + if (!(curBlock.requestedParts[bp->blockPart / 8] & (1 << (bp->blockPart % 8)))) return false; + if (checkCRC(bp, sizeof(struct blockPart) + BLOCK_PART_DATA_SIZE)) { // copy block data to buffer xMemCopy((void *)(blockbuffer + start), (const void *)bp->data, size); @@ -620,7 +626,7 @@ static bool getDataBlock(const uint16_t blockSize) { } else { // immediately start with the reception of the block data } - blockRxLoop(270); // BLOCK RX LOOP - receive a block, until the timeout has passed + blockRxLoop(290); // BLOCK RX LOOP - receive a block, until the timeout has passed powerDown(INIT_RADIO); #ifdef DEBUGBLOCKS @@ -784,10 +790,12 @@ static bool downloadImageDataToEEPROM(const struct AvailDataInfo *__xdata avail) if (getDataBlock(dataRequestSize)) { // succesfully downloaded datablock, save to eeprom powerUp(INIT_EEPROM); + timerDelay(TIMER_TICKS_PER_MS * 100); #ifdef DEBUGBLOCKS pr("Saving block %d to slot %d\n", curBlock.blockId, xferImgSlot); #endif saveImgBlockData(xferImgSlot, curBlock.blockId); + timerDelay(TIMER_TICKS_PER_MS * 100); powerDown(INIT_EEPROM); curBlock.blockId++; xferDataInfo.dataSize -= dataRequestSize; @@ -895,10 +903,6 @@ inline bool processImageDataAvail(struct AvailDataInfo *__xdata avail) { powerUp(INIT_EPD | INIT_EEPROM); drawImageFromEeprom(findImgSlot, arg.lut); powerDown(INIT_EPD | INIT_EEPROM); - - //powerUp(INIT_EEPROM | INIT_EPD); - //powerDown(INIT_EEPROM | INIT_EPD); - } else { // not found in cache, prepare to download pr("downloading image...\n"); @@ -915,8 +919,6 @@ inline bool processImageDataAvail(struct AvailDataInfo *__xdata avail) { powerUp(INIT_EPD | INIT_EEPROM); drawImageFromEeprom(xferImgSlot, arg.lut); powerDown(INIT_EPD | INIT_EEPROM); - //powerUp(INIT_EEPROM | INIT_EPD); - //powerDown(INIT_EEPROM | INIT_EPD); } else { return false; } diff --git a/zbs243_Tag_FW/userinterface.c b/zbs243_Tag_FW/userinterface.c index 8c7bc43c..9a4e7882 100755 --- a/zbs243_Tag_FW/userinterface.c +++ b/zbs243_Tag_FW/userinterface.c @@ -24,11 +24,6 @@ #include "syncedproto.h" // for APmac / Channel #include "timer.h" -// extern uint8_t __xdata mSelfMac[8]; -// extern uint8_t __xdata currentChannel; -// extern uint8_t __xdata APmac[]; -// extern uint16_t __xdata batteryVoltage; - const uint16_t __code fwVersion = FW_VERSION; const char __code fwVersionSuffix[] = FW_VERSION_SUFFIX; @@ -156,8 +151,11 @@ void afterFlashScreenSaver() { epdPrintBegin(112, 293, EPD_DIRECTION_Y, EPD_SIZE_SINGLE, EPD_COLOR_BLACK); epdpr("openepaperlink.de"); epdPrintEnd(); - +#if (HW_TYPE == SOLUM_M2_BW_29_LOWTEMP) + epdPrintBegin(110, 155, EPD_DIRECTION_Y, EPD_SIZE_SINGLE, EPD_COLOR_BLACK); +#else epdPrintBegin(110, 155, EPD_DIRECTION_Y, EPD_SIZE_SINGLE, EPD_COLOR_RED); +#endif epdpr("%02X:%02X", mSelfMac[7], mSelfMac[6]); epdpr(":%02X:%02X", mSelfMac[5], mSelfMac[4]); epdpr(":%02X:%02X", mSelfMac[3], mSelfMac[2]); @@ -204,7 +202,11 @@ void afterFlashScreenSaver() { void showSplashScreen() { if (displayCustomImage(CUSTOM_IMAGE_SPLASHSCREEN)) return; powerUp(INIT_EPD); + + #if (HW_TYPE != SOLUM_M2_BW_29_LOWTEMP) selectLUT(EPD_LUT_NO_REPEATS); +#endif + clearScreen(); setColorMode(EPD_MODE_NORMAL, EPD_MODE_INVERT); @@ -335,7 +337,10 @@ void showAPFound() { clearScreen(); setColorMode(EPD_MODE_NORMAL, EPD_MODE_INVERT); + #if (HW_TYPE != SOLUM_M2_BW_29_LOWTEMP) selectLUT(1); +#endif + #if (SCREEN_WIDTH == 128) epdPrintBegin(0, 285, EPD_DIRECTION_Y, EPD_SIZE_DOUBLE, EPD_COLOR_BLACK); epdpr("Waiting for data..."); @@ -446,8 +451,10 @@ void showAPFound() { void showNoAP() { if (displayCustomImage(CUSTOM_IMAGE_NOAPFOUND)) return; powerUp(INIT_EPD | INIT_EEPROM); - + #if (HW_TYPE != SOLUM_M2_BW_29_LOWTEMP) selectLUT(EPD_LUT_NO_REPEATS); +#endif + setColorMode(EPD_MODE_NORMAL, EPD_MODE_INVERT); clearScreen(); #if (SCREEN_WIDTH == 128) // 2,9" @@ -604,8 +611,7 @@ bool displayCustomImage(uint8_t imagetype) { powerUp(INIT_EEPROM); uint8_t slot = findSlotDataTypeArg(imagetype << 3); if (slot != 0xFF) { - // found a slot for gpio button 1 - + // found a slot for a custom image type uint8_t lut = getEepromImageDataArgument(slot); lut &= 0x03; powerUp(INIT_EPD); diff --git a/zbs243_shared/board/boardZBS29common.c b/zbs243_shared/board/boardZBS29common.c index 80667c6c..a6a8b6ef 100644 --- a/zbs243_shared/board/boardZBS29common.c +++ b/zbs243_shared/board/boardZBS29common.c @@ -8,9 +8,7 @@ #include "cpu.h" #include "wdt.h" #include "i2c.h" - -//extern uint8_t __xdata* tempBuffer; -uint8_t __xdata tempBuffer[320]; +#include void powerPortsDownForSleep(void) { @@ -139,10 +137,14 @@ static uint32_t prvUpdateApplierGet(void) __naked void selfUpdate(void) { + + uint8_t __xdata *tempBuffer; + tempBuffer = malloc(320); uint32_t updaterInfo = prvUpdateApplierGet(); uint8_t __code *src = (uint8_t __code*)updaterInfo; uint8_t i, len = updaterInfo >> 16; uint8_t __xdata *dst = tempBuffer; + if(!tempBuffer)wdtDeviceReset(); for (i = len; i ; i--) *dst++ = *src++; diff --git a/zbs243_shared/board/ssd1619.c b/zbs243_shared/board/ssd1619.c index 7eb0275b..23e53e1e 100755 --- a/zbs243_shared/board/ssd1619.c +++ b/zbs243_shared/board/ssd1619.c @@ -17,6 +17,8 @@ #include "timer.h" #include "wdt.h" +#include + #define CMD_DRV_OUTPUT_CTRL 0x01 #define CMD_SOFT_START_CTRL 0x0C #define CMD_ENTER_SLEEP 0x10 @@ -72,8 +74,6 @@ P2_2 = 1; \ } while (0) -extern void dump(uint8_t* __xdata a, uint16_t __xdata l); // remove me when done - static uint8_t __xdata epdCharSize = 1; // character size, 1 or 2 (doubled) static bool __xdata directionY = true; // print direction, X or Y (true) static uint8_t __xdata rbuffer[32]; // used to rotate bits around @@ -87,11 +87,11 @@ static bool __xdata isInited = false; bool __xdata epdGPIOActive = false; #define LUT_BUFFER_SIZE 128 -static uint8_t waveformbuffer[LUT_BUFFER_SIZE]; uint8_t __xdata customLUT[LUT_BUFFER_SIZE] = {0}; -struct waveform10* __xdata waveform10 = (struct waveform10*)waveformbuffer; // holds the LUT/waveform -struct waveform* __xdata waveform7 = (struct waveform*)waveformbuffer; // holds the LUT/waveform +static uint8_t* waveformbuffer; +static struct waveform10* __xdata waveform10; +static struct waveform* __xdata waveform7; #pragma callee_saves epdBusySleep #pragma callee_saves epdBusyWait @@ -309,13 +309,6 @@ uint16_t epdGetBattery(void) { return voltage; } -void loadFixedTempOTPLUT() { - shortCommand1(0x18, 0x48); // external temp sensor - shortCommand2(0x1A, 0x05, 0x00); // < temp register - shortCommand1(CMD_DISP_UPDATE_CTRL2, 0xB1); // mode 1 (i2C) - shortCommand(CMD_ACTIVATION); - epdBusyWait(TIMER_TICKS_PER_SECOND); -} static void writeLut() { commandBegin(CMD_WRITE_LUT); for (uint8_t i = 0; i < (dispLutSize * 10); i++) @@ -397,6 +390,10 @@ void selectLUT(uint8_t lut) { return; } + waveformbuffer = malloc(150); + waveform10 = (struct waveform10*)waveformbuffer; // holds the LUT/waveform + waveform7 = (struct waveform*)waveformbuffer; // holds the LUT/waveform + // download the current LUT from the waveform buffer readLut(); @@ -444,7 +441,7 @@ void selectLUT(uint8_t lut) { break; } - // Handling if we received an OTA LUT + // Handling if we received an OTA LUT if (lut == EPD_LUT_OTA) { memcpy(waveformbuffer, customLUT, dispLutSize * 10); writeLut(); @@ -457,6 +454,7 @@ void selectLUT(uint8_t lut) { shortCommand1(CMD_DUMMY_PERIOD, customLUT[74]); shortCommand1(CMD_GATE_LINE_WIDTH, customLUT[75]); currentLut = lut; + free(waveformbuffer); return; } @@ -467,6 +465,7 @@ void selectLUT(uint8_t lut) { lutGroupDisable(LUTGROUP_UNUSED4); } writeLut(); + free(waveformbuffer); } void setWindowX(uint16_t start, uint16_t end) { @@ -474,7 +473,7 @@ void setWindowX(uint16_t start, uint16_t end) { } void setWindowY(uint16_t start, uint16_t end) { commandBegin(CMD_WINDOW_Y_SIZE); - epdSend((start)&0xff); + epdSend((start) & 0xff); epdSend((start) >> 8); epdSend((end - 1) & 0xff); epdSend((end - 1) >> 8); @@ -483,7 +482,7 @@ void setWindowY(uint16_t start, uint16_t end) { void setPosXY(uint16_t x, uint16_t y) { shortCommand1(CMD_XSTART_POS, (uint8_t)(x / 8)); commandBegin(CMD_YSTART_POS); - epdSend((y)&0xff); + epdSend((y) & 0xff); epdSend((y) >> 8); commandEnd(); } diff --git a/zbs243_shared/board/zbs29_BW_ssd1619/screen.c b/zbs243_shared/board/zbs29_BW_ssd1619/screen.c index 821ccb80..8cee3e06 100644 --- a/zbs243_shared/board/zbs29_BW_ssd1619/screen.c +++ b/zbs243_shared/board/zbs29_BW_ssd1619/screen.c @@ -233,6 +233,7 @@ void epdEnterSleep() { timerDelay(10); P2_0 = 1; timerDelay(50); + epdReset(); shortCommand(CMD_SOFT_RESET2); epdBusyWait(TIMER_TICKS_PER_MS * 15); shortCommand1(CMD_ENTER_SLEEP, 0x03); diff --git a/zbs243_shared/eeprom.c b/zbs243_shared/eeprom.c index ab01bbc7..0aeb77c1 100755 --- a/zbs243_shared/eeprom.c +++ b/zbs243_shared/eeprom.c @@ -4,321 +4,299 @@ #include "printf.h" #include "board.h" #include "cpu.h" +#include static uint32_t __xdata mEepromSize; static uint8_t __xdata mOpcodeErz4K = 0, mOpcodeErz32K = 0, mOpcodeErz64K = 0; -//extern uint8_t __xdata* tempBuffer; -uint8_t __xdata tempBufferE[320] = {0}; - -uint32_t eepromGetSize(void) -{ - return mEepromSize; +uint32_t eepromGetSize(void) { + return mEepromSize; } -void eepromReadStart(uint32_t addr) __reentrant -{ - eepromPrvSelect(); - eepromByte(0x03); - eepromByte(addr >> 16); - eepromByte(addr >> 8); - eepromByte(addr & 0xff); +void eepromReadStart(uint32_t addr) __reentrant { + eepromPrvSelect(); + eepromByte(0x03); + eepromByte(addr >> 16); + eepromByte(addr >> 8); + eepromByte(addr & 0xff); } -void eepromRead(uint32_t addr, void __xdata *dstP, uint16_t len) __reentrant -{ - uint8_t __xdata *dst = (uint8_t __xdata*)dstP; - - eepromPrvSelect(); - eepromByte(0x03); - eepromByte(addr >> 16); - eepromByte(addr >> 8); - eepromByte(addr & 0xff); - - while (len--) - *dst++ = eepromByte(0); - eepromPrvDeselect(); +void eepromRead(uint32_t addr, void __xdata *dstP, uint16_t len) __reentrant { + uint8_t __xdata *dst = (uint8_t __xdata *)dstP; + + eepromPrvSelect(); + eepromByte(0x03); + eepromByte(addr >> 16); + eepromByte(addr >> 8); + eepromByte(addr & 0xff); + + while (len--) + *dst++ = eepromByte(0); + eepromPrvDeselect(); } -static void eepromPrvSimpleCmd(uint8_t cmd) -{ - eepromPrvSelect(); - eepromByte(cmd); - eepromPrvDeselect(); +static void eepromPrvSimpleCmd(uint8_t cmd) { + eepromPrvSelect(); + eepromByte(cmd); + eepromPrvDeselect(); } -static bool eepromPrvBusyWait(void) -{ - uint8_t val; - - eepromPrvSelect(); - eepromByte(0x05); - while ((val = eepromByte(0x00)) & 1); - eepromPrvDeselect(); - - return true; +static bool eepromPrvBusyWait(void) { + uint8_t val; + + eepromPrvSelect(); + eepromByte(0x05); + while ((val = eepromByte(0x00)) & 1) + ; + eepromPrvDeselect(); + + return true; } -static bool eepromWriteLL(uint32_t addr, const void __xdata *srcP, uint16_t len) -{ - const uint8_t __xdata *src = (const uint8_t __xdata*)srcP; - - eepromPrvSimpleCmd(0x06); - - eepromPrvSelect(); - eepromByte(0x02); - eepromByte(addr >> 16); - eepromByte(addr >> 8); - eepromByte(addr & 0xff); - - while (len--) - eepromByte(*src++); - eepromPrvDeselect(); - - return eepromPrvBusyWait(); +static bool eepromWriteLL(uint32_t addr, const void __xdata *srcP, uint16_t len) { + const uint8_t __xdata *src = (const uint8_t __xdata *)srcP; + + eepromPrvSimpleCmd(0x06); + + eepromPrvSelect(); + eepromByte(0x02); + eepromByte(addr >> 16); + eepromByte(addr >> 8); + eepromByte(addr & 0xff); + + while (len--) + eepromByte(*src++); + eepromPrvDeselect(); + + return eepromPrvBusyWait(); } -void eepromDeepPowerDown(void) -{ - eepromPrvSimpleCmd(0xb9); +void eepromDeepPowerDown(void) { + eepromPrvSimpleCmd(0xb9); } -static void eepromPrvWakeFromPowerdown(void) -{ - eepromPrvSimpleCmd(0xab); +static void eepromPrvWakeFromPowerdown(void) { + eepromPrvSimpleCmd(0xab); } #pragma callee_saves eepromPrvSfdpRead -static void eepromPrvSfdpRead(uint16_t ofst, uint8_t __xdata *dst, uint8_t len) -{ - eepromPrvSelect(); - eepromByte(0x5a); //cmd - eepromByte(0); //addr - eepromByte(ofst >> 8); - eepromByte(ofst); - eepromByte(0x00); //dummy - while(len--) - *dst++ = eepromByte(0); - eepromPrvDeselect(); +static void eepromPrvSfdpRead(uint16_t ofst, uint8_t __xdata *dst, uint8_t len) { + eepromPrvSelect(); + eepromByte(0x5a); // cmd + eepromByte(0); // addr + eepromByte(ofst >> 8); + eepromByte(ofst); + eepromByte(0x00); // dummy + while (len--) + *dst++ = eepromByte(0); + eepromPrvDeselect(); } -__bit eepromInit(void) -{ - uint8_t __xdata buf[8]; - uint8_t i, nParamHdrs; - - eepromPrvWakeFromPowerdown(); - - //process SFDP - - eepromPrvSfdpRead(0, buf, 8); - if (buf[0] != 0x53 || buf[1] != 0x46 || buf[2] != 0x44 || buf[3] != 0x50 || buf[7] != 0xff) { - pr("SFDP: header not found\n"); - - __bit valid = false; - - //try manual ID for chips we know of - eepromPrvSelect(); - eepromByte(0x90); - eepromByte(0x00); - eepromByte(0x00); - eepromByte(0x00); - if (eepromByte(0) == 0xc2) { //old macronix chips - valid = true; - mOpcodeErz4K = 0x20; - switch (eepromByte(0)) { - case 0x05: //MX25V512 - mEepromSize = 0x00010000ul; - break; - - case 0x12: //MX25V4005 - mEepromSize = 0x00080000ul; - break; - - default: - valid = false; - break; - } - } - eepromPrvDeselect(); - - return valid; - } - if (buf[5] != 0x01) { - pr("SFDP: version wrong: %u.%d\n", buf[5], buf[4]); - return false; - } - nParamHdrs = buf[6]; - if (nParamHdrs == 0xff) //that case is very unlikely and we just do not care - nParamHdrs--; - - //now we need to find the JEDEC parameter table header - for (i = 0; i <= nParamHdrs; i++) { - - eepromPrvSfdpRead(mathPrvMul8x8(i, 8) + 8, buf, 8); - if (buf[0] == 0x00 && buf[2] == 0x01 && buf[3] >= 9) { - - uint8_t j; - - eepromPrvSfdpRead(*(uint16_t __xdata*)(buf + 4), tempBufferE, 9 * 4); - if ((tempBufferE[0] & 3) != 1) { - pr("SFDP: no 4K ERZ\n"); - break; - } - if (!(tempBufferE[0] & 0x04)) { - pr("SFDP: no large write buf\n"); - break; - } - if ((tempBufferE[2] & 0x06)) { - pr("SFDP: addr.len != 3\n"); - break; - } - - if (!tempBufferE[1] || tempBufferE[1] == 0xff) { - pr("SFDP: 4K ERZ opcode invalid\n"); - break; - } - mOpcodeErz4K = tempBufferE[1]; - - if (tempBufferE[7] & 0x80) { - - pr("SFDP: device too big\n"); - break; - } - else { - - uint8_t t; - - if (t = tempBufferE[7]) - mEepromSize = 0x00200000UL; - else if (t = tempBufferE[6]) - mEepromSize = 0x00002000UL; - else if (t = tempBufferE[5]) - mEepromSize = 0x00000020UL; - else { - pr("SFDP: device so small?!\n"); - break; - } - - while (t) { - mEepromSize <<= 1; - t >>= 1; - } - } - - //get erase opcodes - for (j = 0x1c; j < 0x24; j += 2) { - uint8_t instr = tempBufferE[j + 1]; - - if (!instr || instr == 0xff) - continue; - - switch (tempBufferE[j]) { - case 0x0c: - if (mOpcodeErz4K != instr) { - pr("4K ERZ opcode disagreement\n"); - return false; - } - break; - - case 0x0f: //32K erase - mOpcodeErz32K = instr; - break; - - case 0x10: //64K erase - mOpcodeErz64K = instr; - break; - } - } - - /* - pr("EEPROM accepted\n"); - pr(" ERZ opcodes: \n"); - if (mOpcodeErz4K) - pr(" 4K: %02xh\n", mOpcodeErz4K); - if (mOpcodeErz32K) - pr(" 32K: %02xh\n", mOpcodeErz32K); - if (mOpcodeErz64K) - pr(" 64K: %02xh\n", mOpcodeErz64K); - pr(" Size: 0x%*08lx\n", (uint16_t)&mEepromSize); - */ - return true; - } - } - - pr("SFDP: no JEDEC table of expected version found\n"); - return false; +__bit eepromInit(void) { + uint8_t __xdata buf[8]; + uint8_t i, nParamHdrs; + uint8_t __xdata *tempBufferE = malloc(320); + + eepromPrvWakeFromPowerdown(); + + // process SFDP + + eepromPrvSfdpRead(0, buf, 8); + if (buf[0] != 0x53 || buf[1] != 0x46 || buf[2] != 0x44 || buf[3] != 0x50 || buf[7] != 0xff) { + pr("SFDP: header not found\n"); + + __bit valid = false; + + // try manual ID for chips we know of + eepromPrvSelect(); + eepromByte(0x90); + eepromByte(0x00); + eepromByte(0x00); + eepromByte(0x00); + if (eepromByte(0) == 0xc2) { // old macronix chips + valid = true; + mOpcodeErz4K = 0x20; + switch (eepromByte(0)) { + case 0x05: // MX25V512 + mEepromSize = 0x00010000ul; + break; + + case 0x12: // MX25V4005 + mEepromSize = 0x00080000ul; + break; + + default: + valid = false; + break; + } + } + eepromPrvDeselect(); + free(tempBufferE); + return valid; + } + if (buf[5] != 0x01) { + pr("SFDP: version wrong: %u.%d\n", buf[5], buf[4]); + return false; + } + nParamHdrs = buf[6]; + if (nParamHdrs == 0xff) // that case is very unlikely and we just do not care + nParamHdrs--; + + // now we need to find the JEDEC parameter table header + for (i = 0; i <= nParamHdrs; i++) { + eepromPrvSfdpRead(mathPrvMul8x8(i, 8) + 8, buf, 8); + if (buf[0] == 0x00 && buf[2] == 0x01 && buf[3] >= 9) { + uint8_t j; + + eepromPrvSfdpRead(*(uint16_t __xdata *)(buf + 4), tempBufferE, 9 * 4); + if ((tempBufferE[0] & 3) != 1) { + pr("SFDP: no 4K ERZ\n"); + break; + } + if (!(tempBufferE[0] & 0x04)) { + pr("SFDP: no large write buf\n"); + break; + } + if ((tempBufferE[2] & 0x06)) { + pr("SFDP: addr.len != 3\n"); + break; + } + + if (!tempBufferE[1] || tempBufferE[1] == 0xff) { + pr("SFDP: 4K ERZ opcode invalid\n"); + break; + } + mOpcodeErz4K = tempBufferE[1]; + + if (tempBufferE[7] & 0x80) { + pr("SFDP: device too big\n"); + break; + } else { + uint8_t t; + + if (t = tempBufferE[7]) + mEepromSize = 0x00200000UL; + else if (t = tempBufferE[6]) + mEepromSize = 0x00002000UL; + else if (t = tempBufferE[5]) + mEepromSize = 0x00000020UL; + else { + pr("SFDP: device so small?!\n"); + break; + } + + while (t) { + mEepromSize <<= 1; + t >>= 1; + } + } + + // get erase opcodes + for (j = 0x1c; j < 0x24; j += 2) { + uint8_t instr = tempBufferE[j + 1]; + + if (!instr || instr == 0xff) + continue; + + switch (tempBufferE[j]) { + case 0x0c: + if (mOpcodeErz4K != instr) { + pr("4K ERZ opcode disagreement\n"); + return false; + } + break; + + case 0x0f: // 32K erase + mOpcodeErz32K = instr; + break; + + case 0x10: // 64K erase + mOpcodeErz64K = instr; + break; + } + } + + /* + pr("EEPROM accepted\n"); + pr(" ERZ opcodes: \n"); + if (mOpcodeErz4K) + pr(" 4K: %02xh\n", mOpcodeErz4K); + if (mOpcodeErz32K) + pr(" 32K: %02xh\n", mOpcodeErz32K); + if (mOpcodeErz64K) + pr(" 64K: %02xh\n", mOpcodeErz64K); + pr(" Size: 0x%*08lx\n", (uint16_t)&mEepromSize); + */ + free(tempBufferE); + return true; + } + } + + pr("SFDP: no JEDEC table of expected version found\n"); + return false; } -bool eepromWrite(uint32_t addr, const void __xdata *srcP, uint16_t len) __reentrant -{ - const uint8_t __xdata *src = (const uint8_t __xdata*)srcP; - - while (len) { - - uint16_t lenNow = EEPROM_WRITE_PAGE_SZ - (addr & (EEPROM_WRITE_PAGE_SZ - 1)); - - if (lenNow > len) - lenNow = len; - - if (!eepromWriteLL(addr, src, lenNow)) - return false; +bool eepromWrite(uint32_t addr, const void __xdata *srcP, uint16_t len) __reentrant { + const uint8_t __xdata *src = (const uint8_t __xdata *)srcP; - addr += lenNow; - src += lenNow; - len -= lenNow; - } - return true; + while (len) { + uint16_t lenNow = EEPROM_WRITE_PAGE_SZ - (addr & (EEPROM_WRITE_PAGE_SZ - 1)); + + if (lenNow > len) + lenNow = len; + + if (!eepromWriteLL(addr, src, lenNow)) + return false; + + addr += lenNow; + src += lenNow; + len -= lenNow; + } + return true; } -bool eepromErase(uint32_t addr, uint16_t nSec) __reentrant -{ - uint8_t now; - - if (((uint16_t)addr) & 0x0fff) - return false; - - for (;nSec; nSec -= now) { - - eepromPrvSimpleCmd(0x06); - eepromPrvSelect(); - - if (nSec >= 16 && !(uint16_t)addr && mOpcodeErz64K) { //erase 64K - - eepromByte(mOpcodeErz64K); - now = 16; - } - else if (nSec >= 8 && !(((uint16_t)addr) & 0x7fff) && mOpcodeErz32K) { //erase 32K - - eepromByte(mOpcodeErz32K); - now = 8; - } - else { //erase 4K - - eepromByte(mOpcodeErz4K); - now = 1; - } +bool eepromErase(uint32_t addr, uint16_t nSec) __reentrant { + uint8_t now; - eepromByte(addr >> 16); - eepromByte(addr >> 8); - eepromByte(addr); - eepromPrvDeselect(); - - if (!eepromPrvBusyWait()) - return false; - - addr += mathPrvMul16x8(EEPROM_ERZ_SECTOR_SZ, now); - } - - return true; + if (((uint16_t)addr) & 0x0fff) + return false; + + for (; nSec; nSec -= now) { + eepromPrvSimpleCmd(0x06); + eepromPrvSelect(); + + if (nSec >= 16 && !(uint16_t)addr && mOpcodeErz64K) { // erase 64K + + eepromByte(mOpcodeErz64K); + now = 16; + } else if (nSec >= 8 && !(((uint16_t)addr) & 0x7fff) && mOpcodeErz32K) { // erase 32K + + eepromByte(mOpcodeErz32K); + now = 8; + } else { // erase 4K + + eepromByte(mOpcodeErz4K); + now = 1; + } + + eepromByte(addr >> 16); + eepromByte(addr >> 8); + eepromByte(addr); + eepromPrvDeselect(); + + if (!eepromPrvBusyWait()) + return false; + + addr += mathPrvMul16x8(EEPROM_ERZ_SECTOR_SZ, now); + } + + return true; } -void eepromOtpModeEnter(void) -{ - eepromPrvSimpleCmd(0xb1); +void eepromOtpModeEnter(void) { + eepromPrvSimpleCmd(0xb1); } -void eepromOtpModeExit(void) -{ - eepromPrvSimpleCmd(0xc1); +void eepromOtpModeExit(void) { + eepromPrvSimpleCmd(0xc1); } \ No newline at end of file