При сканировании шины методом START -> ADDRESS -> STOP,
обнаружилось что моя микруха игнорирует STOP после ACK своего адреса.
Пытается завершить полный цикл обмена, что создает коллизию на шине.
Про подтяжки не забыл, на ADXL345, MPU6050, MPU6500 эффект не обнаружен.
1. Я что то делаю не так?
2. Я купил подделку.
3. Я нашел ошибку в микросхеме?
Корпус SO-8, надписи:
LM75A
* 09 13
* nG822
(на месте звездочек вертикальная надпись "NXP", крупным шрифтом)
Сканирование идет для всех байт адреса (от 0 до 255),
на случай наличия нестандартных устройств, или устройств отвечающих
только на запись, или только на чтение.
Код ногодрыга:
Спойлер
Код:
// START
if(
!setLines(PIN_SCL) ||
!setLines(0)
) {
return(false);
}
// Address
uint8_t uBit, uShift = uByte;
for(int ct = 0; ct < 8; ct++) {
uBit = ((uShift & 0x80) ? PIN_SDA : 0);
if(
!setLines(uBit) ||
!setLines(PIN_SCL | uBit) ||
!setLines(uBit)
) {
return(false);
}
uShift <<= 1;
}
// ACK
line_type tAck;
if(
!setLines(PIN_SDA) ||
!setLines(PIN_SCL | PIN_SDA) ||
!getLines(tAck) ||
!setLines(PIN_SDA)
) {
return(false);
}
// STOP
if(
!setLines(0) ||
!setLines(PIN_SCL) ||
!setLines(PIN_SCL | PIN_SDA)
) {
return(false);
}
// Set result
bResult = ((tAck & PIN_SDA) ? false : true);