Browse Source

Use BOARD_EEPROM_WP_CTRL signal to control EEPROM WP signal if defined

Erases and write operations will use the BOARD_EEPROM_WP_CTRL
  macro to remove the Write protection and restore it.
sbg
David Sidrane 8 years ago committed by Lorenz Meier
parent
commit
487fbdf009
  1. 11
      src/systemcmds/mtd/24xxxx_mtd.c

11
src/systemcmds/mtd/24xxxx_mtd.c

@ -203,6 +203,8 @@ static int at24c_eraseall(FAR struct at24c_dev_s *priv) @@ -203,6 +203,8 @@ static int at24c_eraseall(FAR struct at24c_dev_s *priv)
memset(&buf[2], 0xff, priv->pagesize);
BOARD_EEPROM_WP_CTRL(false);
for (startblock = 0; startblock < priv->npages; startblock++) {
uint16_t offset = startblock * priv->pagesize;
buf[1] = offset & 0xff;
@ -214,6 +216,8 @@ static int at24c_eraseall(FAR struct at24c_dev_s *priv) @@ -214,6 +216,8 @@ static int at24c_eraseall(FAR struct at24c_dev_s *priv)
}
}
BOARD_EEPROM_WP_CTRL(true);
return OK;
}
@ -389,6 +393,8 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t @@ -389,6 +393,8 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t
finfo("startblock: %08lx nblocks: %d\n", (long)startblock, (int)nblocks);
BOARD_EEPROM_WP_CTRL(false);
while (blocksleft-- > 0) {
uint16_t offset = startblock * priv->pagesize;
unsigned tries = CONFIG_AT24XX_WRITE_TIMEOUT_MS;
@ -415,6 +421,7 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t @@ -415,6 +421,7 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t
*/
if (--tries == 0) {
perf_count(priv->perf_errors);
BOARD_EEPROM_WP_CTRL(true);
return ERROR;
}
}
@ -423,6 +430,8 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t @@ -423,6 +430,8 @@ static ssize_t at24c_bwrite(FAR struct mtd_dev_s *dev, off_t startblock, size_t
buffer += priv->pagesize;
}
BOARD_EEPROM_WP_CTRL(true);
#if CONFIG_AT24XX_MTD_BLOCKSIZE > AT24XX_PAGESIZE
return nblocks / (CONFIG_AT24XX_MTD_BLOCKSIZE / AT24XX_PAGESIZE);
#else
@ -565,6 +574,8 @@ FAR struct mtd_dev_s *at24c_initialize(FAR struct i2c_master_s *dev) @@ -565,6 +574,8 @@ FAR struct mtd_dev_s *at24c_initialize(FAR struct i2c_master_s *dev)
}
};
BOARD_EEPROM_WP_CTRL(true);
perf_begin(priv->perf_transfers);
int ret = I2C_TRANSFER(priv->dev, &msgv[0], 2);
perf_end(priv->perf_transfers);

Loading…
Cancel
Save