Я использую Raspberry Pi для связи с датчиком MPU6050 с I2C.
Скажем, у меня есть код, который читает данные датчика в цикле. Для расчета скорости цикла я делаю так:
for (;;) {
I2CInterface.getSensorData(device address, register address, data);
oldTime = currentTime;
clock_gettime(CLOCK_REALTIME, ¤tTime);
dt = currentTime - oldTime;
some easy calculations envolving dt like multiplying
fprintf(f, "%7d \n", dt);
}
Я получаю около 0,0017-0,0018 секунд, что составляет около 580-550 Гц, что для меня недостаточно.
Если я запускаю тот же код без I2CInterface.getSensorData, умножения и строк fprintf, я получаю около 50 МГц.
Куда девается частота в таком огромном количестве? Сколько нужно времени, чтобы прочитать реестр через I2C? Время ушло, чтобы сделать расчет части? fprintf вызывает задержку?
I2C, как правило, работает медленно — тактовая частота начинается от 100 кГц, и это устройство может работать на частоте не более 400 кГц. При 100 кГц пропускная способность сравнима с легким RS232. Обмен 20 байтов достаточен для снижения частоты до 600 Гц.
Проверьте, сколько данных обменивается между вашей платой и MPU6050
и попытайтесь оценить, насколько быстро вы можете работать на данной тактовой частоте. Проверьте настройку тактовой частоты I2C.