GY-87

Итак, приехал мне GY-87, который на борту несёт:

  • акселерометр+гироскоп MPU6050
  • Барометр BPM180
  • Магнетометр HMC5883L

Хочу описать особенность данного модуля - сразу после включения на шине i2c не видно магнетометра. Похоже, что аксел и барометр прицеплены к основной шине i2c, а магнетометр - на вторичной i2c шине MPU6050.

Что-то вроде этого:

[v2r] ==o==>MPU6050 ---> HMC5883L
        \
         \===> BPM180

После старта MPU6050 не пропускает ничего из внешней шины во вторичную, самолично пожирая тактирующий сигнал и данные. HMC5883L ничего не получает от хоста.

По даташиту, чтобы хост увидел устройства на вторично шине, MPU6050 надо переключить в режим continue.

Первый коннект

Забрал ништяки. Подключил консоль USB-UART (3 провода + minicom)

http://wiki.virt2real.ru/wiki/%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_UART

Теперь есть терминал без шаманства.

Подключил MPU-6050 и компас по i2c

http://wiki.virt2real.ru/wiki/%D0%9F%D0%BE%D0%B4%D0%BA%D0%B­B%D1%8E%D1%87%D0%B5%D0%B­D%D0%B8%D0%B5_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2_%D0%BF%D0%BE_I2C

Обе две железки видны в i2cdetect.

Драйвер для MPU-6050 в ядре не нашлось (или плохо искал). Пока отложил железку в сторону. Для HMC5883L драqвера нет, есть для HMC5843L.

В даташитах есть различия:

  • Регистры чтения по Z и Y поменяны местами
  • Con­fig­u­ra­tion Register A использует биты 5,6 (количество семплов для усреднения)
  • HMC5883L: Mode register - bit7 включить прддержку High Speed i2c (3400kHz)
  • Data output rate имеют большее в 1.5 раза значение
  • Чуствительность HMC5883L чють меньше
  • Status Register в HMC5883L не имеет бита REN

Воткнув драйвер от HMC5843L, смог что-то прочитать из values. Сначала всё читалось continue.