Results 1 to 4 of 4

Thread: Pi3 / Leap 15.2 / i2c / reading 16 bit words

  1. #1

    Default Pi3 / Leap 15.2 / i2c / reading 16 bit words

    Hi *,

    I'm working on a Pi3 project where I need to read out 16 bit values from an I2C slave, via Python. My Pi3 B is running up-to-date Leap 15.2 and I've tried both Malcolm's python3-smbus (https://download.opensuse.org/reposi...Leap_15.2_ARM/) as well as the version from illuusio (https://download.opensuse.org/reposi...Leap_15.2_ARM/)

    The code seems to work fine as long as I read or write 8bit values, but in the end, I need to read out 16bit (two byte) values from the I2C slave (DS1631).

    Interestingly, even reading a single byte fails if I use read_byte_data(), it only works if I use separate write_byte() and read_byte() statements:

    # works, although only for a single byte
    self.bus.write_byte( sensoraddr, 0xaa)
    tempint = self.bus.read_byte( sensoraddr)

    # fails with OSError: [Errno 121] Remote I/O error
    tempint = self.bus.read_byte_data( sensoraddr, 0xaa)

    Looking around on the net, it looks like I'm using the proper API and I even tried a Python class explicitly designed for Pi3b and this chip, which fails the same.

    Might this be a problem with the kernel module driving the chip or the code layer between the Python smbus class and the lower layers?

    Thank you for any advice you may be able to share.

    Regards,
    Jens

  2. #2
    Join Date
    Jun 2008
    Location
    Podunk
    Posts
    29,836
    Blog Entries
    15

    Default Re: Pi3 / Leap 15.2 / i2c / reading 16 bit words

    Hi Jens
    This is the one installed: python3-smbus-4.1-lp152.3.1.aarch64.rpm? I think it only does 8bit so need to look at MSB and LSB.
    Cheers Malcolm °¿° SUSE Knowledge Partner (Linux Counter #276890)
    SUSE SLE, openSUSE Leap/Tumbleweed (x86_64) | GNOME DE
    If you find this post helpful and are logged into the web interface,
    please show your appreciation and click on the star below... Thanks!

  3. #3

    Default Re: Pi3 / Leap 15.2 / i2c / reading 16 bit words

    Quote Originally Posted by malcolmlewis View Post
    Hi Jens
    This is the one installed: python3-smbus-4.1-lp152.3.1.aarch64.rpm? I think it only does 8bit so need to look at MSB and LSB.
    Hi Malcolm,

    thank you for jumping in!

    These were the ones I tried:

    i+ | python3-smbus | package | 4.1-lp152.3.1 | aarch64 | Pi3ByMalcolmLewis
    i+ | python3-smbus2 | package | 0.2.3-lp152.1.1 | noarch | illuusio

    (of course I adjusted the Python imports to work with smbus2 when testing the latter.)

    > so need to look at MSB and LSB

    "MSB/LSB" as in "most/least significant byte"? I believe I've been through any API in smbus to retrieve the values, but cannot see one that results in sending <S> addr <W> <A> 0xaa <A> <Sr> addr <R>, upon which the chip sends <A> byte1, master sends <A>, chip sends byte2, master sends <NACK> <stop>... I guessed that's what read_word_data() was supposed to do, but how do I break that down to more basic commands in Python?

    Regards,
    Jens

  4. #4

    Default Re: Pi3 / Leap 15.2 / i2c / reading 16 bit words

    Hi *,

    just as a follow-up to the casual reader: The problems were in the end unrelated to OpenSUSE Leap, but caused by hardware. Seeing the I2C devices in "i2cdetect" does not mean that *all* communications will be stable, if the bus is electrically mis-aligned.

    For a test, I booted PiOS on the same machine and as the requests were similarly failing, continued to further debug at the electrical layer.

    Leap 15.2 fully supports the required 16bit read/writes

    Regards,
    Jens

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •