Skip to content

Commit

Permalink
Update AS5600.cpp
Browse files Browse the repository at this point in the history
Critical bug fix. The I2CADDR and I2CUPDT registers are single byte registers on AS5600L, without specifying this the default behaviour is to write two bytes. The address will then be mistakenly written as 0x00 which is a reserved I2C address. If this is followed by a burn settings, the wrong address may permanently be written and the sensor may be 'bricked'.
  • Loading branch information
zbas authored Aug 7, 2024
1 parent f7a91fa commit 778f92b
Showing 1 changed file with 2 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/encoders/as5600/AS5600.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,13 +124,13 @@ void AS5600::setZPos(uint16_t value) {
void AS5600::setI2CAddr(uint8_t value) {
uint8_t val = (uint8_t)readRegister(AS5600_REG_I2CADDR, 1);
val = (value<<1) | (val&0x01);
writeRegister(AS5600_REG_I2CADDR, val);
writeRegister(AS5600_REG_I2CADDR, val, 1);
};

void AS5600::setI2CUpdt(uint8_t value) {
uint8_t val = (uint8_t)readRegister(AS5600_REG_I2CUPDT, 1);
val = (value<<1) | (val&0x01);
writeRegister(AS5600_REG_I2CUPDT, val);
writeRegister(AS5600_REG_I2CUPDT, val, 1);
};


Expand Down

0 comments on commit 778f92b

Please sign in to comment.