Skip to content

Commit f3e203b

Browse files
committed
Added UI configuration for skipping bad blocks
1 parent b097d68 commit f3e203b

File tree

8 files changed

+65
-7
lines changed

8 files changed

+65
-7
lines changed

firmware/nand_programmer.c

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,11 +58,17 @@ typedef struct __attribute__((__packed__))
5858
np_cmd_code_t code;
5959
} np_cmd_t;
6060

61+
typedef struct __attribute__((__packed__))
62+
{
63+
uint8_t skip_bb : 1;
64+
} np_cmd_flags_t;
65+
6166
typedef struct __attribute__((__packed__))
6267
{
6368
np_cmd_t cmd;
6469
uint32_t addr;
6570
uint32_t len;
71+
np_cmd_flags_t flags;
6672
} np_erase_cmd_t;
6773

6874
typedef struct __attribute__((__packed__))
@@ -270,9 +276,9 @@ static int np_nand_erase(np_prog_t *prog, uint32_t page)
270276

271277
static int _np_cmd_nand_erase(np_prog_t *prog)
272278
{
273-
int is_bad;
274279
uint32_t addr, page, pages_in_block, len;
275280
np_erase_cmd_t *erase_cmd = (np_erase_cmd_t *)prog->rx_buf;
281+
bool is_bad = false, skip_bb = erase_cmd->flags.skip_bb;
276282

277283
len = erase_cmd->len;
278284
addr = erase_cmd->addr;
@@ -318,7 +324,7 @@ static int _np_cmd_nand_erase(np_prog_t *prog)
318324
return NP_ERR_ADDR_EXCEEDED;
319325
}
320326

321-
if ((is_bad = nand_bad_block_table_lookup(addr)))
327+
if (skip_bb && (is_bad = nand_bad_block_table_lookup(addr)))
322328
{
323329
DEBUG_PRINT("Skipped bad block at 0x%lx\r\n", addr);
324330
if (np_send_bad_block_info(addr))

qt/cmd.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,17 @@ typedef struct __attribute__((__packed__))
2020
uint8_t code;
2121
} Cmd;
2222

23+
typedef struct __attribute__((__packed__))
24+
{
25+
uint8_t skipBB : 1;
26+
} CmdFlags;
27+
2328
typedef struct __attribute__((__packed__))
2429
{
2530
Cmd cmd;
2631
uint32_t addr;
2732
uint32_t len;
33+
CmdFlags flags;
2834
} EraseCmd;
2935

3036
typedef struct __attribute__((__packed__))

qt/main_window.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,11 @@ void MainWindow::slotSettingsProgrammer()
346346
SettingsProgrammerDialog progDialog(this);
347347

348348
progDialog.setUsbDevName(prog->getUsbDevName());
349+
progDialog.setSkipBB(prog->isSkipBB());
349350

350351
if (progDialog.exec() == QDialog::Accepted)
352+
{
351353
prog->setUsbDevName(progDialog.getUsbDevName());
354+
prog->setSkipBB(progDialog.isSkipBB());
355+
}
352356
}

qt/programmer.cpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
Programmer::Programmer(QObject *parent) : QObject(parent)
1717
{
1818
usbDevName = USB_DEV_NAME;
19+
skipBB = true;
1920
QObject::connect(&reader, SIGNAL(log(QtMsgType, QString)), this,
2021
SLOT(logCb(QtMsgType, QString)));
2122
QObject::connect(&writer, SIGNAL(log(QtMsgType, QString)), this,
@@ -79,6 +80,16 @@ QString Programmer::getUsbDevName()
7980
return usbDevName;
8081
}
8182

83+
bool Programmer::isSkipBB()
84+
{
85+
return skipBB;
86+
}
87+
88+
void Programmer::setSkipBB(bool skip)
89+
{
90+
skipBB = skip;
91+
}
92+
8293
void Programmer::readChipIdCb(int ret)
8394
{
8495
emit readChipIdCompleted(ret);
@@ -114,7 +125,8 @@ void Programmer::eraseChipCb(int ret)
114125
void Programmer::eraseChip(uint32_t addr, uint32_t len)
115126
{
116127
Cmd cmd = { .code = CMD_NAND_ERASE };
117-
EraseCmd eraseCmd = { .cmd = cmd, .addr = addr, .len = len };
128+
EraseCmd eraseCmd = { .cmd = cmd, .addr = addr, .len = len,
129+
.flags = { .skipBB = skipBB } };
118130

119131
QObject::connect(&reader, SIGNAL(result(int)), this,
120132
SLOT(eraseChipCb(int)));

qt/programmer.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ class Programmer : public QObject
2525
Writer writer;
2626
Reader reader;
2727
bool isConn;
28+
bool skipBB;
2829

2930
int serialPortConnect();
3031
void serialPortDisconnect();
@@ -39,6 +40,8 @@ class Programmer : public QObject
3940
bool isConnected();
4041
void setUsbDevName(const QString &name);
4142
QString getUsbDevName();
43+
bool isSkipBB();
44+
void setSkipBB(bool skip);
4245
void readChipId(ChipId *chipId);
4346
void eraseChip(uint32_t addr, uint32_t len);
4447
void readChip(uint8_t *buf, uint32_t addr, uint32_t len);

qt/settings_programmer_dialog.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,3 +22,13 @@ QString SettingsProgrammerDialog::getUsbDevName()
2222
{
2323
return ui->usbDevNameLineEdit->text();
2424
}
25+
26+
void SettingsProgrammerDialog::setSkipBB(bool skip)
27+
{
28+
ui->skipBBCheckBox->setChecked(skip);
29+
}
30+
31+
bool SettingsProgrammerDialog::isSkipBB()
32+
{
33+
return ui->skipBBCheckBox->isChecked();
34+
}

qt/settings_programmer_dialog.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ class SettingsProgrammerDialog : public QDialog
1616
~SettingsProgrammerDialog();
1717
void setUsbDevName(const QString &name);
1818
QString getUsbDevName();
19+
void setSkipBB(bool skip);
20+
bool isSkipBB();
1921

2022
private:
2123
Ui::SettingsProgrammerDialog *ui;

qt/settings_programmer_dialog.ui

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
3030
</property>
3131
</widget>
32-
<widget class="QWidget" name="">
32+
<widget class="QWidget" name="layoutWidget">
3333
<property name="geometry">
3434
<rect>
3535
<x>10</x>
@@ -51,10 +51,25 @@
5151
</item>
5252
</layout>
5353
</widget>
54+
<widget class="QCheckBox" name="skipBBCheckBox">
55+
<property name="geometry">
56+
<rect>
57+
<x>10</x>
58+
<y>60</y>
59+
<width>101</width>
60+
<height>20</height>
61+
</rect>
62+
</property>
63+
<property name="text">
64+
<string>Skip bad blocks</string>
65+
</property>
66+
<property name="checked">
67+
<bool>true</bool>
68+
</property>
69+
</widget>
70+
<zorder>layoutWidget</zorder>
5471
<zorder>buttonBox</zorder>
55-
<zorder>usbDevNameLabel</zorder>
56-
<zorder>usbDevNameLineEdit</zorder>
57-
<zorder>usbDevNameLabel</zorder>
72+
<zorder>skipBBCheckBox</zorder>
5873
</widget>
5974
<resources/>
6075
<connections>

0 commit comments

Comments
 (0)