mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-04-14 10:07:39 +08:00
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.
This commit is contained in:
parent
44cb1afa4d
commit
487fbdf009
@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
|
||||
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
|
||||
*/
|
||||
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
|
||||
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)
|
||||
}
|
||||
};
|
||||
|
||||
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…
x
Reference in New Issue
Block a user