Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 30 Apr 2014 19:49:24 -0400
From:      Winston Smith <smith.winston.101@gmail.com>
To:        Rui Paulo <rpaulo@freebsd.org>
Cc:        freebsd-arm <freebsd-arm@freebsd.org>, Mark R V Murray <mark@grondar.org>
Subject:   Re: i2c on RPI-B not working
Message-ID:  <CADH-AwFDk2uzOcNQQx%2BL%2BHGBgc7vccQVXLta_g6D3HRHhZxYsQ@mail.gmail.com>
In-Reply-To: <1CFC3564-65F0-4DC8-950C-3D53BBB2761C@FreeBSD.org>
References:  <93181B67-1944-4DDD-A595-455D2AE9B110@grondar.org> <1CFC3564-65F0-4DC8-950C-3D53BBB2761C@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, Apr 29, 2014 at 1:07 PM, Rui Paulo <rpaulo@freebsd.org> wrote:
> This is because the controller doesn't support scanning.  You need to write your own C program to issue iic ioctls for reading / writing to the i2c bus.

I'm in the same process except on a BeagleBone Black (currently
running 11-CURRENT).  Running `i2c -sv` under `ktrace -t+`, it's
returning:

   956 i2c      CALL  ioctl(0x3,I2CRSTCARD,0xbffffcc8)
   956 i2c      RET   ioctl 0
   956 i2c      CALL  ioctl(0x3,I2CSTART,0xbffffcc8)
   956 i2c      RET   ioctl -1 errno 6 Device not configured
   956 i2c      CALL  ioctl(0x3,I2CSTOP,0xbffffcc8)
   956 i2c      RET   ioctl -1 errno 22 Invalid argument


I know from Linux on the BBB, that when you run `i2cdetect`, you need
to specify the `-r` to use "read byte" commands to probe the i2c bus
and indeed I've written i2c code previously using ioctl() with
I2CRDWR.

So I cobbled together a I2C bus scanner, i2cscan.c:
http://pastebin.com/RxpRCyJU

root@beaglebone:~ # ./i2cscan /dev/iic0
Checking device: /dev/iic0
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --


Hmmm ... on the BBB it's still not detecting anything; in fact
according to `ktrace`, it seems to still return ENXIO (Device not
configured):

   988 i2cscan  CALL  ioctl(0x3,I2CRDWR,0xbffffc58)
   988 i2cscan  RET   ioctl -1 errno 6 Device not configured


Not entirely sure why it's not detecting anything since I *know* the
BBB has an EEPROM at 0x50 on bus 0 (I2C0 @ 44e0b000), which according
to ofwdump should be iic0:

root@beaglebone:~ # ofwdump -a
Node 0x38:
  Node 0xc4: am335x
    ...
    Node 0x1504: i2c@44e0b000
      Node 0x1590: pmic@24
    ...

So:

1) Hopefully, you'll have more luck with the i2cscan.c tool I wrote than I did!
2) Does anyone know why I'm not detecting any i2c devices on the BBB?

Thanks!

-W



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CADH-AwFDk2uzOcNQQx%2BL%2BHGBgc7vccQVXLta_g6D3HRHhZxYsQ>