I2C interface needs a long time to initialize
Leo
New Member Posts: 9 ✭
Hi,
I am using UP-Board and installed Ubuntu 16.04 LTS. I connect a LM75B temp sensor to i2c-1 SDAL SCAL (pin 2 and 3), and it takes long time until the sensor can be detected on I2C bus.
I am using for example "i2cdetect -y -r 8 0x40 0x4f" command, and after 20-30 minutes, I can see the address of LM75B appear in the output.
Is this normal? What can I do to fix this?
Thanks
I am using UP-Board and installed Ubuntu 16.04 LTS. I connect a LM75B temp sensor to i2c-1 SDAL SCAL (pin 2 and 3), and it takes long time until the sensor can be detected on I2C bus.
I am using for example "i2cdetect -y -r 8 0x40 0x4f" command, and after 20-30 minutes, I can see the address of LM75B appear in the output.
Is this normal? What can I do to fix this?
Thanks
Comments
-
Hi
try this:
sudo i2cdetect -y -r 1
(the i2c channel on pin 2-3 is usually attached to /dev/i2c-1 not 8 )
Regards
Nicola Lunghi -
Hi nicola,
thanks for the reply. i2c-8 is the correct device in my case using Ubuntu 16.04. As i believe the device should refer to the PCI device 8086:22c2. Here is some more output:
root@up-UP-CHT01:/home/up# cat /sys/bus/i2c/devices/i2c-8/device/device
0x22c2
root@up-UP-CHT01:/home/up# cat /sys/bus/i2c/devices/i2c-8/device/vendor
0x8086
Again, the issue is that I need to wait around 20-30 minutes before i2cdetect shows the correct result.
Do you have any other idea what could cause this delay? -
Hi
as I was saying on the UP board the ACPI id correspondig to the i2c pins on pin 2,3 on the hat is808622C1:01
so again i2c-8 is not the correct device
execute the following in a terminalsudo find /sys/devices/pci0000:00 -name 'i2c-*'
and find the i2c device corresponding to 808622C1:01
Regards
Nicola Lunghi -
Hi Nicola,
I am setting the device to "PCI mode" rather than "ACPI mode" in BIOS setting. So here is the output of your command:root@up-UP-CHT01:/home/up# find /sys/devices/pci0000:00 -name 'i2c-*'
/sys/devices/pci0000:00/0000:00:18.6/i2c-11
/sys/devices/pci0000:00/0000:00:18.6/i2c-11/i2c-dev
/sys/devices/pci0000:00/0000:00:18.6/i2c-11/i2c-dev/i2c-11
/sys/devices/pci0000:00/0000:00:18.2/i2c-8
/sys/devices/pci0000:00/0000:00:18.2/i2c-8/i2c-dev
/sys/devices/pci0000:00/0000:00:18.2/i2c-8/i2c-dev/i2c-8
/sys/devices/pci0000:00/0000:00:02.0/i2c-3
/sys/devices/pci0000:00/0000:00:02.0/i2c-3/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/i2c-3/i2c-dev/i2c-3
/sys/devices/pci0000:00/0000:00:02.0/i2c-1
/sys/devices/pci0000:00/0000:00:02.0/i2c-1/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/i2c-1/i2c-dev/i2c-1
/sys/devices/pci0000:00/0000:00:02.0/i2c-4
/sys/devices/pci0000:00/0000:00:02.0/i2c-4/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/i2c-4/i2c-dev/i2c-4
/sys/devices/pci0000:00/0000:00:02.0/i2c-2
/sys/devices/pci0000:00/0000:00:02.0/i2c-2/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/i2c-2/i2c-dev/i2c-2
/sys/devices/pci0000:00/0000:00:02.0/i2c-0
/sys/devices/pci0000:00/0000:00:02.0/i2c-0/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/i2c-0/i2c-dev/i2c-0
/sys/devices/pci0000:00/0000:00:02.0/i2c-5
/sys/devices/pci0000:00/0000:00:02.0/i2c-5/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/i2c-5/i2c-dev/i2c-5
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6/i2c-dev
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6/i2c-dev/i2c-6
/sys/devices/pci0000:00/0000:00:18.7/i2c-12
/sys/devices/pci0000:00/0000:00:18.7/i2c-12/i2c-dev
/sys/devices/pci0000:00/0000:00:18.7/i2c-12/i2c-dev/i2c-12
/sys/devices/pci0000:00/0000:00:18.5/i2c-10
/sys/devices/pci0000:00/0000:00:18.5/i2c-10/i2c-dev
/sys/devices/pci0000:00/0000:00:18.5/i2c-10/i2c-dev/i2c-10
/sys/devices/pci0000:00/0000:00:18.3/i2c-9
/sys/devices/pci0000:00/0000:00:18.3/i2c-9/i2c-dev
/sys/devices/pci0000:00/0000:00:18.3/i2c-9/i2c-dev/i2c-9
/sys/devices/pci0000:00/0000:00:18.1/i2c-7
/sys/devices/pci0000:00/0000:00:18.1/i2c-7/i2c-dev
/sys/devices/pci0000:00/0000:00:18.1/i2c-7/i2c-dev/i2c-7
I think the connection is already correct, because after 20-30 minutes I can have the slave device read from i2c-8:root@up-UP-CHT01:/home/up# i2cdetect -y -r 8 0x40 0x4f
0 1 2 3 4 5 6 7 8 9 a b c d e f
00:
10:
20:
30:
40: -- -- -- -- -- -- -- -- 48 -- -- -- 4c -- -- --
50:
60:
70:
root@up-UP-CHT01:/home/up# i2cdump -y -r 0x00-0x03 8 0x48
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 1f 00 4b 50 ?.KP
root@up-UP-CHT01:/home/up# i2cdump -y -r 0x00-0x0A 8 0x4C
No size specified (using byte-data access)
0 1 2 3 4 5 6 7 8 9 a b c d e f 0123456789abcdef
00: 00 00 00 00 00 00 00 00 01 00 00 ........?..
Basically I have LM75B (slave address 0x48) and MMA7660 (slave address 0x4C) connected to i2c-1.
Are you sure that i2c-1 correspond to 22C1 and not 22C2? I thought that i2c-0 connected to 22C1 and i2c-1 to 22C2. According to the z8000 datasheet, 22C1 is I2C Port 1 (first I2C port), and 22C2 is I2C port 2. There is I2C Port 0 in the register list. -
Hi
I don't have an UP board with me at the moment (and usually I remember that the I2c mode is set to ACPI)
with ACPI enabled808622C1:01 -> i2c pin 2,3 808622C1:00 -> ID_SD, ID_SC
-
Hi Nicola,
I tried to reset the BIOS setting to the default ACPI mode, but still not immediate response from the I2C slaves in the bus:root@up-UP-CHT01:/home/up# find /sys/devices/pci0000:00 -name 'i2c-*' /sys/devices/pci0000:00/808622C1:01/i2c-8 /sys/devices/pci0000:00/808622C1:01/i2c-8/i2c-dev /sys/devices/pci0000:00/808622C1:01/i2c-8/i2c-dev/i2c-8 /sys/devices/pci0000:00/0000:00:02.0/i2c-3 /sys/devices/pci0000:00/0000:00:02.0/i2c-3/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-3/i2c-dev/i2c-3 /sys/devices/pci0000:00/0000:00:02.0/i2c-1 /sys/devices/pci0000:00/0000:00:02.0/i2c-1/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-1/i2c-dev/i2c-1 /sys/devices/pci0000:00/0000:00:02.0/i2c-4 /sys/devices/pci0000:00/0000:00:02.0/i2c-4/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-4/i2c-dev/i2c-4 /sys/devices/pci0000:00/0000:00:02.0/i2c-2 /sys/devices/pci0000:00/0000:00:02.0/i2c-2/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-2/i2c-dev/i2c-2 /sys/devices/pci0000:00/0000:00:02.0/i2c-0 /sys/devices/pci0000:00/0000:00:02.0/i2c-0/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-0/i2c-dev/i2c-0 /sys/devices/pci0000:00/0000:00:02.0/i2c-5 /sys/devices/pci0000:00/0000:00:02.0/i2c-5/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-5/i2c-dev/i2c-5 /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6 /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6/i2c-dev/i2c-6 /sys/devices/pci0000:00/808622C1:04/i2c-10 /sys/devices/pci0000:00/808622C1:04/i2c-10/i2c-dev /sys/devices/pci0000:00/808622C1:04/i2c-10/i2c-dev/i2c-10 /sys/devices/pci0000:00/808622C1:02/i2c-9 /sys/devices/pci0000:00/808622C1:02/i2c-9/i2c-ADC081C:00 /sys/devices/pci0000:00/808622C1:02/i2c-9/i2c-dev /sys/devices/pci0000:00/808622C1:02/i2c-9/i2c-dev/i2c-9 /sys/devices/pci0000:00/808622C1:00/i2c-7 /sys/devices/pci0000:00/808622C1:00/i2c-7/i2c-dev /sys/devices/pci0000:00/808622C1:00/i2c-7/i2c-dev/i2c-7 /sys/devices/pci0000:00/808622C1:05/i2c-11 /sys/devices/pci0000:00/808622C1:05/i2c-11/i2c-dev /sys/devices/pci0000:00/808622C1:05/i2c-11/i2c-dev/i2c-11 root@up-UP-CHT01:/home/up# i2cdetect -y -r 8 0x40 0x4f 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: 10: 20: 30: 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 60: 70:
Any idea why it takes so long for the I2C to be enabled? -
1) try the detect with no devices connected; also look for error in dmesg during the scan
2) submit us the result of the sysinfo script as sayd here https://up-community.org/wiki/Software#Requesting_support_for_Linux_OS
Regards
Nicola Lunghi -
Hi Nicola,
here are the debug and dmesg log files. Anyway the sysinfo.sh is not completely finished. See the following:root@up-UP-CHT01:/home/up/up_debug# ./sysinfo.sh > debug.log No LSB modules are available. WARNING: apt does not have a stable CLI interface. Use with caution in scripts. aplay: device_list:268: no soundcards found... tail: cannot open '/sys/kernel/debug/regmap/AA*/*' for reading: No such file or directory tail: cannot open '/etc/apt/sources.list.d/*' for reading: No such file or directory Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named mraa root@up-UP-CHT01:/home/up/up_debug#
-
You are using a regular Ubuntu Kernel not a kernel for UP board so the GPIO cannot work.
Please install a supported Ubuntu kernel for up board following this guide
https://up-community.org/wiki/Ubuntu#Ubuntu_16.04.1_LTS_.28Xenial_Xerus.29
or wait for more updated kernel (soon to be released on our ppa
Regards
Nicola Lunghi -
Hi Nicola,
thanks for the hints. It works that the I2C slaves can be read directly after boot. However, one last question: this works only in ACPI mode, how to make this works with PCI mode? Tried to change the setting in BIOS, but then the i2c is assigned as i2c-8 again, and the I2C slaves doesn't work after boot:root@up-UP-CHT01:/home/up# uname -r 4.4.0-2-upboard root@up-UP-CHT01:/home/up# find /sys/devices/pci0000:00 -name 'i2c-*' /sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/i2c-6 /sys/devices/pci0000:00/0000:00:02.0/i2c-0 /sys/devices/pci0000:00/0000:00:02.0/i2c-0/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-0/i2c-dev/i2c-0 /sys/devices/pci0000:00/0000:00:02.0/i2c-1 /sys/devices/pci0000:00/0000:00:02.0/i2c-1/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-1/i2c-dev/i2c-1 /sys/devices/pci0000:00/0000:00:02.0/i2c-2 /sys/devices/pci0000:00/0000:00:02.0/i2c-2/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-2/i2c-dev/i2c-2 /sys/devices/pci0000:00/0000:00:02.0/i2c-3 /sys/devices/pci0000:00/0000:00:02.0/i2c-3/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-3/i2c-dev/i2c-3 /sys/devices/pci0000:00/0000:00:02.0/i2c-4 /sys/devices/pci0000:00/0000:00:02.0/i2c-4/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-4/i2c-dev/i2c-4 /sys/devices/pci0000:00/0000:00:02.0/i2c-5 /sys/devices/pci0000:00/0000:00:02.0/i2c-5/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-5/i2c-dev/i2c-5 /sys/devices/pci0000:00/0000:00:02.0/i2c-6 /sys/devices/pci0000:00/0000:00:02.0/i2c-6/i2c-dev /sys/devices/pci0000:00/0000:00:02.0/i2c-6/i2c-dev/i2c-6 /sys/devices/pci0000:00/0000:00:18.1/i2c-7 /sys/devices/pci0000:00/0000:00:18.1/i2c-7/i2c-dev /sys/devices/pci0000:00/0000:00:18.1/i2c-7/i2c-dev/i2c-7 /sys/devices/pci0000:00/0000:00:18.2/i2c-8 /sys/devices/pci0000:00/0000:00:18.2/i2c-8/i2c-dev /sys/devices/pci0000:00/0000:00:18.2/i2c-8/i2c-dev/i2c-8 /sys/devices/pci0000:00/0000:00:18.3/i2c-9 /sys/devices/pci0000:00/0000:00:18.3/i2c-9/i2c-dev /sys/devices/pci0000:00/0000:00:18.3/i2c-9/i2c-dev/i2c-9 /sys/devices/pci0000:00/0000:00:18.5/i2c-10 /sys/devices/pci0000:00/0000:00:18.5/i2c-10/i2c-dev /sys/devices/pci0000:00/0000:00:18.5/i2c-10/i2c-dev/i2c-10 /sys/devices/pci0000:00/0000:00:18.6/i2c-11 /sys/devices/pci0000:00/0000:00:18.6/i2c-11/i2c-dev /sys/devices/pci0000:00/0000:00:18.6/i2c-11/i2c-dev/i2c-11 /sys/devices/pci0000:00/0000:00:18.7/i2c-12 /sys/devices/pci0000:00/0000:00:18.7/i2c-12/i2c-dev /sys/devices/pci0000:00/0000:00:18.7/i2c-12/i2c-dev/i2c-12 root@up-UP-CHT01:/home/up# cat /sys/bus/i2c/devices/i2c-8/device/vendor 0x8086 root@up-UP-CHT01:/home/up# cat /sys/bus/i2c/devices/i2c-8/device/device 0x22c2 root@up-UP-CHT01:/home/up# i2cdetect -y -r 8 0x40 0x4f 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: 10: 20: 30: 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: 60: 70:
I need to make PCI working because I want to run another OS (dual partition with Ubuntu) but it requires PCI mode devices. -
Hi
the SOC i2c pins are connected via a CPLD to the external GPIO pin
The CPLD pin is configured by our custom linux driver.
Currently our driver support only ACPI names.
If you want to support also PCI mode you need to modify the kernel driver to do that.
I suggest you to study the 4.9 kernel sources at https://github.com/emutex/ubilinux-kernel
Also we are open for commercial support/driver development if your project requires it.
Ask a quotation at info@emutex.com if you need more information about it
Best Regards
Nicola Lunghi -
Hi Nicola,
thanks for the info. Would it be possible to share which are the source code for the CPLD drivers? That would be helpful.
Thanks. -
Hi Nicola,
could you point to the source code used for controlling the CPLD if it is available in github?
We would need this to be able to use the board.
Thanks. -
Hi
the source code of the CPLD is not yet open source.
You can contact AAEON to obtain it https://up-community.org/professional-services
Regards
Nicola Lunghi