knowledge:3d_print:2022102301
差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| knowledge:3d_print:2022102301 [2022/10/23 12:52] – 弘毅 | knowledge:3d_print:2022102301 [2025/10/11 02:55] (当前版本) – 外部编辑 127.0.0.1 | ||
|---|---|---|---|
| 行 6: | 行 6: | ||
| static void xflash_err_msg() | static void xflash_err_msg() | ||
| { | { | ||
| - | lcd_clear(); | + | |
| - | lcd_puts_P(_n(" | + | lcd_puts_P(_n(" |
| } | } | ||
| // " | // " | ||
| - | // Before startup, the Timers-functions (PWM)/ | + | // Before startup, the Timers-functions (PWM)/ |
| // are initialized by the main() routine provided by the Arduino framework. | // are initialized by the main() routine provided by the Arduino framework. | ||
| void setup() | void setup() | ||
| { | { | ||
| - | timer2_init(); | + | |
| - | mmu_init(); | + | |
| - | ultralcd_init(); | + | |
| - | spi_init(); | + | |
| - | lcd_splash(); | + | |
| - | Sound_Init(); | + | Sound_Init(); |
| - | selectedSerialPort = eeprom_read_byte((uint8_t *)EEPROM_SECOND_SERIAL_ACTIVE); | + | |
| - | if (selectedSerialPort == 0xFF) selectedSerialPort = 0; | + | if (selectedSerialPort == 0xFF) selectedSerialPort = 0; |
| - | eeprom_update_byte((uint8_t *)EEPROM_SECOND_SERIAL_ACTIVE, | + | eeprom_update_byte((uint8_t *)EEPROM_SECOND_SERIAL_ACTIVE, |
| - | MYSERIAL.begin(BAUDRATE); | + | MYSERIAL.begin(BAUDRATE); |
| - | fdev_setup_stream(uartout, | + | fdev_setup_stream(uartout, |
| - | stdout = uartout; | + | stdout = uartout; |
| #ifdef XFLASH | #ifdef XFLASH | ||
| - | | + | |
| - | uint8_t optiboot_status = 1; | + | uint8_t optiboot_status = 1; |
| - | if (xflash_success) | + | if (xflash_success) |
| - | { | + | { |
| - | optiboot_status = optiboot_xflash_enter(); | + | optiboot_status = optiboot_xflash_enter(); |
| #if (LANG_MODE != 0) //secondary language support | #if (LANG_MODE != 0) //secondary language support | ||
| - | | + | |
| #endif // | #endif // | ||
| - | } | + | |
| - | else | + | else |
| - | { | + | { |
| - | | + | xflash_err_msg(); |
| - | } | + | } |
| #else | #else | ||
| - | const bool xflash_success = true; | + | |
| #endif //XFLASH | #endif //XFLASH | ||
| </ | </ | ||
| 行 54: | 行 54: | ||
| 我们在xflash.c的51行找到该函数。他初始化XFLASH_PIN_CS引脚为SPI的CS引脚,然后执行xflash_mfrid_devid()函数判断返回。 | 我们在xflash.c的51行找到该函数。他初始化XFLASH_PIN_CS引脚为SPI的CS引脚,然后执行xflash_mfrid_devid()函数判断返回。 | ||
| + | |||
| + | XFLASH_PIN_CS是Arduino MEGA2560的D32引脚,也就是PC5. | ||
| < | < | ||
| int xflash_mfrid_devid(void); | int xflash_mfrid_devid(void); | ||
| 行 60: | 行 62: | ||
| int8_t xflash_init(void) | int8_t xflash_init(void) | ||
| { | { | ||
| - | _CS_HIGH(); | + | |
| - | SET_OUTPUT(XFLASH_PIN_CS); | + | SET_OUTPUT(XFLASH_PIN_CS); |
| - | XFLASH_SPI_ENTER(); | + | XFLASH_SPI_ENTER(); |
| - | if (!xflash_mfrid_devid()) return 0; | + | if (!xflash_mfrid_devid()) return 0; |
| - | return 1; | + | return 1; |
| } | } | ||
| </ | </ | ||
| 行 72: | 行 74: | ||
| int xflash_mfrid_devid(void) | int xflash_mfrid_devid(void) | ||
| { | { | ||
| - | _CS_LOW(); | + | |
| - | _SPI_TX(_CMD_MFRID_DEVID); | + | _SPI_TX(_CMD_MFRID_DEVID); |
| - | uint8_t cnt = 3; // 3 address bytes | + | uint8_t cnt = 3; // 3 address bytes |
| - | while (cnt--) | + | while (cnt--) |
| - | _SPI_TX(0x00); | + | _SPI_TX(0x00); |
| - | uint8_t xflash_mfrid = _SPI_RX(); | + | uint8_t xflash_mfrid = _SPI_RX(); |
| - | uint8_t xflash_devid = _SPI_RX(); | + | uint8_t xflash_devid = _SPI_RX(); |
| - | _CS_HIGH(); | + | _CS_HIGH(); |
| - | return | + | return |
| - | ((xflash_mfrid == _MFRID_W25X20CL) && (xflash_devid == _DEVID_W25X20CL)) || | + | ((xflash_mfrid == _MFRID_W25X20CL) && (xflash_devid == _DEVID_W25X20CL)) || |
| - | ((xflash_mfrid == _MFRID_GD25Q20C) && (xflash_devid == _DEVID_GD25Q20C)); | + | ((xflash_mfrid == _MFRID_GD25Q20C) && (xflash_devid == _DEVID_GD25Q20C)); |
| } | } | ||
| </ | </ | ||
| + | 通过测试,发现该问题会有LCD2004硬件的SD卡CS到主控接触不良引起。当LCD2004的SD卡的CS到主控接触不良时,就会引起这个错误。 | ||
knowledge/3d_print/2022102301.1666529521.txt · 最后更改: 2025/10/11 02:55 (外部编辑)
