Skip to content

Commit ccfe0e2

Browse files
committed
Add support of HW ECC
1 parent 73f92af commit ccfe0e2

19 files changed

+274
-110
lines changed

firmware/programmer/flash_hal.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ typedef struct
3131
void (*write_page_async)(uint8_t *buf, uint32_t page, uint32_t page_size);
3232
uint32_t (*read_status)();
3333
bool (*is_bb_supported)();
34+
uint32_t (*enable_hw_ecc)(bool enable);
3435
} flash_hal_t;
3536

3637
#endif /* _FLASH_HAL_H_ */

firmware/programmer/fsmc_nand.c

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ typedef struct __attribute__((__packed__))
5454
uint8_t erase1_cmd;
5555
uint8_t erase2_cmd;
5656
uint8_t status_cmd;
57+
uint8_t set_features_cmd;
58+
uint8_t enable_ecc_addr;
59+
uint8_t enable_ecc_value;
60+
uint8_t disable_ecc_value;
5761
} fsmc_conf_t;
5862

5963
static fsmc_conf_t fsmc_conf;
@@ -136,6 +140,10 @@ static void nand_print_fsmc_info()
136140
DEBUG_PRINT("Erase 1 command: %d\r\n", fsmc_conf.erase1_cmd);
137141
DEBUG_PRINT("Erase 2 command: %d\r\n", fsmc_conf.erase2_cmd);
138142
DEBUG_PRINT("Status command: %d\r\n", fsmc_conf.status_cmd);
143+
DEBUG_PRINT("Set feature command: %d\r\n", fsmc_conf.set_feature_cmd);
144+
DEBUG_PRINT("Enable ECC address: %d\r\n", fsmc_conf.enable_ecc_addr);
145+
DEBUG_PRINT("Enable ECC value: %d\r\n", fsmc_conf.enable_ecc_value);
146+
DEBUG_PRINT("Disable ECC value: %d\r\n", fsmc_conf.disable_ecc_value);
139147
}
140148

141149
static void nand_reset()
@@ -469,6 +477,26 @@ static inline bool nand_is_bb_supported()
469477
return true;
470478
}
471479

480+
static uint32_t nand_enable_hw_ecc(bool enable)
481+
{
482+
uint8_t enable_ecc;
483+
484+
if (fsmc_conf.set_features_cmd == UNDEFINED_CMD)
485+
return FLASH_STATUS_INVALID_CMD;
486+
487+
enable_ecc = enable ? fsmc_conf.enable_ecc_value :
488+
fsmc_conf.disable_ecc_value;
489+
490+
*(__IO uint8_t *)(Bank_NAND_ADDR | CMD_AREA) = fsmc_conf.set_features_cmd;
491+
*(__IO uint8_t *)(Bank_NAND_ADDR | ADDR_AREA) = fsmc_conf.enable_ecc_addr;
492+
*(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = enable_ecc;
493+
*(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = 0;
494+
*(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = 0;
495+
*(__IO uint8_t *)(Bank_NAND_ADDR | DATA_AREA) = 0;
496+
497+
return 0;
498+
}
499+
472500
flash_hal_t hal_fsmc =
473501
{
474502
.init = nand_init,
@@ -479,6 +507,7 @@ flash_hal_t hal_fsmc =
479507
.read_spare_data = nand_read_spare_data,
480508
.write_page_async = nand_write_page_async,
481509
.read_status = nand_read_status,
482-
.is_bb_supported = nand_is_bb_supported
510+
.is_bb_supported = nand_is_bb_supported,
511+
.enable_hw_ecc = nand_enable_hw_ecc,
483512
};
484513

firmware/programmer/nand_programmer.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ typedef struct __attribute__((__packed__))
7676
{
7777
uint8_t skip_bb : 1;
7878
uint8_t inc_spare : 1;
79+
uint8_t enable_hw_ecc: 1;
7980
} np_cmd_flags_t;
8081

8182
typedef struct __attribute__((__packed__))
@@ -573,6 +574,10 @@ static int np_cmd_nand_write_start(np_prog_t *prog)
573574
}
574575

575576
write_start_cmd = (np_write_start_cmd_t *)prog->rx_buf;
577+
578+
if (hal[prog->hal]->enable_hw_ecc)
579+
hal[prog->hal]->enable_hw_ecc(write_start_cmd->flags.enable_hw_ecc);
580+
576581
addr = write_start_cmd->addr;
577582
len = write_start_cmd->len;
578583

qt/cmd.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ typedef struct __attribute__((__packed__))
3434
{
3535
uint8_t skipBB : 1;
3636
uint8_t incSpare : 1;
37+
uint8_t enableHwEcc: 1;
3738
} CmdFlags;
3839

3940
typedef struct __attribute__((__packed__))

qt/main_window.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -643,12 +643,15 @@ void MainWindow::slotSettingsProgrammer()
643643
prog->isSkipBB())).toBool());
644644
progDialog.setIncSpare((settings.value(SETTINGS_INCLUDE_SPARE_AREA,
645645
prog->isIncSpare())).toBool());
646+
progDialog.setHwEccEnabled((settings.value(SETTINGS_ENABLE_HW_ECC,
647+
prog->isHwEccEnabled())).toBool());
646648

647649
if (progDialog.exec() == QDialog::Accepted)
648650
{
649651
settings.setValue(SETTINGS_USB_DEV_NAME, progDialog.getUsbDevName());
650652
settings.setValue(SETTINGS_SKIP_BAD_BLOCKS, progDialog.isSkipBB());
651653
settings.setValue(SETTINGS_INCLUDE_SPARE_AREA, progDialog.isIncSpare());
654+
settings.setValue(SETTINGS_ENABLE_HW_ECC, progDialog.isHwEccEnabled());
652655
settings.sync();
653656

654657
updateProgSettings();
@@ -668,6 +671,8 @@ void MainWindow::updateProgSettings()
668671
prog->setIncSpare(settings.value(SETTINGS_INCLUDE_SPARE_AREA).
669672
toBool());
670673
}
674+
if (settings.contains(SETTINGS_ENABLE_HW_ECC))
675+
prog->setHwEccEnabled(settings.value(SETTINGS_ENABLE_HW_ECC).toBool());
671676
}
672677

673678
void MainWindow::slotSettingsParallelChipDb()

qt/nando_parallel_chip_db.csv

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
# name, page size, block size, total size, spare size, bad block mark off., tCS, tCLS, tALS, tCLR, tAR, tWP, tRP, tDS, tCH, tCLH, tALH, tWC, tRC, tREA, row cycles, col. cycles, read 1 cycle com., read 2 cycle com., read spare com., read ID com., reset com., write 1 cycle com., write 2 cycle com., erase 1 cycle com., erase 2 cycle com., status com., ID1, ID2, ID3, ID4, ID5
2-
K9F2G08U0C, 2048, 131072, 268435456, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 236, 218, 16, 149, 68
3-
K9F1G08U0E, 2048, 131072, 134217728, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 236, 241, 0, 149, 65
4-
K9F1208U0B, 512, 16384, 67108864, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 45, 50, 30, 3, 1, 0, -, -, 144, 255, 128, 16, 96, 208, 112, 236, 118, 165, 192, -
5-
K9G8G08U0A, 2048, 262144, 1073741824, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 236, 211, 20, 165, 100
6-
K9G8G08U0M, 2048, 262144, 1073741824, 64, 0, 20, 15, 15, 10, 10, 15, 15, 15, 5, 5, 5, 30, 30, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 236, 211, 20, 37, 100
7-
HY27US08281A, 512, 16384, 16777216, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 50, 50, 30, 2, 1, 0, -, 80, 144, 255, 128, 16, 96, 208, 112, 173, 115, -, -, -
8-
HY27US08561A, 512, 16384, 33554432, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 50, 50, 30, 2, 1, 0, -, 80, 144, 255, 128, 16, 96, 208, 112, 173, 117, -, -, -
9-
HY27US08121B, 512, 16384, 67108864, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 50, 50, 30, 3, 1, 0, -, 80, 144, 255, 128, 16, 96, 208, 112, 173, 118, -, -, -
10-
TC58NVG2S3E, 2048, 131072, 536870912, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 152, 220, 144, 21, 118
11-
TC58NVG1S3E, 2048, 131072, 268435456, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 152, 218, 144, 21, 118
12-
F59L2G81A, 2048, 131072, 268435456, 64, 0, 20, 12, 5, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 200, 218, 144, 149, 68
13-
MT29F2G08ABAEA, 2048, 131072, 268435456, 64, 0, 15, 10, 10, 10, 10, 10, 10, 7, 5, 5, 5, 20, 20, 16, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 44, 218, 144, 149, -
14-
MT29F4G08ABAD, 2048, 131072, 536870912, 64, 0, 15, 10, 10, 10, 10, 10, 10, 7, 5, 5, 5, 20, 20, 16, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 44, 220, 144, 149, -
15-
MX30LF2G18AC, 2048, 131072, 268435456, 64, 0, 15, 10, 10, 10, 10, 10, 10, 7, 5, 5, 5, 20, 20, 16, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 194, 218, 144, 149, 6
16-
S34ML01G1, 2048, 131072, 134217728, 64, 0, 20, 10, 10, 10, 10, 12, 12, 10, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 1, 241, 0, 29, -
17-
S34ML02G1, 2048, 131072, 268435456, 64, 0, 20, 10, 10, 10, 10, 12, 12, 10, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 1, 218, 144, 149, 68
18-
S34ML04G1, 2048, 131072, 536870912, 64, 0, 20, 10, 10, 10, 10, 12, 12, 10, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 1, 220, 144, 149, 84
1+
# name, page size, block size, total size, spare size, bad block mark off., tCS, tCLS, tALS, tCLR, tAR, tWP, tRP, tDS, tCH, tCLH, tALH, tWC, tRC, tREA, row cycles, col. cycles, read 1 cycle com., read 2 cycle com., read spare com., read ID com., reset com., write 1 cycle com., write 2 cycle com., erase 1 cycle com., erase 2 cycle com., status com., set feat. com., en. ECC addr, en. ECC val., dis. ECC val., ID1, ID2, ID3, ID4, ID5
2+
K9F2G08U0C, 2048, 131072, 268435456, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 236, 218, 16, 149, 68
3+
K9F1G08U0E, 2048, 131072, 134217728, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 236, 241, 0, 149, 65
4+
K9F1208U0B, 512, 16384, 67108864, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 45, 50, 30, 3, 1, 0, -, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 236, 118, 165, 192, -
5+
K9G8G08U0A, 2048, 262144, 1073741824, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 236, 211, 20, 165, 100
6+
K9G8G08U0M, 2048, 262144, 1073741824, 64, 0, 20, 15, 15, 10, 10, 15, 15, 15, 5, 5, 5, 30, 30, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 236, 211, 20, 37, 100
7+
HY27US08281A, 512, 16384, 16777216, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 50, 50, 30, 2, 1, 0, -, 80, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 173, 115, -, -, -
8+
HY27US08561A, 512, 16384, 33554432, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 50, 50, 30, 2, 1, 0, -, 80, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 173, 117, -, -, -
9+
HY27US08121B, 512, 16384, 67108864, 16, 5, 0, 0, 0, 10, 10, 25, 25, 20, 10, 10, 10, 50, 50, 30, 3, 1, 0, -, 80, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 173, 118, -, -, -
10+
TC58NVG2S3E, 2048, 131072, 536870912, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 152, 220, 144, 21, 118
11+
TC58NVG1S3E, 2048, 131072, 268435456, 64, 0, 20, 12, 12, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 152, 218, 144, 21, 118
12+
F59L2G81A, 2048, 131072, 268435456, 64, 0, 20, 12, 5, 10, 10, 12, 12, 12, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 200, 218, 144, 149, 68
13+
MT29F2G08ABAEA, 2048, 131072, 268435456, 64, 0, 15, 10, 10, 10, 10, 10, 10, 7, 5, 5, 5, 20, 20, 16, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 239, 144, 8, 0, 44, 218, 144, 149, -
14+
MT29F4G08ABAD, 2048, 131072, 536870912, 64, 0, 15, 10, 10, 10, 10, 10, 10, 7, 5, 5, 5, 20, 20, 16, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, 239, 144, 8, 0, 44, 220, 144, 149, -
15+
MX30LF2G18AC, 2048, 131072, 268435456, 64, 0, 15, 10, 10, 10, 10, 10, 10, 7, 5, 5, 5, 20, 20, 16, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 194, 218, 144, 149, 6
16+
S34ML01G1, 2048, 131072, 134217728, 64, 0, 20, 10, 10, 10, 10, 12, 12, 10, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 1, 241, 0, 29, -
17+
S34ML02G1, 2048, 131072, 268435456, 64, 0, 20, 10, 10, 10, 10, 12, 12, 10, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 1, 218, 144, 149, 68
18+
S34ML04G1, 2048, 131072, 536870912, 64, 0, 20, 10, 10, 10, 10, 12, 12, 10, 5, 5, 5, 25, 25, 20, 3, 2, 0, 48, -, 144, 255, 128, 16, 96, 208, 112, -, -, -, -, 1, 220, 144, 149, 84

qt/parallel_chip_db.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ class ParallelChipDb : public ChipDb
6060
CHIP_PARAM_ERASE1_CMD,
6161
CHIP_PARAM_ERASE2_CMD,
6262
CHIP_PARAM_STATUS_CMD,
63+
CHIP_PARAM_SET_FEATURE_CMD,
64+
CHIP_PARAM_ENABLE_HW_ECC_ADDR,
65+
CHIP_PARAM_ENABLE_HW_ECC_VALUE,
66+
CHIP_PARAM_DISABLE_HW_ECC_VALUE,
6367
CHIP_PARAM_ID1,
6468
CHIP_PARAM_ID2,
6569
CHIP_PARAM_ID3,

qt/parallel_chip_db_dialog.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@
66
#include "parallel_chip_db_dialog.h"
77
#include "ui_parallel_chip_db_dialog.h"
88

9-
#define HEADER_LONG_WIDTH 120
10-
#define HEADER_MED_WIDTH 110
9+
#define HEADER_LONG_WIDTH 130
10+
#define HEADER_MED_WIDTH 120
1111
#define HEADER_SHORT_WIDTH 50
1212

1313
ParallelChipDbDialog::ParallelChipDbDialog(ParallelChipDb *chipDb,
@@ -41,7 +41,7 @@ ParallelChipDbDialog::ParallelChipDbDialog(ParallelChipDb *chipDb,
4141
ui->chipDbTableView->setColumnWidth(i, HEADER_SHORT_WIDTH);
4242
}
4343
for (int i = ParallelChipDb::CHIP_PARAM_ROW_CYCLES;
44-
i <= ParallelChipDb::CHIP_PARAM_STATUS_CMD; i++)
44+
i <= ParallelChipDb::CHIP_PARAM_DISABLE_HW_ECC_VALUE; i++)
4545
{
4646
ui->chipDbTableView->setColumnWidth(i, HEADER_MED_WIDTH);
4747
}

qt/parallel_chip_db_table_model.cpp

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,22 @@ QVariant ParallelChipDbTableModel::data(const QModelIndex &index,
145145
chipDb->getHexStringFromParam(chipDb->getChipParam(index.row(),
146146
ParallelChipInfo::CHIP_PARAM_STATUS_CMD), paramStr);
147147
return paramStr;
148+
case ParallelChipDb::CHIP_PARAM_SET_FEATURE_CMD:
149+
chipDb->getHexStringFromOptParam(chipDb->getChipParam(index.row(),
150+
ParallelChipInfo::CHIP_PARAM_SET_FEATURE_CMD), paramStr);
151+
return paramStr;
152+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_ADDR:
153+
chipDb->getHexStringFromOptParam(chipDb->getChipParam(index.row(),
154+
ParallelChipInfo::CHIP_PARAM_ENABLE_HW_ECC_ADDR), paramStr);
155+
return paramStr;
156+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_VALUE:
157+
chipDb->getHexStringFromOptParam(chipDb->getChipParam(index.row(),
158+
ParallelChipInfo::CHIP_PARAM_ENABLE_HW_ECC_VALUE), paramStr);
159+
return paramStr;
160+
case ParallelChipDb::CHIP_PARAM_DISABLE_HW_ECC_VALUE:
161+
chipDb->getHexStringFromOptParam(chipDb->getChipParam(index.row(),
162+
ParallelChipInfo::CHIP_PARAM_DISABLE_HW_ECC_VALUE), paramStr);
163+
return paramStr;
148164
case ParallelChipDb::CHIP_PARAM_ID1:
149165
chipDb->getHexStringFromParam(chipDb->getChipParam(index.row(),
150166
ParallelChipInfo::CHIP_PARAM_ID1), paramStr);
@@ -241,6 +257,14 @@ QVariant ParallelChipDbTableModel::headerData(int section,
241257
return tr("Erase 2 com.");
242258
case ParallelChipDb::CHIP_PARAM_STATUS_CMD:
243259
return tr("Status com.");
260+
case ParallelChipDb::CHIP_PARAM_SET_FEATURE_CMD:
261+
return tr("Set feat. com.");
262+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_ADDR:
263+
return tr("En. HW ECC addr.");
264+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_VALUE:
265+
return tr("En. HW ECC val.");
266+
case ParallelChipDb::CHIP_PARAM_DISABLE_HW_ECC_VALUE:
267+
return tr("Dis. HW ECC val.");
244268
case ParallelChipDb::CHIP_PARAM_ID1:
245269
return tr("ID 1");
246270
case ParallelChipDb::CHIP_PARAM_ID2:
@@ -324,6 +348,14 @@ QVariant ParallelChipDbTableModel::headerData(int section,
324348
return tr("Erase 2 cycle command");
325349
case ParallelChipDb::CHIP_PARAM_STATUS_CMD:
326350
return tr("Status command");
351+
case ParallelChipDb::CHIP_PARAM_SET_FEATURE_CMD:
352+
return tr("Set feature command");
353+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_ADDR:
354+
return tr("Enable HW ECC address");
355+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_VALUE:
356+
return tr("Enable HW ECC value");
357+
case ParallelChipDb::CHIP_PARAM_DISABLE_HW_ECC_VALUE:
358+
return tr("Disable HW ECC value");
327359
case ParallelChipDb::CHIP_PARAM_ID1:
328360
return tr("Chip ID 1st byte");
329361
case ParallelChipDb::CHIP_PARAM_ID2:
@@ -571,6 +603,38 @@ bool ParallelChipDbTableModel::setData(const QModelIndex &index,
571603
chipDb->setChipParam(index.row(),
572604
ParallelChipInfo::CHIP_PARAM_STATUS_CMD, paramVal);
573605
return true;
606+
case ParallelChipDb::CHIP_PARAM_SET_FEATURE_CMD:
607+
if (chipDb->getOptParamFromHexString(value.toString(), paramVal))
608+
return false;
609+
if (!chipDb->isOptParamValid(paramVal, 0x00, 0xFF))
610+
return false;
611+
chipDb->setChipParam(index.row(),
612+
ParallelChipInfo::CHIP_PARAM_SET_FEATURE_CMD, paramVal);
613+
return true;
614+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_ADDR:
615+
if (chipDb->getOptParamFromHexString(value.toString(), paramVal))
616+
return false;
617+
if (!chipDb->isOptParamValid(paramVal, 0x00, 0xFF))
618+
return false;
619+
chipDb->setChipParam(index.row(),
620+
ParallelChipInfo::CHIP_PARAM_ENABLE_HW_ECC_ADDR, paramVal);
621+
return true;
622+
case ParallelChipDb::CHIP_PARAM_ENABLE_HW_ECC_VALUE:
623+
if (chipDb->getOptParamFromHexString(value.toString(), paramVal))
624+
return false;
625+
if (!chipDb->isOptParamValid(paramVal, 0x00, 0xFF))
626+
return false;
627+
chipDb->setChipParam(index.row(),
628+
ParallelChipInfo::CHIP_PARAM_ENABLE_HW_ECC_VALUE, paramVal);
629+
return true;
630+
case ParallelChipDb::CHIP_PARAM_DISABLE_HW_ECC_VALUE:
631+
if (chipDb->getOptParamFromHexString(value.toString(), paramVal))
632+
return false;
633+
if (!chipDb->isOptParamValid(paramVal, 0x00, 0xFF))
634+
return false;
635+
chipDb->setChipParam(index.row(),
636+
ParallelChipInfo::CHIP_PARAM_DISABLE_HW_ECC_VALUE, paramVal);
637+
return true;
574638
case ParallelChipDb::CHIP_PARAM_ID1:
575639
if (chipDb->getParamFromHexString(value.toString(), paramVal))
576640
return false;

qt/parallel_chip_info.cpp

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ typedef struct __attribute__((__packed__))
2929
uint8_t erase1Cmd;
3030
uint8_t erase2Cmd;
3131
uint8_t statusCmd;
32+
uint8_t setFeaturesCmd;
33+
uint8_t enableEccAddr;
34+
uint8_t enableEccValue;
35+
uint8_t disableEccValue;
3236
} Conf;
3337

3438
ParallelChipInfo::ParallelChipInfo()
@@ -133,6 +137,13 @@ const QByteArray &ParallelChipInfo::getHalConf()
133137
conf.erase1Cmd = static_cast<uint8_t>(params[CHIP_PARAM_ERASE1_CMD]);
134138
conf.erase2Cmd = static_cast<uint8_t>(params[CHIP_PARAM_ERASE2_CMD]);
135139
conf.statusCmd = static_cast<uint8_t>(params[CHIP_PARAM_STATUS_CMD]);
140+
conf.setFeaturesCmd = static_cast<uint8_t>(params[CHIP_PARAM_STATUS_CMD]);
141+
conf.enableEccAddr =
142+
static_cast<uint8_t>(params[CHIP_PARAM_ENABLE_HW_ECC_ADDR]);
143+
conf.enableEccValue =
144+
static_cast<uint8_t>(params[CHIP_PARAM_ENABLE_HW_ECC_VALUE]);
145+
conf.disableEccValue =
146+
static_cast<uint8_t>(params[CHIP_PARAM_DISABLE_HW_ECC_VALUE]);
136147

137148
halConf.clear();
138149
halConf.append(reinterpret_cast<const char *>(&conf), sizeof(conf));

0 commit comments

Comments
 (0)