У меня проблема с I2C
Скорость связи. Я установил BNO055 Sensor
на ACCONLY Mode
и на диапазон 2g / полоса пропускания 1000 Гц, но я не могу получить эту информацию достаточно быстро.
То, что я обнаружил, - это разрыв между обычным окончанием передачи данных и получением большего, чем нормальные данные (вы можете увидеть это на рисунке ниже). Я получаю на 1 байт больше, чем ожидалось, всегда 0xff + NACK
.
Вот мой код для получения данных от BNO055
:
void i2c_get_Data(uint8_t address,volatile u8 *uartTx_buffer, u8 Buffersize)
{
I2C_GenerateSTART(I2Cx, ENABLE);
i2c_address_direction(address <<1, I2C_Direction_Receiver);
for (int i = 0; i < Buffersize-1; i++)
{
uartTx_buffer[i] = i2c_receive_ack();
}
uartTx_buffer[Buffersize-1] = i2c_receive_nack();
i2c_stop();
}
uint8_t i2c_receive_nack()
{
// Disable ACK of received data
I2C_AcknowledgeConfig(I2Cx, DISABLE);
// Wait for I2C EV7
// It means that the data has been received in I2C data register
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED));
// Read and return data byte from I2C data register
return I2C_ReceiveData(I2Cx);
}
uint8_t i2c_receive_ack()
{
// Enable ACK of received data
I2C_AcknowledgeConfig(I2Cx, ENABLE);
// Wait for I2C EV7
// It means that the data has been received in I2C data register
while (!I2C_CheckEvent(I2Cx, I2C_EVENT_MASTER_BYTE_RECEIVED));
// Read and return data byte from I2C data register
return I2C_ReceiveData(I2Cx);
}
Я использую стандартную периферийную библиотеку STM32F10x .
Временная диаграмма Abbildung I2C с логическим анализатором