Использование Python smbus на Raspberry Pi - перепутано с синтаксисом

Я пытаюсь использовать python-smbus на Raspberry Pi для связи с микросхемой акселерометра MMA7660, используя I2C.

В приведенном ниже коде я читаю регистры 0x00, 0x01, 0x02 и 0x03 чипа и получаю одинаковые значения для всех. Глядя на значения и наклоняя чип, я вижу, что все они соответствуют регистру 0x00, регистру значений X.

Выход:

...
1 1 1 2
3 3 3 3
1 1 1 1
59 60 60 60
51 51 51 51
58 58 58 58
3 3 3 3
62 62 62 62
58 58 58 58
62 62 62 62
...

Код:

  import smbus
  import time

  bus = smbus.SMBus(1)
  # I2C address for MMA7660                                                     
  addr = 0x4C
  try:
    bus.write_byte_data(addr, 0x07, 0x00)
    bus.write_byte_data(addr, 0x06, 0x10)
    bus.write_byte_data(addr, 0x08, 0x00)
    bus.write_byte_data(addr, 0x07, 0x01)
  except IOError, err:
    print err

  while True:
    try:
      x = bus.read_byte_data(addr,0x00)
      y = bus.read_byte_data(addr,0x01)
      z = bus.read_byte_data(addr,0x02)
      tr = bus.read_byte_data(addr,0x03)
      print x, y, z, tr
      time.sleep(0.25)
    except:
      print 'exiting...'
      break

Что-то не так с синтаксисом smbus? Я посмотрел на документациюВот.

Я проверил, что чип работает - я могу нормально общаться с ним, используя Arduino и устанавливая регистры в том же порядке, что и выше.

Обновление № 1 (28 июня 2013 г.):

По Сильвенуs комментарий, я прилагаю вывод осциллографа для линий SDA / SCL для следующего кода:

bus.write_byte(addr, 0x01)
print bus.read_byte(addr)

Обновление № 2:

Я думаю, что есть известная проблема с I2C на Raspberry Pi - нет "Повторный Старт ".

https://raspberrypi.stackexchange.com/questions/7138/mma8452-i2c-module

Согласно спецификации SMBus для Linux:

SMBus Read Byte:  i2c_smbus_read_byte_data()
============================================

This reads a single byte from a device, from a designated register.
The register is specified through the Comm byte.

S Addr Wr [A] Comm [A] S Addr Rd [A] [Data] NA P

Но когда я попробовал это, осциллограф четко показывает ОСТАНОВ (P) перед повторным запуском (S).

Думаю, мне не повезло, если я использую аппаратное обеспечение I2C на Пи для общения с MMA7760.

Ответы на вопрос(4)

Ваш ответ на вопрос