From a9446cc6b3cd1bd5f76903592904032207c97fb3 Mon Sep 17 00:00:00 2001 From: Robert Pelnar Date: Sat, 9 Jun 2018 18:26:53 +0200 Subject: [PATCH] New ML support - W25x20CL --- Firmware/Marlin_main.cpp | 28 ++++++++++++++-------------- Firmware/language.h | 1 + 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 9f486f39b..9e41362da 100644 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -1013,7 +1013,7 @@ void __test(uint8_t lang) #ifdef W25X20CL // language upgrade from external flash -#define LANGBOOT_BLOCKSIZE 0x0400 +#define LANGBOOT_BLOCKSIZE 0x1000 #define LANGBOOT_RAMBUFFER 0x0800 void upgrade_sec_lang_from_external_flash() @@ -1022,22 +1022,22 @@ void upgrade_sec_lang_from_external_flash() { uint8_t lang = boot_reserved >> 4; uint8_t state = boot_reserved & 0xf; -// lang_table_header_t header; -// uint32_t src_addr = 0x00000; -// if (lang_get_header(lang, &header, &src_addr)) + lang_table_header_t header; + uint32_t src_addr; + if (lang_get_header(lang, &header, &src_addr)) { - fprintf_P(lcdout, PSTR(ESC_H(1,3) "lng=%1hhd sta=%1hhx %04x"), lang, state, SP); + fprintf_P(lcdout, PSTR(ESC_H(1,3) "lng=%1hhd sta=%1hhx %04x"), lang, state, header.size); delay(1000); boot_reserved = (state+1) | (lang << 4); - if ((state * 0x1000) < 0x211c) + if ((state * LANGBOOT_BLOCKSIZE) < 0x211c) { cli(); - for (uint16_t i = 0; i < 0x1000; i++) - ram_array[0x800 + i] = 0xee; - uint16_t size = 0x211c - state * 0x1000; - if (size > 0x1000) size = 0x1000; - w25x20cl_rd_data(0x25ba + state * 0x1000, (uint8_t*)0x0800, size); - bootapp_ram2flash(0x0800, 0x0500 + state * 0x1000, size); +// for (uint16_t i = 0; i < LANGBOOT_BLOCKSIZE; i++) +// ram_array[0x800 + i] = 0xee; + uint16_t size = 0x211c - state * LANGBOOT_BLOCKSIZE; + if (size > LANGBOOT_BLOCKSIZE) size = LANGBOOT_BLOCKSIZE; + w25x20cl_rd_data(0x25ba + state * LANGBOOT_BLOCKSIZE, (uint8_t*)LANGBOOT_RAMBUFFER, size); + bootapp_ram2flash(LANGBOOT_RAMBUFFER, _SEC_LANG_TABLE + state * LANGBOOT_BLOCKSIZE, size); } } } @@ -1213,8 +1213,8 @@ void setup() #if 1 for (uint16_t i = 0; i < 1024*10; i++) { - if ((i % 16) == 0) printf_P(_n("%04x:"), 0x500+i); - printf_P(_n(" %02x"), pgm_read_byte((uint8_t*)(0x500+i))); + if ((i % 16) == 0) printf_P(_n("%04x:"), _SEC_LANG_TABLE+i); + printf_P(_n(" %02x"), pgm_read_byte((uint8_t*)(_SEC_LANG_TABLE+i))); if ((i % 16) == 15) putchar('\n'); } #endif diff --git a/Firmware/language.h b/Firmware/language.h index d7bf53e0b..a2604e752 100644 --- a/Firmware/language.h +++ b/Firmware/language.h @@ -101,6 +101,7 @@ extern uint8_t lang_selected; extern const char _SEC_LANG[LANG_SIZE_RESERVED]; extern const char* lang_get_translation(const char* s); extern const char* lang_get_sec_lang_str(const char* s); +#define _SEC_LANG_TABLE ((((uint16_t)&_SEC_LANG) + 0x00ff) & 0xff00) #endif //(LANG_MODE != 0) //selects