|
@ -1,3 +1,24 @@ |
|
|
|
|
|
/**
|
|
|
|
|
|
* Marlin 3D Printer Firmware |
|
|
|
|
|
* Copyright (C) 2016, 2017 MarlinFirmware [https://github.com/MarlinFirmware/Marlin]
|
|
|
|
|
|
* |
|
|
|
|
|
* Based on Sprinter and grbl. |
|
|
|
|
|
* Copyright (C) 2011 Camiel Gubbels / Erik van der Zalm |
|
|
|
|
|
* |
|
|
|
|
|
* This program is free software: you can redistribute it and/or modify |
|
|
|
|
|
* it under the terms of the GNU General Public License as published by |
|
|
|
|
|
* the Free Software Foundation, either version 3 of the License, or |
|
|
|
|
|
* (at your option) any later version. |
|
|
|
|
|
* |
|
|
|
|
|
* This program is distributed in the hope that it will be useful, |
|
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
|
|
|
|
* GNU General Public License for more details. |
|
|
|
|
|
* |
|
|
|
|
|
* You should have received a copy of the GNU General Public License |
|
|
|
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
* |
|
|
|
|
|
*/ |
|
|
#ifdef TARGET_LPC1768 |
|
|
#ifdef TARGET_LPC1768 |
|
|
|
|
|
|
|
|
#include "../../inc/MarlinConfig.h" |
|
|
#include "../../inc/MarlinConfig.h" |
|
@ -19,8 +40,6 @@ FATFS fat_fs; |
|
|
FIL eeprom_file; |
|
|
FIL eeprom_file; |
|
|
|
|
|
|
|
|
bool access_start() { |
|
|
bool access_start() { |
|
|
UINT file_size = 0, |
|
|
|
|
|
bytes_written = 0; |
|
|
|
|
|
const char eeprom_erase_value = 0xFF; |
|
|
const char eeprom_erase_value = 0xFF; |
|
|
MSC_Aquire_Lock(); |
|
|
MSC_Aquire_Lock(); |
|
|
if (f_mount(&fat_fs, "", 1)) { |
|
|
if (f_mount(&fat_fs, "", 1)) { |
|
@ -30,9 +49,8 @@ bool access_start() { |
|
|
FRESULT res = f_open(&eeprom_file, "eeprom.dat", FA_OPEN_ALWAYS | FA_WRITE | FA_READ); |
|
|
FRESULT res = f_open(&eeprom_file, "eeprom.dat", FA_OPEN_ALWAYS | FA_WRITE | FA_READ); |
|
|
if (res) MSC_Release_Lock(); |
|
|
if (res) MSC_Release_Lock(); |
|
|
|
|
|
|
|
|
if (res == FR_OK) file_size = f_size(&eeprom_file); |
|
|
|
|
|
|
|
|
|
|
|
if (res == FR_OK) { |
|
|
if (res == FR_OK) { |
|
|
|
|
|
uint16_t bytes_written, file_size = f_size(&eeprom_file); |
|
|
f_lseek(&eeprom_file, file_size); |
|
|
f_lseek(&eeprom_file, file_size); |
|
|
while (file_size <= E2END && res == FR_OK) { |
|
|
while (file_size <= E2END && res == FR_OK) { |
|
|
res = f_write(&eeprom_file, &eeprom_erase_value, 1, &bytes_written); |
|
|
res = f_write(&eeprom_file, &eeprom_erase_value, 1, &bytes_written); |
|
@ -56,53 +74,52 @@ bool access_finish() { |
|
|
// File function return codes for type FRESULT This goes away soon. But it is helpful right now to see
|
|
|
// File function return codes for type FRESULT This goes away soon. But it is helpful right now to see
|
|
|
// the different errors the read_data() and write_data() functions are seeing.
|
|
|
// the different errors the read_data() and write_data() functions are seeing.
|
|
|
//
|
|
|
//
|
|
|
//typedef enum {
|
|
|
// typedef enum {
|
|
|
// FR_OK = 0, /* (0) Succeeded */
|
|
|
// FR_OK = 0, /* (0) Succeeded */
|
|
|
// FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
|
|
// FR_DISK_ERR, /* (1) A hard error occurred in the low level disk I/O layer */
|
|
|
// FR_INT_ERR, /* (2) Assertion failed */
|
|
|
// FR_INT_ERR, /* (2) Assertion failed */
|
|
|
// FR_NOT_READY, /* (3) The physical drive cannot work */
|
|
|
// FR_NOT_READY, /* (3) The physical drive cannot work */
|
|
|
// FR_NO_FILE, /* (4) Could not find the file */
|
|
|
// FR_NO_FILE, /* (4) Could not find the file */
|
|
|
// FR_NO_PATH, /* (5) Could not find the path */
|
|
|
// FR_NO_PATH, /* (5) Could not find the path */
|
|
|
// FR_INVALID_NAME, /* (6) The path name format is invalid */
|
|
|
// FR_INVALID_NAME, /* (6) The path name format is invalid */
|
|
|
// FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
|
|
// FR_DENIED, /* (7) Access denied due to prohibited access or directory full */
|
|
|
// FR_EXIST, /* (8) Access denied due to prohibited access */
|
|
|
// FR_EXIST, /* (8) Access denied due to prohibited access */
|
|
|
// FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
|
|
// FR_INVALID_OBJECT, /* (9) The file/directory object is invalid */
|
|
|
// FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
|
|
// FR_WRITE_PROTECTED, /* (10) The physical drive is write protected */
|
|
|
// FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
|
|
// FR_INVALID_DRIVE, /* (11) The logical drive number is invalid */
|
|
|
// FR_NOT_ENABLED, /* (12) The volume has no work area */
|
|
|
// FR_NOT_ENABLED, /* (12) The volume has no work area */
|
|
|
// FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
|
|
// FR_NO_FILESYSTEM, /* (13) There is no valid FAT volume */
|
|
|
// FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
|
|
|
// FR_MKFS_ABORTED, /* (14) The f_mkfs() aborted due to any problem */
|
|
|
// FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
|
|
// FR_TIMEOUT, /* (15) Could not get a grant to access the volume within defined period */
|
|
|
// FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
|
|
// FR_LOCKED, /* (16) The operation is rejected according to the file sharing policy */
|
|
|
// FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
|
|
// FR_NOT_ENOUGH_CORE, /* (17) LFN working buffer could not be allocated */
|
|
|
// FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
|
|
|
// FR_TOO_MANY_OPEN_FILES, /* (18) Number of open files > FF_FS_LOCK */
|
|
|
// FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
|
|
// FR_INVALID_PARAMETER /* (19) Given parameter is invalid */
|
|
|
//} FRESULT;
|
|
|
// } FRESULT;
|
|
|
|
|
|
|
|
|
bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) { |
|
|
bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) { |
|
|
FRESULT s; |
|
|
FRESULT s; |
|
|
UINT bytes_written = 0; |
|
|
uint16_t bytes_written = 0; |
|
|
|
|
|
|
|
|
s = f_lseek(&eeprom_file, pos); |
|
|
s = f_lseek(&eeprom_file, pos); |
|
|
if ( s ) { |
|
|
if (s) { |
|
|
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOL("...)\n"); |
|
|
SERIAL_PROTOCOL("...)\n"); |
|
|
SERIAL_PROTOCOLPAIR(" f_lseek()=", (int) s); |
|
|
SERIAL_PROTOCOLLNPAIR(" f_lseek()=", (int)s); |
|
|
SERIAL_PROTOCOL("\n"); |
|
|
|
|
|
return s; |
|
|
return s; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
s = f_write(&eeprom_file, (void *)value, size, &bytes_written); |
|
|
s = f_write(&eeprom_file, (void *)value, size, &bytes_written); |
|
|
if ( s ) { |
|
|
if (s) { |
|
|
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(" write_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOLPAIR(",", size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOL("...)\n"); |
|
|
SERIAL_PROTOCOLLN("...)"); |
|
|
SERIAL_PROTOCOLPAIR(" f_write()=", (int) s); |
|
|
SERIAL_PROTOCOLLNPAIR(" f_write()=", (int)s); |
|
|
SERIAL_PROTOCOL("\n"); |
|
|
SERIAL_PROTOCOLPAIR(" size=", size); |
|
|
SERIAL_PROTOCOLPAIR(" size=", (int) size); |
|
|
SERIAL_PROTOCOLLNPAIR("\n bytes_written=", bytes_written); |
|
|
SERIAL_PROTOCOLPAIR("\n bytes_written=", (int) bytes_written); |
|
|
|
|
|
SERIAL_PROTOCOL("\n"); |
|
|
|
|
|
return s; |
|
|
return s; |
|
|
} |
|
|
} |
|
|
crc16(crc, value, size); |
|
|
crc16(crc, value, size); |
|
@ -111,29 +128,26 @@ bool write_data(int &pos, const uint8_t *value, uint16_t size, uint16_t *crc) { |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) { |
|
|
bool read_data(int &pos, uint8_t* value, uint16_t size, uint16_t *crc) { |
|
|
UINT bytes_read = 0; |
|
|
uint16_t bytes_read = 0; |
|
|
FRESULT s; |
|
|
FRESULT s; |
|
|
s = f_lseek(&eeprom_file, pos); |
|
|
s = f_lseek(&eeprom_file, pos); |
|
|
if ( s ) { |
|
|
if ( s ) { |
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOLPAIR(",", size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOL("...)\n"); |
|
|
SERIAL_PROTOCOLLN("...)"); |
|
|
SERIAL_PROTOCOLPAIR(" f_lseek()=", (int) s); |
|
|
SERIAL_PROTOCOLLNPAIR(" f_lseek()=", (int)s); |
|
|
SERIAL_PROTOCOL("\n"); |
|
|
|
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
s = f_read(&eeprom_file, (void *)value, size, &bytes_read); |
|
|
s = f_read(&eeprom_file, (void *)value, size, &bytes_read); |
|
|
if ( s ) { |
|
|
if (s) { |
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(" read_data(", pos); // This extra chit-chat goes away soon. But it is helpful
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int)value); // right now to see errors that are happening in the
|
|
|
SERIAL_PROTOCOLPAIR(",", (int) size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOLPAIR(",", size); // read_data() and write_data() functions
|
|
|
SERIAL_PROTOCOL("...)\n"); |
|
|
SERIAL_PROTOCOLLN("...)"); |
|
|
SERIAL_PROTOCOLPAIR(" f_write()=", (int) s); |
|
|
SERIAL_PROTOCOLLNPAIR(" f_write()=", (int)s); |
|
|
SERIAL_PROTOCOL("\n"); |
|
|
SERIAL_PROTOCOLPAIR(" size=", size); |
|
|
SERIAL_PROTOCOLPAIR(" size=", (int) size); |
|
|
SERIAL_PROTOCOLLNPAIR("\n bytes_read=", bytes_read); |
|
|
SERIAL_PROTOCOLPAIR("\n bytes_read=", (int) bytes_read); |
|
|
|
|
|
SERIAL_PROTOCOL("\n"); |
|
|
|
|
|
return true; |
|
|
return true; |
|
|
} |
|
|
} |
|
|
crc16(crc, value, size); |
|
|
crc16(crc, value, size); |
|
|