Estoy tratando de establecer comunicación entre TI BQ78350 FuelGauge y STM32F103C8T6 usando I2C / SMBus. La siguiente es la configuración I2C utilizada para la biblioteca HAL I2C estándar.
static void MX_I2C1_Init(void)
{
hi2c1.Instance = I2C1;
hi2c1.Init.ClockSpeed = 100000;
hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
hi2c1.Init.OwnAddress1 = 0;
hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
hi2c1.Init.OwnAddress2 = 0;
hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
if (HAL_I2C_Init(&hi2c1) != HAL_OK)
{
_Error_Handler(__FILE__, __LINE__);
}
}
Cuando trato de transmitir algo a FuelGauge, usando el siguiente código no hay un reconocimiento y respuesta adecuados. Solo se transmite el byte de dirección.
HAL_I2C_Master_Transmit(&hi2c1,11<<1,0x09, 1, 100);
Así es como se ve la forma de onda en un osciloscopio.
En el lado del hardware, estoy usando Mosfet BSS138 para nivelar el cambio entre el indicador de combustible de 5V y 3.3V STM32F103. El valor de la resistencia de pull-up es 3.3k.
Cualquier puntero a la causa de este problema sería útil. Gracias.