4

I'm attempting to get the i2c bus to work from a raspberry pi image created from yocto. I have looked at other peoples solutions but they are all o do with raspbian or some other flavour of os.

My /boot/config.txt looks like this:

    root@raspberrypi2:~# cat /boot/config.txt 
    dtparam=i2c_arm=on
    dtparam=i2c_vc=on
    bcm2708.vc_i2c_override=1

lsmod gives me:

root@raspberrypi2:~# lsmod
    Not tainted
ipv6 340199 18 [permanent], Live 0x7f02c000
i2c_bcm2708 4932 0 - Live 0x7f027000
i2c_dev 5810 0 - Live 0x7f022000
bcm2835_gpiomem 2852 0 - Live 0x7f01e000
uio_pdrv_genirq 2924 0 - Live 0x7f012000
uio 8039 1 uio_pdrv_genirq, Live 0x7f000000

dmesg has the following in it:

root@raspberrypi2:~# cat /var/log/dmesg | grep i2c
[    3.645233] i2c /dev entries driver

looking in /proc/device-tree gives me:

root@raspberrypi2:~# find /proc/device-tree/ | grep i2c
/proc/device-tree/soc/i2c@7e205000
/proc/device-tree/soc/i2c@7e205000/reg
/proc/device-tree/soc/i2c@7e205000/name
/proc/device-tree/soc/i2c@7e205000/interrupts
/proc/device-tree/soc/i2c@7e205000/pinctrl-0
/proc/device-tree/soc/i2c@7e205000/compatible
/proc/device-tree/soc/i2c@7e205000/clock-frequency
/proc/device-tree/soc/i2c@7e205000/clocks
/proc/device-tree/soc/i2c@7e205000/status
/proc/device-tree/soc/i2c@7e205000/#address-cells
/proc/device-tree/soc/i2c@7e205000/phandle
/proc/device-tree/soc/i2c@7e205000/#size-cells
/proc/device-tree/soc/i2c@7e205000/pinctrl-names
/proc/device-tree/soc/i2c@7e205000/linux,phandle
/proc/device-tree/soc/i2c@7e804000
/proc/device-tree/soc/i2c@7e804000/reg
/proc/device-tree/soc/i2c@7e804000/name
/proc/device-tree/soc/i2c@7e804000/interrupts
/proc/device-tree/soc/i2c@7e804000/pinctrl-0
/proc/device-tree/soc/i2c@7e804000/compatible
/proc/device-tree/soc/i2c@7e804000/clock-frequency
/proc/device-tree/soc/i2c@7e804000/clocks
/proc/device-tree/soc/i2c@7e804000/status
/proc/device-tree/soc/i2c@7e804000/#address-cells
/proc/device-tree/soc/i2c@7e804000/phandle
/proc/device-tree/soc/i2c@7e804000/#size-cells
/proc/device-tree/soc/i2c@7e804000/pinctrl-names
/proc/device-tree/soc/i2c@7e804000/linux,phandle
/proc/device-tree/soc/i2c@7e805000
/proc/device-tree/soc/i2c@7e805000/reg
/proc/device-tree/soc/i2c@7e805000/name
/proc/device-tree/soc/i2c@7e805000/interrupts
/proc/device-tree/soc/i2c@7e805000/compatible
/proc/device-tree/soc/i2c@7e805000/clock-frequency
/proc/device-tree/soc/i2c@7e805000/clocks
/proc/device-tree/soc/i2c@7e805000/status
/proc/device-tree/soc/i2c@7e805000/#address-cells
/proc/device-tree/soc/i2c@7e805000/phandle
/proc/device-tree/soc/i2c@7e805000/#size-cells
/proc/device-tree/soc/i2c@7e805000/linux,phandle
/proc/device-tree/soc/gpio@7e200000/i2c0
/proc/device-tree/soc/gpio@7e200000/i2c0/name
/proc/device-tree/soc/gpio@7e200000/i2c0/phandle
/proc/device-tree/soc/gpio@7e200000/i2c0/brcm,function
/proc/device-tree/soc/gpio@7e200000/i2c0/brcm,pins
/proc/device-tree/soc/gpio@7e200000/i2c0/linux,phandle
/proc/device-tree/soc/gpio@7e200000/i2c1
/proc/device-tree/soc/gpio@7e200000/i2c1/name
/proc/device-tree/soc/gpio@7e200000/i2c1/phandle
/proc/device-tree/soc/gpio@7e200000/i2c1/brcm,function
/proc/device-tree/soc/gpio@7e200000/i2c1/brcm,pins
/proc/device-tree/soc/gpio@7e200000/i2c1/linux,phandle
/proc/device-tree/__symbols__/i2c
/proc/device-tree/__symbols__/i2c0
/proc/device-tree/__symbols__/i2c1
/proc/device-tree/__symbols__/i2c2
/proc/device-tree/__symbols__/i2c_arm
/proc/device-tree/__symbols__/i2c_vc
/proc/device-tree/__symbols__/i2c0_pins
/proc/device-tree/__symbols__/i2c1_pins
/proc/device-tree/__symbols__/clk_i2c
/proc/device-tree/aliases/i2c
/proc/device-tree/aliases/i2c0
/proc/device-tree/aliases/i2c1
/proc/device-tree/aliases/i2c2
/proc/device-tree/aliases/i2c_arm
/proc/device-tree/aliases/i2c_vc
/proc/device-tree/__overrides__/i2c
/proc/device-tree/__overrides__/i2c0
/proc/device-tree/__overrides__/i2c1
/proc/device-tree/__overrides__/i2c_arm
/proc/device-tree/__overrides__/i2c2_iknowwhatimdoing
/proc/device-tree/__overrides__/i2c0_baudrate
/proc/device-tree/__overrides__/i2c_vc_baudrate
/proc/device-tree/__overrides__/i2c_vc
/proc/device-tree/__overrides__/i2c1_baudrate
/proc/device-tree/__overrides__/i2c_baudrate
/proc/device-tree/__overrides__/i2c2_baudrate
/proc/device-tree/__overrides__/i2c_arm_baudrate

but if I 'ls /dev/i2*' I get no /dev/i2c devices. I'm expecting /dev/i2c-0 or an equivalent alias, does anyone know what is happening?

rzr
  • 109
  • 3
Chris
  • 141
  • 1
  • 2

2 Answers2

1

I had the same problem and think I just got it to work.

Set the following in local.conf (according to doc/extra-build-config.md)

ENABLE_I2C = "1"
KERNEL_MODULE_AUTOLOAD_rpi += " i2c-dev i2c-bcm2708"

This will append the following to config.txt (in the build path, eg tmp/deploy/images//bootfiles):

# Enable I2C
dtparam=i2c1=on
dtparam=i2c_arm=on

Also, it will put the modules to load at boot:

root@raspberrypi2:/etc/modules-load.d# ls
i2c-bcm2708.conf  i2c-dev.conf

Test with i2cdetect shows:

root@raspberrypi2:~# i2cdetect -l
i2c-1   i2c             bcm2835 (i2c@7e804000)                  I2C adapter
norq
  • 150
  • 1
  • 6
1

Device tree does not create the I2C devices (just to be contrary device tree does create the similar SPI devices).

Add the following line to /etc/modules and reboot.

i2c_dev

For a quick test you could just modprobe i2c_dev.


EDITED TO ADD

I'm confused now as your lsmod does show i2c_dev.

joan
  • 71,852
  • 5
  • 76
  • 108