HAL eeprom cleanup
This commit is contained in:
parent
e50af65a1b
commit
39c30d6fd6
@ -40,7 +40,7 @@ void eeprom_init() { BL24CXX::init(); }
|
|||||||
// Public functions
|
// Public functions
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
void eeprom_write_byte(uint8_t *pos, unsigned char value) {
|
void eeprom_write_byte(uint8_t *pos, uint8_t value) {
|
||||||
const unsigned eeprom_address = (unsigned)pos;
|
const unsigned eeprom_address = (unsigned)pos;
|
||||||
return BL24CXX::writeOneByte(eeprom_address, value);
|
return BL24CXX::writeOneByte(eeprom_address, value);
|
||||||
}
|
}
|
||||||
|
@ -25,5 +25,5 @@
|
|||||||
// EEPROM
|
// EEPROM
|
||||||
//
|
//
|
||||||
void eeprom_init();
|
void eeprom_init();
|
||||||
void eeprom_write_byte(uint8_t *pos, unsigned char value);
|
void eeprom_write_byte(uint8_t *pos, uint8_t value);
|
||||||
uint8_t eeprom_read_byte(uint8_t *pos);
|
uint8_t eeprom_read_byte(uint8_t *pos);
|
||||||
|
@ -55,12 +55,15 @@ static constexpr uint8_t eeprom_device_address = I2C_ADDRESS(EEPROM_DEVICE_ADDRE
|
|||||||
// Public functions
|
// Public functions
|
||||||
// ------------------------
|
// ------------------------
|
||||||
|
|
||||||
void eeprom_write_byte(uint8_t *pos, unsigned char value) {
|
static void _eeprom_begin(uint8_t * const pos) {
|
||||||
const unsigned eeprom_address = (unsigned)pos;
|
const unsigned eeprom_address = (unsigned)pos;
|
||||||
|
|
||||||
Wire.beginTransmission(eeprom_device_address);
|
Wire.beginTransmission(eeprom_device_address);
|
||||||
Wire.write(int(eeprom_address >> 8)); // MSB
|
Wire.write(int(eeprom_address >> 8)); // Address High
|
||||||
Wire.write(int(eeprom_address & 0xFF)); // LSB
|
Wire.write(int(eeprom_address & 0xFF)); // Address Low
|
||||||
|
}
|
||||||
|
|
||||||
|
void eeprom_write_byte(uint8_t *pos, uint8_t value) {
|
||||||
|
_eeprom_begin(pos);
|
||||||
Wire.write(value);
|
Wire.write(value);
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
|
|
||||||
@ -70,11 +73,7 @@ void eeprom_write_byte(uint8_t *pos, unsigned char value) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
uint8_t eeprom_read_byte(uint8_t *pos) {
|
uint8_t eeprom_read_byte(uint8_t *pos) {
|
||||||
const unsigned eeprom_address = (unsigned)pos;
|
_eeprom_begin(pos);
|
||||||
|
|
||||||
Wire.beginTransmission(eeprom_device_address);
|
|
||||||
Wire.write(int(eeprom_address >> 8)); // MSB
|
|
||||||
Wire.write(int(eeprom_address & 0xFF)); // LSB
|
|
||||||
Wire.endTransmission();
|
Wire.endTransmission();
|
||||||
Wire.requestFrom(eeprom_device_address, (byte)1);
|
Wire.requestFrom(eeprom_device_address, (byte)1);
|
||||||
return Wire.available() ? Wire.read() : 0xFF;
|
return Wire.available() ? Wire.read() : 0xFF;
|
||||||
|
@ -43,44 +43,41 @@ void eeprom_init() {}
|
|||||||
#define EEPROM_WRITE_DELAY 7
|
#define EEPROM_WRITE_DELAY 7
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
uint8_t eeprom_read_byte(uint8_t* pos) {
|
static void _eeprom_begin(uint8_t * const pos, const uint8_t cmd) {
|
||||||
uint8_t v;
|
const uint8_t eeprom_temp[3] = {
|
||||||
uint8_t eeprom_temp[3];
|
cmd,
|
||||||
|
(unsigned(pos) >> 8) & 0xFF, // Address High
|
||||||
// set read location
|
unsigned(pos) & 0xFF // Address Low
|
||||||
// begin transmission from device
|
};
|
||||||
eeprom_temp[0] = CMD_READ;
|
WRITE(SPI_EEPROM1_CS, HIGH); // Usually free already
|
||||||
eeprom_temp[1] = ((unsigned)pos>>8) & 0xFF; // addr High
|
WRITE(SPI_EEPROM1_CS, LOW); // Activate the Bus
|
||||||
eeprom_temp[2] = (unsigned)pos& 0xFF; // addr Low
|
|
||||||
WRITE(SPI_EEPROM1_CS, HIGH);
|
|
||||||
WRITE(SPI_EEPROM1_CS, LOW);
|
|
||||||
spiSend(SPI_CHAN_EEPROM1, eeprom_temp, 3);
|
spiSend(SPI_CHAN_EEPROM1, eeprom_temp, 3);
|
||||||
|
// Leave the Bus in-use
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t eeprom_read_byte(uint8_t* pos) {
|
||||||
|
_eeprom_begin(pos, CMD_READ); // Set read location and begin transmission
|
||||||
|
|
||||||
|
const uint8_t v = spiRec(SPI_CHAN_EEPROM1); // After READ a value sits on the Bus
|
||||||
|
|
||||||
|
WRITE(SPI_EEPROM1_CS, HIGH); // Done with device
|
||||||
|
|
||||||
v = spiRec(SPI_CHAN_EEPROM1);
|
|
||||||
WRITE(SPI_EEPROM1_CS, HIGH);
|
|
||||||
return v;
|
return v;
|
||||||
}
|
}
|
||||||
|
|
||||||
void eeprom_write_byte(uint8_t* pos, uint8_t value) {
|
void eeprom_write_byte(uint8_t *pos, uint8_t value) {
|
||||||
uint8_t eeprom_temp[3];
|
const uint8_t eeprom_temp = CMD_WREN;
|
||||||
|
|
||||||
/*write enable*/
|
|
||||||
eeprom_temp[0] = CMD_WREN;
|
|
||||||
WRITE(SPI_EEPROM1_CS, LOW);
|
WRITE(SPI_EEPROM1_CS, LOW);
|
||||||
spiSend(SPI_CHAN_EEPROM1, eeprom_temp, 1);
|
spiSend(SPI_CHAN_EEPROM1, &eeprom_temp, 1); // Write Enable
|
||||||
WRITE(SPI_EEPROM1_CS, HIGH);
|
|
||||||
delay(1);
|
|
||||||
|
|
||||||
/*write addr*/
|
WRITE(SPI_EEPROM1_CS, HIGH); // Done with the Bus
|
||||||
eeprom_temp[0] = CMD_WRITE;
|
delay(1); // For a small amount of time
|
||||||
eeprom_temp[1] = ((unsigned)pos>>8) & 0xFF; //addr High
|
|
||||||
eeprom_temp[2] = (unsigned)pos & 0xFF; //addr Low
|
|
||||||
WRITE(SPI_EEPROM1_CS, LOW);
|
|
||||||
spiSend(SPI_CHAN_EEPROM1, eeprom_temp, 3);
|
|
||||||
|
|
||||||
spiSend(SPI_CHAN_EEPROM1, value);
|
_eeprom_begin(pos, CMD_WRITE); // Set write address and begin transmission
|
||||||
WRITE(SPI_EEPROM1_CS, HIGH);
|
|
||||||
delay(EEPROM_WRITE_DELAY); // wait for page write to complete
|
spiSend(SPI_CHAN_EEPROM1, value); // Send the value to be written
|
||||||
|
WRITE(SPI_EEPROM1_CS, HIGH); // Done with the Bus
|
||||||
|
delay(EEPROM_WRITE_DELAY); // Give page write time to complete
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // USE_SHARED_EEPROM
|
#endif // USE_SHARED_EEPROM
|
||||||
|
Loading…
Reference in New Issue
Block a user