Verdin i.MX8M Plus EEPROM disappears when an 3 I2C peripherals are connected on the extension slot X20

Hi,
Here is my configuration:

Software summary
------------------------------------------------------------
Bootloader:               U-Boot
Kernel version:           5.15.129-6.5.0+git.6f8fd49366db #1-TorizonCore SMP PREEMPT Fri Dec 22 11:15:52 UTC 2023
Kernel command line:      root=LABEL=otaroot rootfstype=ext4 quiet logo.nologo vt.global_cursor_default=0 plymouth.ignore-serial-consoles splash fbcon=map:3 ostree=/ostree/boot.1/torizon/fe091cbe7b665ff6d9d5d618cb20c42c90c242fffeaceccf204eacd186b2f597/0
Distro name:              NAME="TorizonCore"
Distro version:           VERSION_ID=6.5.0-build.8
Distro variant:           VARIANT="Docker"
Hostname:                 verdin-imx8mp-15229850
------------------------------------------------------------

Hardware info
------------------------------------------------------------
HW model:                 Toradex Verdin iMX8M Plus WB on Verdin Development Board
Toradex version:          0058 V1.1B
Serial number:            15229850
Processor arch:           aarch64
------------------------------------------------------------
[Configuration]
Verdin iMX8M Plus Evaluation Kit with Touchscreen
with:
SOM i.MX8M Plus Quad 4GB WB IT v1.1B
Dahlia Carrier Board v1.1D
Verdin DSI to LVDS rev 1.1A
Capacitive Touch Display 10.1" v1.0A

I have a difference in the presence of the eeprom file of the internal 24C02 peripheral if I connect or not external I2C devices on the i2c-1 bus avialable on X20 pins (J5 GND, J6 SDA, J7 SCL).

Here is the EEPROM peripheral I am talking about.

Hello @flepron,

This behavior would not be expected.
The internal I2C EEPROM is connected to the internal SoM I2C bus, which is not exposed on the SODIMM edge connector. This I2C bus is on /dev/verdin-i2c-on-module (/dev/i2c-0).

How are you checking the presence of the EEPROM file?

Best Regards,
Bruno

Hello Bruno,

This I2C bus is on /dev/verdin-i2c-on-module (/dev/i2c-0 ) is redirected on i2c-3. Am I right ? I believe so.

torizon@verdin-imx8mp-15229850:~$ ls -la /dev | grep i2c*
crw-rw-r--  1 root i2cdev   89,   0 Apr 16 05:56 i2c-0
crw-rw-r--  1 root i2cdev   89,   1 Apr 16 05:56 i2c-1
crw-rw-r--  1 root i2cdev   89,   2 Apr 16 05:56 i2c-2
crw-rw-r--  1 root i2cdev   89,   3 Apr 16 05:56 i2c-3
lrwxrwxrwx  1 root root          94 Apr 16 05:56 verdin-adc1 -> /sys/devices/platform/soc@0/30800000.bus/30a20000.i2c/i2c-0/0-0049/iio:device0/in_voltage3_raw
lrwxrwxrwx  1 root root          94 Apr 16 05:56 verdin-adc2 -> /sys/devices/platform/soc@0/30800000.bus/30a20000.i2c/i2c-0/0-0049/iio:device0/in_voltage2_raw
lrwxrwxrwx  1 root root          94 Apr 16 05:56 verdin-adc3 -> /sys/devices/platform/soc@0/30800000.bus/30a20000.i2c/i2c-0/0-0049/iio:device0/in_voltage1_raw
lrwxrwxrwx  1 root root          94 Apr 16 05:56 verdin-adc4 -> /sys/devices/platform/soc@0/30800000.bus/30a20000.i2c/i2c-0/0-0049/iio:device0/in_voltage0_raw
lrwxrwxrwx  1 root root           5 Apr 16 05:56 verdin-i2c-on-module -> i2c-0
lrwxrwxrwx  1 root root           5 Apr 16 05:56 verdin-i2c1 -> i2c-3
lrwxrwxrwx  1 root root           5 Apr 16 05:56 verdin-i2c2 -> i2c-1
lrwxrwxrwx  1 root root           5 Apr 16 05:56 verdin-i2c4 -> i2c-2

I am checking the presence of the EEPROM by checking the presence of the virtual file created by the driver so that you can read/write its content.

But, I have discovered that there is also a similar problem with the temperature sensor @ 004F on i2c-3

Here is what I have when the Dahlia board is not connected to my board:

torizon@verdin-imx8mp-15229850:~$ i2cdetect -y -r 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: UU -- -- -- -- -- -- -- -- -- UU -- -- -- -- UU
50: UU -- -- -- -- -- -- UU -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

torizon@verdin-imx8mp-15229850:~$ ls -al /sys/class/i2c-dev/i2c-3/device/3-0057/
total 0
drwxr-xr-x  4 root root    0 Apr 16 05:56 .
drwxr-xr-x 12 root root    0 Apr 16 05:56 ..
drwxr-xr-x  3 root root    0 Apr 16 05:56 3-00574
lrwxrwxrwx  1 root root    0 Apr 16 05:56 driver -> ../../../../../../../bus/i2c/drivers/at24
-rw-------  1 root root  256 Apr 16 06:10 eeprom
-r--r--r--  1 root root 4096 Apr 16 06:10 modalias
-r--r--r--  1 root root 4096 Apr 16 05:56 name
lrwxrwxrwx  1 root root    0 Apr 16 06:10 of_node -> ../../../../../../../firmware/devicetree/base/soc@0/bus@30800000/i2c@30a50000/eeprom@57
drwxr-xr-x  2 root root    0 Apr 16 06:10 power
lrwxrwxrwx  1 root root    0 Apr 16 05:56 subsystem -> ../../../../../../../bus/i2c
lrwxrwxrwx  1 root root    0 Apr 16 06:10 supplier:regulator:regulator.0 -> ../../../../../../virtual/devlink/regulator:regulator.0--i2c:3-0057
-rw-r--r--  1 root root 4096 Apr 16 05:56 uevent
torizon@verdin-imx8mp-15229850:~$

Just above, you can see that there is a file named eeprom.

And for the temperature sensor attached on the i2c-3 bus at the address 0x4F, here is the directory content where temp1_input is mounted.

torizon@verdin-imx8mp-15229850:~$ ls /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/
hwmon2
torizon@verdin-imx8mp-15229850:~$ ls -al /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2
total 0
drwxr-xr-x 3 root root    0 Apr 16 06:18 .
drwxr-xr-x 3 root root    0 Apr 16 06:18 ..
lrwxrwxrwx 1 root root    0 Apr 16 06:43 device -> ../../../3-004f
-r--r--r-- 1 root root 4096 Apr 16 06:43 name
lrwxrwxrwx 1 root root    0 Apr 16 06:43 of_node -> ../../../../../../../../../firmware/devicetree/base/soc@0/bus@30800000/i2c@30a50000/sensor@4f
drwxr-xr-x 2 root root    0 Apr 16 06:43 power
lrwxrwxrwx 1 root root    0 Apr 16 06:18 subsystem -> ../../../../../../../../../class/hwmon
-r--r--r-- 1 root root 4096 Apr 16 06:43 temp1_input
-rw-r--r-- 1 root root 4096 Apr 16 06:43 temp1_max
-rw-r--r-- 1 root root 4096 Apr 16 06:43 temp1_max_hyst
-rw-r--r-- 1 root root 4096 Apr 16 06:18 uevent
-r--r--r-- 1 root root 4096 Apr 16 06:43 update_interval
torizon@verdin-imx8mp-15229850:~$

As you can see, the path of the virtual file mounted by the driver of the Temperature Sensor TMP1075, is:
/sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2/temp1_input
So, the file temp1_input is located in the directory named: hwmon2

We’ve worked together on this topic on the ticket named : I2C Access from .NET SDK 8.0 Application : CLR/System.IO.IOException.

Just have a look and you will remind what you advised me for both EEPROM and for Temperature Sensor, as well as the C console application and the right I needed to set in .vscode\settings.json (“torizon_run_as”: “root”) and the paths I need to specify in docker-compose.yml file.

version: "3.9"
services:
  i2c-eeprom-and-temp-debug:
    build:
      context: .
      dockerfile: Dockerfile.debug
    image: ${LOCAL_REGISTRY}:5002/i2c-eeprom-and-temp-debug:${TAG}
    ports:
      - 2230:2230
    user: 0:0
    volumes:
      - type: bind
        source: /sys/class/i2c-dev/i2c-3/device/3-0057/eeprom
        target: /carrier_board_eeprom

      - type: bind
        source: /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2/temp1_input
        target: /carrier_board_temp

  i2c-eeprom-and-temp:
    build:
      context: .
      dockerfile: Dockerfile
    image: ${DOCKER_LOGIN}/i2c-eeprom-and-temp:${TAG}
    user: 0:0
    volumes:
      - type: bind
        source: /sys/class/i2c-dev/i2c-3/device/3-0057/eeprom
        target: /carrier_board_eeprom
      - type: bind
        source: /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2/temp1_input
        target: /carrier_board_temp

So, my application runs perfectly well when the Dahlia board is not connected to my board.

Here is the code for the community.

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <unistd.h>

int main(int argc, char *argv[]){
    printf("Hello Torizon!\n");

    FILE *eepromFile = fopen("/carrier_board_eeprom", "rwb");

    if(eepromFile == NULL){
        printf("Failed to open eeprom\n");
        return -1;
    }

    FILE *temperatureFile = fopen("/carrier_board_temp", "r");

    if(temperatureFile == NULL){
        printf("Failed to open temperature\n");
        fclose(eepromFile);
        return -1;
    }

    uint8_t eepromData[32];
    char temperatureString[32];

    // Run 10 cycles
    for(int i = 0; i < 10; i++){
        // Read first 32 bytes of EEPROM
        fseek(eepromFile, 0, SEEK_SET);
        fread(eepromData, 1, sizeof(eepromData), eepromFile);
        // Print Read Data
        printf("EEPROM:");
        for(int j = 0; j < sizeof(eepromData); j++){
            printf(" %X", eepromData[j]);
        }
        printf("\n");

        // Read temperature
        fseek(temperatureFile, 0, SEEK_END);
        // Get the current file pointer position, which is the file size
        size_t fileSize = ftell(temperatureFile);
        // Reset the file pointer back to the beginning of the file
        fseek(temperatureFile, 0, SEEK_SET);
        
        // Read temperature string
        fread(temperatureString, 1, fileSize, temperatureFile);
        // Convert to floating point
        float temperature = atoi(temperatureString)/1000.0;

        printf("Temperature: %f ÂşC\n", temperature);
        fflush(stdout);

        // Wait for 1 second
        usleep(1000000);
    }

    // Close files
    fclose(temperatureFile);
    fclose(eepromFile);

    return 0;
}

Now, here is what happens to the system when I connect on the connector X20 of the Dahlia board, the pins J5 (GND), J6 (SDA1), J7(SCL1) to the I2C bus of my expansion board, and the pins J1 (ADC1) and J11 (GND) to the output analog signal of the same expansion card ( 0 Volts < J1 < 1.38 Volts).

torizon@verdin-imx8mp-15229850:~$ i2cdetect -y -r 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
30: -- -- -- -- -- -- -- -- 38 39 -- -- 3c -- -- --
40: UU -- -- -- -- -- -- -- -- -- UU -- -- -- -- UU
50: 50 -- -- -- -- -- -- 57 -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

As, you can see the system has detected my 3 I2C devices at address 0x38, 0x39, and 0x3C, which is normal, since their addresses are configured this way, so at this step, everything is normal. We still have the TMP1075’s driver mounted at address 0x4F, which is also normal.

But, the EEPROM 24C02-F’s driver is no more loaded, and when we list the directory where the virtual eeprom file shoudl appear, here is what we have:

torizon@verdin-imx8mp-15229850:~$ ls -al /sys/class/i2c-dev/i2c-3/device/3-0057/
total 0
drwxr-xr-x  3 root root    0 Apr 16 07:27 .
drwxr-xr-x 12 root root    0 Apr 16 07:27 ..
-r--r--r--  1 root root 4096 Apr 16 07:29 modalias
-r--r--r--  1 root root 4096 Apr 16 07:27 name
lrwxrwxrwx  1 root root    0 Apr 16 07:29 of_node -> ../../../../../../../firmware/devicetree/base/soc@0/bus@30800000/i2c@30a50000/eeprom@57
drwxr-xr-x  2 root root    0 Apr 16 07:29 power
lrwxrwxrwx  1 root root    0 Apr 16 07:27 subsystem -> ../../../../../../../bus/i2c
-rw-r--r--  1 root root 4096 Apr 16 07:27 uevent
-r--r--r--  1 root root 4096 Apr 16 07:29 waiting_for_supplier

There is no eeprom file, so we cannot read/write anymore the EEPROM content.

Also, sometimes the file for the TMP1075 is not mounted in the same directory.

Usually, the file is mounted in /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2`:

torizon@verdin-imx8mp-15229850:~$ ls -al /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2
total 0
drwxr-xr-x 3 root root    0 Apr 16 07:57 .
drwxr-xr-x 3 root root    0 Apr 16 07:57 ..
lrwxrwxrwx 1 root root    0 Apr 16 08:03 device -> ../../../3-004f
-r--r--r-- 1 root root 4096 Apr 16 08:03 name
lrwxrwxrwx 1 root root    0 Apr 16 08:03 of_node -> ../../../../../../../../../firmware/devicetree/base/soc@0/bus@30800000/i2c@30a50000/sensor@4f
drwxr-xr-x 2 root root    0 Apr 16 08:03 power
lrwxrwxrwx 1 root root    0 Apr 16 07:57 subsystem -> ../../../../../../../../../class/hwmon
-r--r--r-- 1 root root 4096 Apr 16 08:03 temp1_input
-rw-r--r-- 1 root root 4096 Apr 16 08:03 temp1_max
-rw-r--r-- 1 root root 4096 Apr 16 08:03 temp1_max_hyst
-rw-r--r-- 1 root root 4096 Apr 16 07:57 uevent
-r--r--r-- 1 root root 4096 Apr 16 08:03 update_interval

And sometimes, the file is mounted in /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon3:
instead of /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2 which does not exist.

torizon@verdin-imx8mp-15229850:~$ ls -al /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon3
total 0
drwxr-xr-x 3 root root    0 Apr 16 07:57 .
drwxr-xr-x 3 root root    0 Apr 16 07:57 ..
lrwxrwxrwx 1 root root    0 Apr 16 08:03 device -> ../../../3-004f
-r--r--r-- 1 root root 4096 Apr 16 08:03 name
lrwxrwxrwx 1 root root    0 Apr 16 08:03 of_node -> ../../../../../../../../../firmware/devicetree/base/soc@0/bus@30800000/i2c@30a50000/sensor@4f
drwxr-xr-x 2 root root    0 Apr 16 08:03 power
lrwxrwxrwx 1 root root    0 Apr 16 07:57 subsystem -> ../../../../../../../../../class/hwmon
-r--r--r-- 1 root root 4096 Apr 16 08:03 temp1_input
-rw-r--r-- 1 root root 4096 Apr 16 08:03 temp1_max
-rw-r--r-- 1 root root 4096 Apr 16 08:03 temp1_max_hyst
-rw-r--r-- 1 root root 4096 Apr 16 07:57 uevent
-r--r--r-- 1 root root 4096 Apr 16 08:03 update_interval

The both problems only happen when our expansion board is connected to the Dahlia board through the X20 connector using the pins described above.

Could you please help me on these blocking issues ?

When these this happens, I cannot deploy my application on the SOM i.XM8M Plus since the bindings done in the docker-compose file do not work anymore since the files do not exist anymore.

volumes:
      - type: bind
        source: /sys/class/i2c-dev/i2c-3/device/3-0057/eeprom
        target: /carrier_board_eeprom

      - type: bind
        source: /sys/class/i2c-dev/i2c-3/device/3-004f/hwmon/hwmon2/temp1_input
        target: /carrier_board_temp

Many thanks.

Sincerely,
François.

Hello @flepron,

This is not correct. The I2C bus which is redirected to /dev/i2c-3 is the Verdin I2C1 (/dev/verdin-i2c1).
The Verdin I2C1 bus is then connected to the Dahlia Carrier Board’s EEPROM and Temperature Sensor.

So I think you are dealing with the Carrier Board’s EEPROM file not being available when you connect other I2C devices to your board.

Regarding the temperature sensor hwmon number, it is possible this is not a fixed assignment and could require devicetree modifications to ensure it is always in the same location.

I will try to reproduce the issues here and check if there is a workaround without the need for devicetree modifications.

Best Regards,
Bruno

1 Like

Hello Bruno,

You are right. This is my mistake in copying the line I wanted to highlight.

This is internal the verdin-i2c-1 which is redirected to the i2c-3.

lrwxrwxrwx  1 root root           5 Apr 16 05:56 verdin-i2c1 -> i2c-3

It may come from an electrical problem coming from the analog signal that we connect on the pin1 of X20 which is the ADC_1 of the verdin-adc1 → /sys/devices/platform/soc@0/30800000.bus/30a20000.i2c/i2c-0/0-0049/iio:device0/in_voltage3_raw.

When we start (Power ON) our system (Dahlia and expansion board), the voltage on the pin1 of the connector X20 is not stable (floating voltage between 0V up to 1.8V) and , so it might generate a bad boot in the Verdin i.MX 8M Plus.

This is just a guest, because if the pin1 of the X20 connector is not connected to our expansion board, the mapping of the EEPROM M24C02 and the Temperature Sensor TMP1075 are always ok.

torizon@verdin-imx8mp-15229850:~$ i2cdetect -y -r 3
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- UU -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- UU -- -- --
30: -- -- -- -- -- -- -- -- 38 39 -- -- 3c -- -- --
40: UU -- -- -- -- -- -- -- -- -- UU -- -- -- -- UU
50: UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

Did you manage to repeat the problem that we have on your side ?

Sincerely,
François.

Hello @flepron,

Unfortunately I could not reproduce the issue you experienced.

I tried using 3 I2C devices connected to the Dahlia Carrier board and put an analog signal on pin 1 of X20.
None of these had the effect you experienced.
One of the things I tried was to supply the analog input with a value from another power supply, to see what could be the behavior if back-feeding was a possibility in the setup. This still did not result in any problematic behavior.

Could you send me the output of dmesg from when you experience the problem?

Also, could you clarify the following hardware topics?

  • Which I2C devices are on your expansion board?
  • How is the value on pin1 of X20 not stable? What is it connected to?

If you prefer to share hardware details privately, you can send the information to us via the support email (support.eu@toradex.com) or via a closed topic on the community itself.

Best Regards,
Bruno

Hello @bruno.tx

Here are the dmesg log files when I boot the Dahlia board connected and not connected on my expansion board.

My expansion board contains 3 I2C devices which are NXP PCF8574AT.

Of course between those I2C I/O expanders of our expansion card and the X20 connector (Pin 6 and Pin 7,) we have translated the voltages of SDA and SCL using a level translator NXP PCA9306, because our expansion board uses 5V and the Dahlia board uses 1.8V on the Pin 6 (SDA) and Pin 7 (SCL) of the X20 connector.

verdin-imx8mp-15229850-2024-04-17-091714 Good.log (41.9 KB)

verdin-imx8mp-15229850-2024-04-17-091355 Bad.log (42.1 KB)

The Pin 1 of the X20 is connected to one of analog input of our board. We have shifted this analog input in the range of 0V up to 1.8V using a simple voltage divider with two resistors.

For the moment, Pin 1 is floating because this voltage comes from a sensor that we usually put in the swimming pool water. And, as I am not ready to connect my POC to a real sensor because this is an expensive sensor (3000 €), thus Pin 1 is floating between 0V and 1.8V.

If you need schematics, feel free to ask again. I will ask to my CTO his agreement. For the moment, this is a bit difficult since he is traveling in another time zone (USA), and he is really busy, so I do not want to disturb him if the details that I give you are enough, but is they are not, I will ask to him leaving him a message.

I add these 2 files which might be more significant because I clear before the kernel ring buffer.

verdin-imx8mp-15229850-2024-04-17-150915 Without Expansion Board.log (112.3 KB)
verdin-imx8mp-15229850-2024-04-17-152217 With Expansion Board.log (47.5 KB)

Sincerely,
François.

Hello @flepron,

I was able to reproduce the problem with the non-deterministic mapping of the temperature sensor to a hwmon device.

To solve this, the recommendation would be to use an udev rule to create a symbolic link to the correct hwmon device.
The following two files are enough to set this up for the temperature sensor on the Dahlia Carrier Board.


/etc/udev/rules.d/98-hwmon.rules

KERNEL=="hwmon*", ATTRS{name}=="tmp75c", DEVPATH=="*3-004f*" RUN+="/etc/udev/scripts/custom-tmp75c.sh"

/etc/udev/scripts/custom-tmp75c.sh

#!/usr/bin/env sh

if [ "$ACTION" = "add" ] || [ "$ACTION" = "change" ]; then
        ln -s "/sys$DEVPATH" /dev/hwmon-tmp75c
elif [ "$ACTION" = "remove" ]; then
        rm /dev/hwmon-tmp75c
fi


This will cause the temperature sensor to always be available on the /dev/hwmon-tmp75c symbolic link.
The 98-hwmon.rules makes sure to only get the device with 3-004f on its name, so multiple sensors with the same name could be setup this way.

The configurations can be captured with TorizonCore builder, to generate a custom image: Capturing Changes in the Configuration of a Board on Torizon OS | Toradex Developer Center



The problem with the eeprom driver is still unclear.
From your logs it only happens on the verdin-imx8mp-15229850-2024-04-17-152217 With Expansion Board.log file.

If my understanding is correct, pin 1 of X20 is connected to Rl and Rh, which are the resistors for your voltage divider. Rl is connected to ground and Rh is left floating without the sensor.
If this is the case, there would be no obvious reason for this to cause the eeprom driver problems you are seeing.

I think the best course of action would be to look at the expansion board’s datasheet.
Could you check if it would be possible to send it to us either via the support email (support.eu@toradex.com) or a closed topic on the community?

Best Regards,
Bruno

1 Like

Hello @bruno.tx

I thank you for your workaround, and I am sorry for my late answer.

I am always in impressed with your knowledge of Torizon and its file system, and all the tools that can be used to make the most of the system, and develop applications in containers.

Thanks to Visual Studio Code Torizon IDE extension, develop application is really easy, but for sure I have to learn how to exchange data with the GPIO interfaces with and without drivers like I2C, SPI, UART, ADC, Timers. Know with I2C, I have understood how this works for this kind of interfaces with and without drivers, but I have to learn a lot for the others communication interfaces.

I have over 28 years of work experience in embedded application development, but I admit that I know very little about Linux or Yocto, and it’s a weakness in me that I would like to overcome.

Indeed, you can be proud of all the things you know and master.

Do you think that there are any online courses to learn most of the things you know to make me less dependent and speed up my project development?

If you know of effective courses to acquire a minimum knowledge about drivers, the device tree, the system boot steps, system configuration, and how to detect anomalies and how to resolve them, I would be very grateful if you could give me some URLs.

Anyway, if we come back to our expansion board, I think that we have problem on it, since we have analyzed some voltages levels before and after the voltage level translator NXP PCA9306, and we’ve seen that this is not compliant with the voltage levels on the X20 connector on pin 6 (I2C3-SDA1), pin 7 (I2C3-SCL1), so I prefer to say that the problem comes from our side at this time.

The usage of an oscilloscope is usually really helpful when you have to dig deeper into a problem.

We are investigating why our expansion board has been damaged, but I prefer to set this thread on hold if you do not see any issue, so that you do not continue to waste your time on a problem that might come from our expansion board (homemade board).

Anyway, I will keep you posted on this thread, so it can help the community.

Many thanks.

Sincerely,
François.

Hello @flepron,

Thanks for your kind words.

We have many partners which provide courses about these topics, you could have a look at our partner network page: Toradex - Partner Network Services
Some of them provide trainings in-person while others provide them either in-person or online.

In terms of readily available online content, we have worked with one of our partners to make the Torizon training from the Torizon Bootcamp freely available under a Creative-Commons license.
You can find this content on GitHub: GitHub - toradex/torizon-training-resources: Resources for Torizon training

On a personal note, I mainly learned what I know by trying to understand the topics while solving actual problems. The online documentation is usually a good source of information.
Yocto in particular can be hard to grasp initially, as the online documentation is extensive but hard to know where to get started, for that I had an introductory course by one of our partners, B2Open.


If you need further support with this, please feel free to reach out.

Best Regards,
Bruno

1 Like

Hi @bruno.tx

Thank you very much for the links.

There are both extremely useful and bring refences on Torizon that were necessary for my global understanding and vision.

Many thanks again and I’ll keep you updated on the problem on my homemade hardware expansion board connected to the X20 connector of the Dahlia board soon as I have fixed it.

Sincerely,
François