Сообщение от
ur3ilf
Может я что то не понимаю или на STM действительно какой то свой особый протокол передачи i2c придумали с такими сложностями что ведущий сам не понимает что передал последний байт ведомому,
Проблема в том что из HAL_I2C_Master_Trans mit возврат происходит когда последний байт только передается. Т.е драйвер положил его в буфер передачи и управление вернулось сразу. На низком уровне ( если без HAL) то все тоже самое- положил данные в регистр, байт передается по I2C, а аппаратного признака конца передачи нет. При чтении этой проблемы не возникает- пока буфер не приймется полностью возврата управления не произойдет.
Код:
d[0] = addr; d[1] = data;
if (HAL_I2C_Master_Transmit(&hi2c, (uint16_t) SI5351_BUS_BASE_ADDR << 1, (uint8_t *) d, 2, I2CTIMEOUT) != HAL_OK)