Skip to content

Commit 3570e4f

Browse files
committed
Added SPI write enable command
1 parent cfefee5 commit 3570e4f

File tree

5 files changed

+36
-0
lines changed

5 files changed

+36
-0
lines changed

firmware/programmer/spi_flash.c

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,15 @@
2626
/* 4th addressing cycle */
2727
#define ADDR_4th_CYCLE(ADDR) (uint8_t)(((ADDR)& 0xFF000000) >> 24)
2828

29+
#define UNDEFINED_CMD 0xFF
30+
2931
typedef struct __attribute__((__packed__))
3032
{
3133
uint8_t page_offset;
3234
uint8_t read_cmd;
3335
uint8_t read_id_cmd;
3436
uint8_t write_cmd;
37+
uint8_t write_en_cmd;
3538
uint8_t erase_cmd;
3639
uint8_t status_cmd;
3740
uint8_t busy_bit;
@@ -241,11 +244,23 @@ static void spi_flash_read_id(chip_id_t *chip_id)
241244
spi_flash_deselect_chip();
242245
}
243246

247+
static void spi_flash_write_enable()
248+
{
249+
if (spi_conf.write_en_cmd == UNDEFINED_CMD)
250+
return;
251+
252+
spi_flash_select_chip();
253+
spi_flash_send_byte(spi_conf.write_en_cmd);
254+
spi_flash_deselect_chip();
255+
}
256+
244257
static void spi_flash_write_page_async(uint8_t *buf, uint32_t page,
245258
uint32_t page_size)
246259
{
247260
uint32_t i;
248261

262+
spi_flash_write_enable();
263+
249264
spi_flash_select_chip();
250265

251266
spi_flash_send_byte(spi_conf.write_cmd);
@@ -302,6 +317,8 @@ static uint32_t spi_flash_erase_block(uint32_t page)
302317
{
303318
uint32_t addr = page << spi_conf.page_offset;
304319

320+
spi_flash_write_enable();
321+
305322
spi_flash_select_chip();
306323

307324
spi_flash_send_byte(spi_conf.erase_cmd);

qt/spi_chip_db.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ class SpiChipDb : public ChipDb
3636
CHIP_PARAM_READ_CMD,
3737
CHIP_PARAM_READ_ID_CMD,
3838
CHIP_PARAM_WRITE_CMD,
39+
CHIP_PARAM_WRITE_EN_CMD,
3940
CHIP_PARAM_ERASE_CMD,
4041
CHIP_PARAM_STATUS_CMD,
4142
CHIP_PARAM_BUSY_BIT,

qt/spi_chip_db_table_model.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,10 @@ QVariant SpiChipDbTableModel::data(const QModelIndex &index, int role) const
6565
chipDb->getHexStringFromParam(chipDb->getChipParam(index.row(),
6666
SpiChipInfo::CHIP_PARAM_WRITE_CMD), paramStr);
6767
return paramStr;
68+
case SpiChipDb::CHIP_PARAM_WRITE_EN_CMD:
69+
chipDb->getHexStringFromOptParam(chipDb->getChipParam(index.row(),
70+
SpiChipInfo::CHIP_PARAM_WRITE_EN_CMD), paramStr);
71+
return paramStr;
6872
case SpiChipDb::CHIP_PARAM_ERASE_CMD:
6973
chipDb->getHexStringFromParam(chipDb->getChipParam(index.row(),
7074
SpiChipInfo::CHIP_PARAM_ERASE_CMD), paramStr);
@@ -122,6 +126,7 @@ QVariant SpiChipDbTableModel::headerData(int section,
122126
case SpiChipDb::CHIP_PARAM_READ_CMD: return tr("Read com.");
123127
case SpiChipDb::CHIP_PARAM_READ_ID_CMD: return tr("Read ID com.");
124128
case SpiChipDb::CHIP_PARAM_WRITE_CMD: return tr("Write com.");
129+
case SpiChipDb::CHIP_PARAM_WRITE_EN_CMD: return tr("Write en. com.");
125130
case SpiChipDb::CHIP_PARAM_ERASE_CMD: return tr("Erase com.");
126131
case SpiChipDb::CHIP_PARAM_STATUS_CMD: return tr("Status com.");
127132
case SpiChipDb::CHIP_PARAM_BUSY_BIT: return tr("Busy bit");
@@ -155,6 +160,8 @@ QVariant SpiChipDbTableModel::headerData(int section,
155160
return tr("Read ID command");
156161
case SpiChipDb::CHIP_PARAM_WRITE_CMD:
157162
return tr("Page write command");
163+
case SpiChipDb::CHIP_PARAM_WRITE_EN_CMD:
164+
return tr("Write enable command");
158165
case SpiChipDb::CHIP_PARAM_ERASE_CMD:
159166
return tr("Block erase command");
160167
case SpiChipDb::CHIP_PARAM_STATUS_CMD:
@@ -246,6 +253,14 @@ bool SpiChipDbTableModel::setData(const QModelIndex &index,
246253
chipDb->setChipParam(index.row(), SpiChipInfo::CHIP_PARAM_WRITE_CMD,
247254
paramVal);
248255
return true;
256+
case SpiChipDb::CHIP_PARAM_WRITE_EN_CMD:
257+
if (chipDb->getOptParamFromHexString(value.toString(), paramVal))
258+
return false;
259+
if (!chipDb->isOptParamValid(paramVal, 0x00, 0xFF))
260+
return false;
261+
chipDb->setChipParam(index.row(), SpiChipInfo::CHIP_PARAM_WRITE_EN_CMD,
262+
paramVal);
263+
return true;
249264
case SpiChipDb::CHIP_PARAM_ERASE_CMD:
250265
if (chipDb->getParamFromHexString(value.toString(), paramVal))
251266
return false;

qt/spi_chip_info.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ typedef struct __attribute__((__packed__))
1111
uint8_t read_cmd;
1212
uint8_t read_id_cmd;
1313
uint8_t write_cmd;
14+
uint8_t write_en_cmd;
1415
uint8_t erase_cmd;
1516
uint8_t status_cmd;
1617
uint8_t busy_bit;
@@ -35,6 +36,7 @@ const QByteArray &SpiChipInfo::getHalConf()
3536
conf.read_cmd = static_cast<uint8_t>(params[CHIP_PARAM_READ_CMD]);
3637
conf.read_id_cmd = static_cast<uint8_t>(params[CHIP_PARAM_READ_ID_CMD]);
3738
conf.write_cmd = static_cast<uint8_t>(params[CHIP_PARAM_WRITE_CMD]);
39+
conf.write_en_cmd = static_cast<uint8_t>(params[CHIP_PARAM_WRITE_EN_CMD]);
3840
conf.erase_cmd = static_cast<uint8_t>(params[CHIP_PARAM_ERASE_CMD]);
3941
conf.status_cmd = static_cast<uint8_t>(params[CHIP_PARAM_STATUS_CMD]);
4042
conf.busy_bit = static_cast<uint8_t>(params[CHIP_PARAM_BUSY_BIT]);

qt/spi_chip_info.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class SpiChipInfo : public ChipInfo
1717
CHIP_PARAM_READ_CMD,
1818
CHIP_PARAM_READ_ID_CMD,
1919
CHIP_PARAM_WRITE_CMD,
20+
CHIP_PARAM_WRITE_EN_CMD,
2021
CHIP_PARAM_ERASE_CMD,
2122
CHIP_PARAM_STATUS_CMD,
2223
CHIP_PARAM_BUSY_BIT,

0 commit comments

Comments
 (0)