From 9454f9d8ece0e25c4c9b5eeff02ea3eaf658c020 Mon Sep 17 00:00:00 2001 From: Alex Voinea Date: Fri, 5 Mar 2021 09:51:23 +0200 Subject: [PATCH] Rename w25x20cl to xflash --- Firmware/Marlin_main.cpp | 62 +++++++++---------- Firmware/config.h | 8 --- Firmware/language.c | 42 ++++++------- Firmware/optiboot_w25x20cl.h | 6 -- ...iboot_w25x20cl.cpp => optiboot_xflash.cpp} | 44 ++++++------- Firmware/optiboot_xflash.h | 6 ++ Firmware/pins_Einsy_1_0.h | 4 +- Firmware/ultralcd.cpp | 26 ++++---- .../variants/1_75mm_MK3-EINSy10a-E3Dv6full.h | 2 +- .../variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h | 2 +- Firmware/w25x20cl.h | 44 ------------- Firmware/{w25x20cl.c => xflash.c} | 62 ++++++++++--------- Firmware/xflash.h | 50 +++++++++++++++ 13 files changed, 180 insertions(+), 178 deletions(-) delete mode 100644 Firmware/optiboot_w25x20cl.h rename Firmware/{optiboot_w25x20cl.cpp => optiboot_xflash.cpp} (93%) create mode 100644 Firmware/optiboot_xflash.h delete mode 100644 Firmware/w25x20cl.h rename Firmware/{w25x20cl.c => xflash.c} (73%) create mode 100644 Firmware/xflash.h diff --git a/Firmware/Marlin_main.cpp b/Firmware/Marlin_main.cpp index 09e1dc49c..ebaf3f140 100755 --- a/Firmware/Marlin_main.cpp +++ b/Firmware/Marlin_main.cpp @@ -103,10 +103,10 @@ #include "tmc2130.h" #endif //TMC2130 -#ifdef W25X20CL -#include "w25x20cl.h" -#include "optiboot_w25x20cl.h" -#endif //W25X20CL +#ifdef XFLASH +#include "xflash.h" +#include "optiboot_xflash.h" +#endif //XFLASH #ifdef BLINKM #include "BlinkM.h" @@ -910,7 +910,7 @@ uint8_t check_printer_version() #if (LANG_MODE != 0) //secondary language support -#ifdef W25X20CL +#ifdef XFLASH // language update from external flash @@ -936,7 +936,7 @@ void update_sec_lang_from_external_flash() cli(); uint16_t size = header.size - state * LANGBOOT_BLOCKSIZE; if (size > LANGBOOT_BLOCKSIZE) size = LANGBOOT_BLOCKSIZE; - w25x20cl_rd_data(src_addr + state * LANGBOOT_BLOCKSIZE, (uint8_t*)LANGBOOT_RAMBUFFER, size); + xflash_rd_data(src_addr + state * LANGBOOT_BLOCKSIZE, (uint8_t*)LANGBOOT_RAMBUFFER, size); if (state == 0) { //TODO - check header integrity @@ -954,7 +954,7 @@ void update_sec_lang_from_external_flash() } -#ifdef DEBUG_W25X20CL +#ifdef DEBUG_XFLASH uint8_t lang_xflash_enum_codes(uint16_t* codes) { @@ -964,7 +964,7 @@ uint8_t lang_xflash_enum_codes(uint16_t* codes) while (1) { printf_P(_n("LANGTABLE%d:"), count); - w25x20cl_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); + xflash_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); if (header.magic != LANG_MAGIC) { puts_P(_n("NG!")); @@ -992,17 +992,17 @@ void list_sec_lang_from_external_flash() printf_P(_n("XFlash lang count = %hhd\n"), count); } -#endif //DEBUG_W25X20CL +#endif //DEBUG_XFLASH -#endif //W25X20CL +#endif //XFLASH #endif //(LANG_MODE != 0) -static void w25x20cl_err_msg() +static void xflash_err_msg() { lcd_clear(); - lcd_puts_P(_n("External SPI flash\nW25X20CL is not res-\nponding. Language\nswitch unavailable.")); + lcd_puts_P(_n("External SPI flash\nXFLASH is not res-\nponding. Language\nswitch unavailable.")); } // "Setup" function is called by the Arduino framework on startup. @@ -1028,23 +1028,23 @@ void setup() fdev_setup_stream(uartout, uart_putchar, NULL, _FDEV_SETUP_WRITE); //setup uart out stream stdout = uartout; -#ifdef W25X20CL - bool w25x20cl_success = w25x20cl_init(); +#ifdef XFLASH + bool xflash_success = xflash_init(); uint8_t optiboot_status = 1; - if (w25x20cl_success) + if (xflash_success) { - optiboot_status = optiboot_w25x20cl_enter(); + optiboot_status = optiboot_xflash_enter(); #if (LANG_MODE != 0) //secondary language support update_sec_lang_from_external_flash(); #endif //(LANG_MODE != 0) } else { - w25x20cl_err_msg(); + xflash_err_msg(); } #else - const bool w25x20cl_success = true; -#endif //W25X20CL + const bool xflash_success = true; +#endif //XFLASH setup_killpin(); @@ -1091,7 +1091,7 @@ void setup() } -#ifndef W25X20CL +#ifndef XFLASH SERIAL_PROTOCOLLNPGM("start"); #else if ((optiboot_status != 0) || (selectedSerialPort != 0)) @@ -1172,7 +1172,7 @@ void setup() #undef LT_PRINT_TEST #if 0 - w25x20cl_rd_data(0x25ba, (uint8_t*)&block_buffer, 1024); + xflash_rd_data(0x25ba, (uint8_t*)&block_buffer, 1024); for (uint16_t i = 0; i < 1024; i++) { if ((i % 16) == 0) printf_P(_n("%04x:"), 0x25ba+i); @@ -1269,11 +1269,11 @@ void setup() tp_init(); // Initialize temperature loop - if (w25x20cl_success) lcd_splash(); // we need to do this again, because tp_init() kills lcd + if (xflash_success) lcd_splash(); // we need to do this again, because tp_init() kills lcd else { - w25x20cl_err_msg(); - puts_P(_n("W25X20CL not responding.")); + xflash_err_msg(); + puts_P(_n("XFLASH not responding.")); } #ifdef EXTRUDER_ALTFAN_DETECT SERIAL_ECHORPGM(_n("Extruder fan type: ")); @@ -1458,16 +1458,16 @@ void setup() #if (LANG_MODE != 0) //secondary language support -#ifdef DEBUG_W25X20CL - W25X20CL_SPI_ENTER(); +#ifdef DEBUG_XFLASH + XFLASH_SPI_ENTER(); uint8_t uid[8]; // 64bit unique id - w25x20cl_rd_uid(uid); - puts_P(_n("W25X20CL UID=")); + xflash_rd_uid(uid); + puts_P(_n("XFLASH UID=")); for (uint8_t i = 0; i < 8; i ++) printf_P(PSTR("%02hhx"), uid[i]); putchar('\n'); list_sec_lang_from_external_flash(); -#endif //DEBUG_W25X20CL +#endif //DEBUG_XFLASH // lang_reset(); if (!lang_select(eeprom_read_byte((uint8_t*)EEPROM_LANG))) @@ -4013,10 +4013,10 @@ void process_commands() } else if (code_seen_P(PSTR("RESET"))) { // PRUSA RESET #ifdef WATCHDOG -#if defined(W25X20CL) && defined(BOOTAPP) +#if defined(XFLASH) && defined(BOOTAPP) boot_app_magic = BOOT_APP_MAGIC; boot_app_flags = BOOT_APP_FLG_RUN; -#endif //defined(W25X20CL) && defined(BOOTAPP) +#endif //defined(XFLASH) && defined(BOOTAPP) softReset(); #elif defined(BOOTAPP) //this is a safety precaution. This is because the new bootloader turns off the heaters, but the old one doesn't. The watchdog should be used most of the time. asm volatile("jmp 0x3E000"); diff --git a/Firmware/config.h b/Firmware/config.h index 87599b64b..2ec2077e6 100644 --- a/Firmware/config.h +++ b/Firmware/config.h @@ -54,14 +54,6 @@ #define TMC2130_SPCR SPI_SPCR(TMC2130_SPI_RATE, 1, 1, 1, 0) #define TMC2130_SPSR SPI_SPSR(TMC2130_SPI_RATE) -//W25X20CL configuration -//pinout: -#define W25X20CL_PIN_CS 32 -//spi: -#define W25X20CL_SPI_RATE 0 // fosc/4 = 4MHz -#define W25X20CL_SPCR SPI_SPCR(W25X20CL_SPI_RATE, 1, 1, 1, 0) -#define W25X20CL_SPSR SPI_SPSR(W25X20CL_SPI_RATE) - //LANG - Multi-language support //#define LANG_MODE 0 // primary language only #define LANG_MODE 1 // sec. language support diff --git a/Firmware/language.c b/Firmware/language.c index 368997cf9..01a396523 100644 --- a/Firmware/language.c +++ b/Firmware/language.c @@ -7,9 +7,9 @@ #include "Configuration.h" #include "pins.h" -#ifdef W25X20CL -#include "w25x20cl.h" -#endif //W25X20CL +#ifdef XFLASH +#include "xflash.h" +#endif //XFLASH // Currently active language selection. uint8_t lang_selected = 0; @@ -54,7 +54,7 @@ uint8_t lang_select(uint8_t lang) lang_table = 0; lang_selected = lang; } -#ifdef W25X20CL +#ifdef XFLASH if (lang_get_code(lang) == lang_get_code(LANG_ID_SEC)) lang = LANG_ID_SEC; if (lang == LANG_ID_SEC) //current secondary language { @@ -68,7 +68,7 @@ uint8_t lang_select(uint8_t lang) } } } -#else //W25X20CL +#else //XFLASH if (lang == LANG_ID_SEC) { uint16_t table = _SEC_LANG_TABLE; @@ -82,7 +82,7 @@ uint8_t lang_select(uint8_t lang) } } } -#endif //W25X20CL +#endif //XFLASH if (lang_selected == lang) { eeprom_update_byte((unsigned char*)EEPROM_LANG, lang_selected); @@ -107,19 +107,19 @@ uint8_t lang_get_count() { if (pgm_read_dword(((uint32_t*)(_PRI_LANG_SIGNATURE))) == 0xffffffff) return 1; //signature not set - only primary language will be available -#ifdef W25X20CL - W25X20CL_SPI_ENTER(); +#ifdef XFLASH + XFLASH_SPI_ENTER(); uint8_t count = 2; //count = 1+n (primary + secondary + all in xflash) uint32_t addr = 0x00000; //start of xflash lang_table_header_t header; //table header structure while (1) { - w25x20cl_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); //read table header from xflash + xflash_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); //read table header from xflash if (header.magic != LANG_MAGIC) break; //break if magic not valid addr += header.size; //calc address of next table count++; //inc counter } -#else //W25X20CL +#else //XFLASH uint16_t table = _SEC_LANG_TABLE; uint8_t count = 1; //count = 1 (primary) while (pgm_read_dword(((uint32_t*)table)) == LANG_MAGIC) //magic valid @@ -127,14 +127,14 @@ uint8_t lang_get_count() table += pgm_read_word((uint16_t*)(table + 4)); count++; } -#endif //W25X20CL +#endif //XFLASH return count; } uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* offset) { if (lang == LANG_ID_PRI) return 0; //primary lang not supported for this function -#ifdef W25X20CL +#ifdef XFLASH if (lang == LANG_ID_SEC) { uint16_t ui = _SEC_LANG_TABLE; //table pointer @@ -142,18 +142,18 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off if (offset) *offset = ui; return (header->magic == LANG_MAGIC)?1:0; //return 1 if magic valid } - W25X20CL_SPI_ENTER(); + XFLASH_SPI_ENTER(); uint32_t addr = 0x00000; //start of xflash lang--; while (1) { - w25x20cl_rd_data(addr, (uint8_t*)(header), sizeof(lang_table_header_t)); //read table header from xflash + xflash_rd_data(addr, (uint8_t*)(header), sizeof(lang_table_header_t)); //read table header from xflash if (header->magic != LANG_MAGIC) break; //break if not valid if (offset) *offset = addr; if (--lang == 0) return 1; addr += header->size; //calc address of next table } -#else //W25X20CL +#else //XFLASH if (lang == LANG_ID_SEC) { uint16_t ui = _SEC_LANG_TABLE; //table pointer @@ -161,32 +161,32 @@ uint8_t lang_get_header(uint8_t lang, lang_table_header_t* header, uint32_t* off if (offset) *offset = ui; return (header->magic == LANG_MAGIC)?1:0; //return 1 if magic valid } -#endif //W25X20CL +#endif //XFLASH return 0; } uint16_t lang_get_code(uint8_t lang) { if (lang == LANG_ID_PRI) return LANG_CODE_EN; //primary lang = EN -#ifdef W25X20CL +#ifdef XFLASH if (lang == LANG_ID_SEC) { uint16_t ui = _SEC_LANG_TABLE; //table pointer if (pgm_read_dword(((uint32_t*)(ui + 0))) != LANG_MAGIC) return LANG_CODE_XX; //magic not valid return pgm_read_word(((uint32_t*)(ui + 10))); //return lang code from progmem } - W25X20CL_SPI_ENTER(); + XFLASH_SPI_ENTER(); uint32_t addr = 0x00000; //start of xflash lang_table_header_t header; //table header structure lang--; while (1) { - w25x20cl_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); //read table header from xflash + xflash_rd_data(addr, (uint8_t*)&header, sizeof(lang_table_header_t)); //read table header from xflash if (header.magic != LANG_MAGIC) break; //break if not valid if (--lang == 0) return header.code; addr += header.size; //calc address of next table } -#else //W25X20CL +#else //XFLASH uint16_t table = _SEC_LANG_TABLE; uint8_t count = 1; //count = 1 (primary) while (pgm_read_dword((uint32_t*)table) == LANG_MAGIC) //magic valid @@ -195,7 +195,7 @@ uint16_t lang_get_code(uint8_t lang) table += pgm_read_word((uint16_t*)(table + 4)); count++; } -#endif //W25X20CL +#endif //XFLASH return LANG_CODE_XX; } diff --git a/Firmware/optiboot_w25x20cl.h b/Firmware/optiboot_w25x20cl.h deleted file mode 100644 index 95c6465f3..000000000 --- a/Firmware/optiboot_w25x20cl.h +++ /dev/null @@ -1,6 +0,0 @@ -#ifndef OPTIBOOT_W25X20CL_H -#define OPTIBOOT_W25X20CL_H - -extern uint8_t optiboot_w25x20cl_enter(); - -#endif /* OPTIBOOT_W25X20CL_H */ diff --git a/Firmware/optiboot_w25x20cl.cpp b/Firmware/optiboot_xflash.cpp similarity index 93% rename from Firmware/optiboot_w25x20cl.cpp rename to Firmware/optiboot_xflash.cpp index ed38b2999..fb1f80753 100644 --- a/Firmware/optiboot_w25x20cl.cpp +++ b/Firmware/optiboot_xflash.cpp @@ -4,7 +4,7 @@ // Licence GLP 2 or later. #include "Marlin.h" -#include "w25x20cl.h" +#include "xflash.h" #include "stk500.h" #include "bootapp.h" #include @@ -16,14 +16,14 @@ static unsigned const int __attribute__((section(".version"))) optiboot_version = 256*(OPTIBOOT_MAJVER + OPTIBOOT_CUSTOMVER) + OPTIBOOT_MINVER; #if 0 -#define W25X20CL_SIGNATURE_0 9 -#define W25X20CL_SIGNATURE_1 8 -#define W25X20CL_SIGNATURE_2 7 +#define XFLASH_SIGNATURE_0 9 +#define XFLASH_SIGNATURE_1 8 +#define XFLASH_SIGNATURE_2 7 #else //FIXME this is a signature of ATmega2560! -#define W25X20CL_SIGNATURE_0 0x1E -#define W25X20CL_SIGNATURE_1 0x98 -#define W25X20CL_SIGNATURE_2 0x01 +#define XFLASH_SIGNATURE_0 0x1E +#define XFLASH_SIGNATURE_1 0x98 +#define XFLASH_SIGNATURE_2 0x01 #endif #define RECV_READY ((UCSR0A & _BV(RXC0)) != 0) @@ -78,7 +78,7 @@ extern struct block_t *block_buffer; //! @brief Enter an STK500 compatible Optiboot boot loader waiting for flashing the languages to an external flash memory. //! @return 1 if "start\n" was not sent. Optiboot was skipped //! @return 0 if "start\n" was sent. Optiboot ran normally. No need to send "start\n" in setup() -uint8_t optiboot_w25x20cl_enter() +uint8_t optiboot_xflash_enter() { // Make sure to check boot_app_magic as well. Since these bootapp flags are located right in the middle of the stack, // they can be unintentionally changed. As a workaround to the language upload problem, do not only check for one bit if it's set, @@ -154,7 +154,7 @@ uint8_t optiboot_w25x20cl_enter() } spi_init(); - w25x20cl_init(); + xflash_init(); wdt_disable(); /* Forever loop: exits by causing WDT reset */ @@ -254,16 +254,16 @@ uint8_t optiboot_w25x20cl_enter() // During a single bootloader run, only erase a 64kB block once. // An 8bit bitmask 'pages_erased' covers 512kB of FLASH memory. if ((address == 0) && (pages_erased & (1 << (addr >> 16))) == 0) { - w25x20cl_wait_busy(); - w25x20cl_enable_wr(); - w25x20cl_block64_erase(addr); + xflash_wait_busy(); + xflash_enable_wr(); + xflash_block64_erase(addr); pages_erased |= (1 << (addr >> 16)); } - w25x20cl_wait_busy(); - w25x20cl_enable_wr(); - w25x20cl_page_program(addr, buff, savelength); - w25x20cl_wait_busy(); - w25x20cl_disable_wr(); + xflash_wait_busy(); + xflash_enable_wr(); + xflash_page_program(addr, buff, savelength); + xflash_wait_busy(); + xflash_disable_wr(); } } /* Read memory block mode, length is big endian. */ @@ -279,8 +279,8 @@ uint8_t optiboot_w25x20cl_enter() // Read the destination type. It should always be 'F' as flash. It is not checked. (void)getch(); verifySpace(); - w25x20cl_wait_busy(); - w25x20cl_rd_data(addr, buff, length); + xflash_wait_busy(); + xflash_rd_data(addr, buff, length); for (i = 0; i < length; ++ i) putch(buff[i]); } @@ -288,9 +288,9 @@ uint8_t optiboot_w25x20cl_enter() else if(ch == STK_READ_SIGN) { // READ SIGN - return what Avrdude wants to hear verifySpace(); - putch(W25X20CL_SIGNATURE_0); - putch(W25X20CL_SIGNATURE_1); - putch(W25X20CL_SIGNATURE_2); + putch(XFLASH_SIGNATURE_0); + putch(XFLASH_SIGNATURE_1); + putch(XFLASH_SIGNATURE_2); } else if (ch == STK_LEAVE_PROGMODE) { /* 'Q' */ // Adaboot no-wait mod diff --git a/Firmware/optiboot_xflash.h b/Firmware/optiboot_xflash.h new file mode 100644 index 000000000..453c9e001 --- /dev/null +++ b/Firmware/optiboot_xflash.h @@ -0,0 +1,6 @@ +#ifndef OPTIBOOT_XFLASH_H +#define OPTIBOOT_XFLASH_H + +extern uint8_t optiboot_xflash_enter(); + +#endif /* OPTIBOOT_XFLASH_H */ diff --git a/Firmware/pins_Einsy_1_0.h b/Firmware/pins_Einsy_1_0.h index 70660bca8..b3841a591 100755 --- a/Firmware/pins_Einsy_1_0.h +++ b/Firmware/pins_Einsy_1_0.h @@ -15,9 +15,11 @@ #define AMBIENT_THERMISTOR #define PINDA_THERMISTOR -#define W25X20CL // external 256kB flash +#define XFLASH // external 256kB flash #define BOOTAPP // bootloader support +#define XFLASH_PIN_CS 32 + #define X_TMC2130_CS 41 #define X_TMC2130_DIAG 64 // !!! changed from 40 (EINY03) #define X_STEP_PIN 37 diff --git a/Firmware/ultralcd.cpp b/Firmware/ultralcd.cpp index 5ac1a0cc5..3e765a5c6 100755 --- a/Firmware/ultralcd.cpp +++ b/Firmware/ultralcd.cpp @@ -4361,7 +4361,7 @@ void menu_setlang(unsigned char lang) } #ifdef COMMUNITY_LANG_SUPPORT -#ifdef W25X20CL +#ifdef XFLASH static void lcd_community_language_menu() { MENU_BEGIN(); @@ -4375,7 +4375,7 @@ static void lcd_community_language_menu() } MENU_END(); } -#endif //W25X20CL +#endif //XFLASH #endif //COMMUNITY_LANG_SUPPORT && W52X20CL @@ -4390,7 +4390,7 @@ static void lcd_language_menu() return; } uint8_t cnt = lang_get_count(); -#ifdef W25X20CL +#ifdef XFLASH if (cnt == 2) //display secondary language in case of clear xflash { if (menu_item_text_P(lang_get_name_by_code(lang_get_code(1)))) @@ -4401,9 +4401,9 @@ static void lcd_language_menu() } else for (int i = 2; i < 8; i++) //skip seconday language - solved in lang_select (MK3) 'i < 8' for 7 official languages -#else //W25X20CL +#else //XFLASH for (int i = 1; i < cnt; i++) //all seconday languages (MK2/25) -#endif //W25X20CL +#endif //XFLASH if (menu_item_text_P(lang_get_name_by_code(lang_get_code(i)))) { menu_setlang(i); @@ -4411,9 +4411,9 @@ static void lcd_language_menu() } #ifdef COMMUNITY_LANG_SUPPORT -#ifdef W25X20CL +#ifdef XFLASH MENU_ITEM_SUBMENU_P(_T(MSG_COMMUNITY_MADE), lcd_community_language_menu); ////MSG_COMMUNITY_MADE c=18 -#endif //W25X20CL +#endif //XFLASH #endif //COMMUNITY_LANG_SUPPORT && W52X20CL MENU_END(); @@ -6323,15 +6323,15 @@ unsigned char lcd_choose_color() { } -#include "w25x20cl.h" +#include "xflash.h" #ifdef LCD_TEST static void lcd_test_menu() { - W25X20CL_SPI_ENTER(); - w25x20cl_enable_wr(); - w25x20cl_chip_erase(); - w25x20cl_disable_wr(); + XFLASH_SPI_ENTER(); + xflash_enable_wr(); + xflash_chip_erase(); + xflash_disable_wr(); } #endif //LCD_TEST @@ -6672,7 +6672,7 @@ static void lcd_main_menu() } MENU_ITEM_SUBMENU_P(_i("Support"), lcd_support_menu);////MSG_SUPPORT #ifdef LCD_TEST - MENU_ITEM_SUBMENU_P(_i("W25x20CL init"), lcd_test_menu);////MSG_SUPPORT + MENU_ITEM_SUBMENU_P(_i("XFLASH init"), lcd_test_menu);////MSG_SUPPORT #endif //LCD_TEST MENU_END(); diff --git a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h index 2c62f2fdd..8caaeb328 100644 --- a/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3-EINSy10a-E3Dv6full.h @@ -159,7 +159,7 @@ //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup -//#define DEBUG_W25X20CL //debug external spi flash +//#define DEBUG_XFLASH //debug external spi flash #ifdef DEBUG_BUILD //#define _NO_ASM #define DEBUG_DCODES //D codes diff --git a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h index d74d75d54..e9619afcc 100644 --- a/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h +++ b/Firmware/variants/1_75mm_MK3S-EINSy10a-E3Dv6full.h @@ -161,7 +161,7 @@ //#define DEBUG_BUILD //#define DEBUG_SEC_LANG //secondary language debug output at startup -//#define DEBUG_W25X20CL //debug external spi flash +//#define DEBUG_XFLASH //debug external spi flash #ifdef DEBUG_BUILD //#define _NO_ASM #define DEBUG_DCODES //D codes diff --git a/Firmware/w25x20cl.h b/Firmware/w25x20cl.h deleted file mode 100644 index 10aaaf2c7..000000000 --- a/Firmware/w25x20cl.h +++ /dev/null @@ -1,44 +0,0 @@ -//w25x20cl.h -#ifndef _W25X20CL_H -#define _W25X20CL_H - -#include -#include "config.h" -#include "spi.h" - - - -#define W25X20CL_STATUS_BUSY 0x01 -#define W25X20CL_STATUS_WEL 0x02 -#define W25X20CL_STATUS_BP0 0x04 -#define W25X20CL_STATUS_BP1 0x08 -#define W25X20CL_STATUS_TB 0x20 -#define W25X20CL_STATUS_SRP 0x80 - -#define W25X20CL_SPI_ENTER() spi_setup(W25X20CL_SPCR, W25X20CL_SPSR) - -#if defined(__cplusplus) -extern "C" { -#endif //defined(__cplusplus) - - -extern int8_t w25x20cl_init(void); -extern void w25x20cl_enable_wr(void); -extern void w25x20cl_disable_wr(void); -extern uint8_t w25x20cl_rd_status_reg(void); -extern void w25x20cl_wr_status_reg(uint8_t val); -extern void w25x20cl_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt); -extern void w25x20cl_page_program(uint32_t addr, uint8_t* data, uint16_t cnt); -extern void w25x20cl_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt); -extern void w25x20cl_sector_erase(uint32_t addr); -extern void w25x20cl_block32_erase(uint32_t addr); -extern void w25x20cl_block64_erase(uint32_t addr); -extern void w25x20cl_chip_erase(void); -extern void w25x20cl_page_program(uint32_t addr, uint8_t* data, uint16_t cnt); -extern void w25x20cl_rd_uid(uint8_t* uid); -extern void w25x20cl_wait_busy(void); - -#if defined(__cplusplus) -} -#endif //defined(__cplusplus) -#endif //_W25X20CL_H diff --git a/Firmware/w25x20cl.c b/Firmware/xflash.c similarity index 73% rename from Firmware/w25x20cl.c rename to Firmware/xflash.c index 40d183f13..3c5d6f964 100644 --- a/Firmware/w25x20cl.c +++ b/Firmware/xflash.c @@ -1,6 +1,6 @@ -//w25x20cl.c +//xflash.c -#include "w25x20cl.h" +#include "xflash.h" #include #include #include "spi.h" @@ -31,8 +31,8 @@ #define _CMD_JEDEC_ID 0x9f #define _CMD_RD_UID 0x4b -#define _CS_LOW() WRITE(W25X20CL_PIN_CS, 0) -#define _CS_HIGH() WRITE(W25X20CL_PIN_CS, 1) +#define _CS_LOW() WRITE(XFLASH_PIN_CS, 0) +#define _CS_HIGH() WRITE(XFLASH_PIN_CS, 1) //#define _SPI_TX swspi_tx //#define _SPI_RX swspi_rx @@ -40,33 +40,33 @@ #define _SPI_RX() spi_txrx(0xff) -int w25x20cl_mfrid_devid(void); +int xflash_mfrid_devid(void); -int8_t w25x20cl_init(void) +int8_t xflash_init(void) { _CS_HIGH(); - SET_OUTPUT(W25X20CL_PIN_CS); - W25X20CL_SPI_ENTER(); - if (!w25x20cl_mfrid_devid()) return 0; + SET_OUTPUT(XFLASH_PIN_CS); + XFLASH_SPI_ENTER(); + if (!xflash_mfrid_devid()) return 0; return 1; } -void w25x20cl_enable_wr(void) +void xflash_enable_wr(void) { _CS_LOW(); _SPI_TX(_CMD_ENABLE_WR); // send command 0x06 _CS_HIGH(); } -void w25x20cl_disable_wr(void) +void xflash_disable_wr(void) { _CS_LOW(); _SPI_TX(_CMD_DISABLE_WR); // send command 0x04 _CS_HIGH(); } -uint8_t w25x20cl_rd_status_reg(void) +uint8_t xflash_rd_status_reg(void) { _CS_LOW(); _SPI_TX(_CMD_RD_STATUS_REG); // send command 0x90 @@ -75,6 +75,7 @@ uint8_t w25x20cl_rd_status_reg(void) return val; } +#if 0 void w25x20cl_wr_status_reg(uint8_t val) { _CS_LOW(); @@ -82,8 +83,9 @@ void w25x20cl_wr_status_reg(uint8_t val) _SPI_TX(val); // send value _CS_HIGH(); } +#endif -void w25x20cl_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt) +void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt) { _CS_LOW(); _SPI_TX(_CMD_RD_DATA); // send command 0x03 @@ -95,7 +97,7 @@ void w25x20cl_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt) _CS_HIGH(); } -void w25x20cl_page_program(uint32_t addr, uint8_t* data, uint16_t cnt) +void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt) { _CS_LOW(); _SPI_TX(_CMD_PAGE_PROGRAM); // send command 0x02 @@ -107,7 +109,7 @@ void w25x20cl_page_program(uint32_t addr, uint8_t* data, uint16_t cnt) _CS_HIGH(); } -void w25x20cl_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt) +void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt) { _CS_LOW(); _SPI_TX(_CMD_PAGE_PROGRAM); // send command 0x02 @@ -119,7 +121,7 @@ void w25x20cl_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt) _CS_HIGH(); } -void w25x20cl_erase(uint8_t cmd, uint32_t addr) +void xflash_erase(uint8_t cmd, uint32_t addr) { _CS_LOW(); _SPI_TX(cmd); // send command 0x20 @@ -129,22 +131,22 @@ void w25x20cl_erase(uint8_t cmd, uint32_t addr) _CS_HIGH(); } -void w25x20cl_sector_erase(uint32_t addr) +void xflash_sector_erase(uint32_t addr) { - return w25x20cl_erase(_CMD_SECTOR_ERASE, addr); + return xflash_erase(_CMD_SECTOR_ERASE, addr); } -void w25x20cl_block32_erase(uint32_t addr) +void xflash_block32_erase(uint32_t addr) { - return w25x20cl_erase(_CMD_BLOCK32_ERASE, addr); + return xflash_erase(_CMD_BLOCK32_ERASE, addr); } -void w25x20cl_block64_erase(uint32_t addr) +void xflash_block64_erase(uint32_t addr) { - return w25x20cl_erase(_CMD_BLOCK64_ERASE, addr); + return xflash_erase(_CMD_BLOCK64_ERASE, addr); } -void w25x20cl_chip_erase(void) +void xflash_chip_erase(void) { _CS_LOW(); _SPI_TX(_CMD_CHIP_ERASE); // send command 0xc7 @@ -152,7 +154,7 @@ void w25x20cl_chip_erase(void) } -void w25x20cl_rd_uid(uint8_t* uid) +void xflash_rd_uid(uint8_t* uid) { _CS_LOW(); _SPI_TX(_CMD_RD_UID); // send command 0x4b @@ -165,20 +167,20 @@ void w25x20cl_rd_uid(uint8_t* uid) _CS_HIGH(); } -int w25x20cl_mfrid_devid(void) +int xflash_mfrid_devid(void) { _CS_LOW(); _SPI_TX(_CMD_MFRID_DEVID); // send command 0x90 uint8_t cnt = 3; // 3 address bytes while (cnt--) // send address bytes _SPI_TX(0x00); - uint8_t w25x20cl_mfrid = _SPI_RX(); // receive mfrid - uint8_t w25x20cl_devid = _SPI_RX(); // receive devid + uint8_t xflash_mfrid = _SPI_RX(); // receive mfrid + uint8_t xflash_devid = _SPI_RX(); // receive devid _CS_HIGH(); - return ((w25x20cl_mfrid == _MFRID) && (w25x20cl_devid == _DEVID)); + return ((xflash_mfrid == _MFRID) && (xflash_devid == _DEVID)); } -void w25x20cl_wait_busy(void) +void xflash_wait_busy(void) { - while (w25x20cl_rd_status_reg() & W25X20CL_STATUS_BUSY) ; + while (xflash_rd_status_reg() & XFLASH_STATUS_BUSY) ; } diff --git a/Firmware/xflash.h b/Firmware/xflash.h new file mode 100644 index 000000000..c9ad5275c --- /dev/null +++ b/Firmware/xflash.h @@ -0,0 +1,50 @@ +//xflash.h +#ifndef _XFLASH_H +#define _XFLASH_H + +#include +#include "config.h" +#include "spi.h" + + + +#define XFLASH_STATUS_BUSY 0x01 +#define XFLASH_STATUS_WEL 0x02 +#define XFLASH_STATUS_BP0 0x04 +#define XFLASH_STATUS_BP1 0x08 +#define XFLASH_STATUS_TB 0x20 +#define XFLASH_STATUS_SRP 0x80 + +#define XFLASH_SPI_RATE 0 // fosc/4 = 4MHz +#define XFLASH_SPCR SPI_SPCR(XFLASH_SPI_RATE, 1, 1, 1, 0) +#define XFLASH_SPSR SPI_SPSR(XFLASH_SPI_RATE) + +#define XFLASH_SPI_ENTER() spi_setup(XFLASH_SPCR, XFLASH_SPSR) + +#if defined(__cplusplus) +extern "C" { +#endif //defined(__cplusplus) + + +extern int8_t xflash_init(void); +extern void xflash_enable_wr(void); +extern void xflash_disable_wr(void); +extern uint8_t xflash_rd_status_reg(void); +#if 0 +extern void w25x20cl_wr_status_reg(uint8_t val); +#endif +extern void xflash_rd_data(uint32_t addr, uint8_t* data, uint16_t cnt); +extern void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt); +extern void xflash_page_program_P(uint32_t addr, uint8_t* data, uint16_t cnt); +extern void xflash_sector_erase(uint32_t addr); +extern void xflash_block32_erase(uint32_t addr); +extern void xflash_block64_erase(uint32_t addr); +extern void xflash_chip_erase(void); +extern void xflash_page_program(uint32_t addr, uint8_t* data, uint16_t cnt); +extern void xflash_rd_uid(uint8_t* uid); +extern void xflash_wait_busy(void); + +#if defined(__cplusplus) +} +#endif //defined(__cplusplus) +#endif //_XFLASH_H