BNO055 I2C Проблема с Ack / Nack и скоростью MC stm32f103 - PullRequest
0 голосов
/ 29 мая 2019

У меня проблема с 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 с логическим анализатором

...