pvvx
Активный участник сообщества
Разобрался с неизвестным акселерометром в китайских браслетах-часах с PHY6202 и TLSR8266.
Далее считываем точки (x,y,z) из FIFO поступающие туда по 150 штук в секунду в виде 16 бит со знаком (пачка в x,y,z в виде 6 байт = 3 точки):
Глубину FIFO чипа пока не определял. Но и так хорошо - уже весь поток передается в Web Bluetooth...
Т.е., при описанном конфиге чипа, каждые 100 мс считываем по 15 точек (5 блоков x,y,z = 5*3*2 = 30 байт). На эти процедуры у PHY6202, при i2c в 400 кГц, уходит около 2 ms. Между ними проц - спать...
Код:
/* Config acceleration sensor: 150 smps (50 points x,y,z per sec) */
kxi2c_write(pi2c, 0x1E, 0x00);
kxi2c_write(pi2c, 0x2E, 0x00); // stop
kxi2c_write(pi2c, 0x20, 0x47);
kxi2c_write(pi2c, 0x23, 0x98);
kxi2c_write(pi2c, 0x24, 0x40);
kxi2c_write(pi2c, 0x2E, 0x4F); // start
Код:
if(kxi2c_read(pi2c, 0x2F, ®, 1) != PPlus_SUCCESS) { // читаем флаги и глубину заполненного FIFO
LOG("acc: getflg error!\n");
......
}
size = reg & 0x1f;
if(size) {
if(kxi2c_read(pi2c, 0xA8, acc_data, size*2) == PPlus_SUCCESS) {
int16_t *p = (int16_t *)acc_data;
acc_count += size;
} else LOG("acc: read points error!\n");
if(reg & 0x40) { // сбой чтения потока из FIFO чипа (переполнение)?
LOG("acc: reset\n");
acc_count = 0;
size = 0;
kxi2c_write(pi2c, 0x2E, 0x00); // stop
kxi2c_write(pi2c, 0x2E, 0x4F); // новый start
}
}
Т.е., при описанном конфиге чипа, каждые 100 мс считываем по 15 точек (5 блоков x,y,z = 5*3*2 = 30 байт). На эти процедуры у PHY6202, при i2c в 400 кГц, уходит около 2 ms. Между ними проц - спать...