Added EEPROM write failure

Hello,

We added EEPROM to our custom board. (sub address 0x51)
Jetpack 4.6

root@linux:~# i2cdetect -y 2
Warning: Can't use SMBus Quick Write command, will skip some addresses
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:
10:
20:
30: -- -- -- -- -- -- -- --
40:
50: 50 51 -- -- -- -- -- -- -- 59 -- -- -- -- -- --
60:
70:
root@linux:~#

But it doesn’t write.

root@linux:~# i2cset -y 2 0x51 0xa0 0x55
root@linux:~# i2cdump -y 2 0x51
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: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
root@linux:~#

With 0x50, write/read works normally.
Do I need a separate driver for the EEPROM I added?
The EEPROM information is as follows.

  • TD24C256-R
  • I2C Compatible 400kHz ~ 1MHz

I looked at something else on the forum and did the following:

  1. add defconfig (tegra_defconfig)
CONFIG_EEPROM_AT24=y
CONFIG_I2C=y
CONFIG_SYSFS=y
  1. i2c definition in dts (file tegra210-porg-p3448-common.dtsi)
i2c@7000c500 {
    status = "okey";
    eeprom@51 {
        compatible = "at,24c256";
        reg = <0x51>;
        #address-cells = <1>;
        #size-cells = <1>;
        cape0_data: cape_data@0 {
            reg = <0 0x100>;
        };
    };
};

I checked after setting as above, but i2cdetect also failed.

root@linux:~# i2cdetect -y 2
Warning: Can't use SMBus Quick Write command, will skip some addresses
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:
10:
20:
30: -- -- -- -- -- -- -- --
40:
50: 50 UU -- -- -- -- -- -- -- 59 -- -- -- -- -- --
60:
70:
root@linux:~#

root@linux:~# i2cset -y 2 0x51 0x10 0x55
Error: Could not set address to 0x51: Device or resource busy

Any references I can give for similar issues?

hello TJCUT,

there’re two eeproms, one on the nano module. the other is on the nano devkit carrier board.
you may see-also Jetson Module EEPROM Layout.

Hello JerryChang
Thank you for your reply.

I know that NANO module has EEPROM. (0x50)
The EEPROM on the devkit carrier board is out of the question now.
The board I’m testing right now is a custom board I made.

The EEPROM I added is 0x51.
The address is separated from the existing one.
Is there a problem?

hello TJCUT,

is there cvm.bin generated when you flashing the target? please also check that binary file contain the correct info.

Hello JerryChang,

The cvm.bin file is verified as follows.

cd /home/nvidia/work/NANO/eeprom_test_4.6/Linux_for_Tegra && sudo ./flash.sh jetson-nano-devkit-emmc mmcblk0p1
###############################################################################
# L4T BSP Information:
# R32 , REVISION: 6.1
###############################################################################
# Target Board Information:
# Name: jetson-nano-devkit-emmc, Board Family: t210ref, SoC: Tegra 210, 
# OpMode: production, Boot Authentication: , 
# Disk encryption: disabled ,
###############################################################################
./tegraflash.py --chip 0x21 --applet "/home/nvidia/work/NANO/eeprom_test_4.6/Linux_for_Tegra/bootloader/nvtboot_recovery.bin" --skipuid --cmd "dump eeprom boardinfo cvm.bin" 
Welcome to Tegra Flash
version 1.0.0
Type ? or help for help and q or quit to exit
Use ! to execute system commands
 
[   0.0012 ] Generating RCM messages
[   0.0031 ] tegrarcm --listrcm rcm_list.xml --chip 0x21 0 --download rcm /home/nvidia/work/NANO/eeprom_test_4.6/Linux_for_Tegra/bootloader/nvtboot_recovery.bin 0 0
[   0.0038 ] RCM 0 is saved as rcm_0.rcm
[   0.0041 ] RCM 1 is saved as rcm_1.rcm
[   0.0041 ] List of rcm files are saved in rcm_list.xml
[   0.0041 ] 
[   0.0041 ] Signing RCM messages
[   0.0059 ] tegrasign --key None --list rcm_list.xml --pubkeyhash pub_key.key
[   0.0065 ] Assuming zero filled SBK key
[   0.0110 ] 
[   0.0110 ] Copying signature to RCM mesages
[   0.0130 ] tegrarcm --chip 0x21 0 --updatesig rcm_list_signed.xml
[   0.0139 ] 
[   0.0140 ] Boot Rom communication
[   0.0158 ] tegrarcm --chip 0x21 0 --rcm rcm_list_signed.xml --skipuid
[   0.0165 ] RCM version 0X210001
[   0.1181 ] Boot Rom communication completed
[   1.1263 ] 
[   1.1265 ] dump EEPROM info
[   1.1317 ] tegrarcm --oem platformdetails eeprom /home/nvidia/work/NANO/eeprom_test_4.6/Linux_for_Tegra/bootloader/cvm.bin
[   1.1346 ] Applet version 00.01.0000
[   1.2092 ] Saved platform info in /home/nvidia/work/NANO/eeprom_test_4.6/Linux_for_Tegra/bootloader/cvm.bin
[   1.2863 ] 
[   1.2903 ] tegrarcm --reboot recovery
[   1.2925 ] Applet version 00.01.0000
[   1.3686 ] 
Board ID(3448) version(400)

Upon hexdump for the cvm.bin file:

nvidia@nvidia-950XCJ-951XCJ-950XCR:~/work/NANO/eeprom_test_4.6/Linux_for_Tegra/bootloader$ hexdump cvm.bin 
0000000 0001 00fc 0d78 0002 4804 0000 0000 0000
0000010 0000 0000 3936 2d39 3331 3434 2d38 3030
0000020 3230 342d 3030 4820 302e 0000 0000 0000
0000030 0000 ffff ffff ffff ffff ffff ffff ffff
0000040 ffff ffff 4e2f 2d3e 48b0 3431 3132 3238
0000050 3031 3033 3831 0030 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0000090 0000 0000 0000 564e 4243 001c 314d 0000
00000a0 ffff ffff ffff ffff ffff ffff 4e2f 2d3e
00000b0 48b0 0000 0000 0000 0000 0000 0000 0000
00000c0 0000 0000 0000 0000 0000 0000 0000 0000
*
00000f0 0000 0000 0000 0000 0000 0000 0000 f400
0000100

Is the cvm.bin file associated with the EEPROM at address 0x51?

Hi,

Are you adding a carrier board eeprom? But fails to write the content?

Hello WayneWWW

Our boards is custom.
We added EEPROM to that board.
The address of the added EEPROM is 0x51.
Cannot write to the added EEPROM.

please refer to /hardware/nvidia/platform/t210/porg/kernel-dts/porg-plugin-manager/tegra210-porg-eeprom-manager.dtsi

Hello WayneWWW

I added 0x51 like this:

	eeprom-manager {
		data-size = <0x100>;
		bus@0 {
			i2c-bus = <&i2c1>;
			word-address-1-byte-slave-addresses = <0x50>;
		};
		bus@1 {
			i2c-bus = <&i2c3>;
			word-address-1-byte-slave-addresses = <0x50 0x51 0x57>;
		};
	};

Results are not written.

root@linux:/home/nvidia# i2cdetect -y 2
Warning: Can't use SMBus Quick Write command, will skip some addresses
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:
10:
20:
30: -- -- -- -- -- -- -- --
40:
50: 50 51 -- -- -- -- -- -- -- 59 -- -- -- -- -- --
60:
70:
root@linux:/home/nvidia#
root@linux:/home/nvidia# i2cdump -y 2 0x51
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: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
root@linux:/home/nvidia# i2cset -y 2 0x51 0x10 0x55
root@linux:/home/nvidia# i2cdump -y 2 0x51
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: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
20: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
30: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
40: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
50: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
60: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
70: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
80: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
90: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
a0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
b0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
c0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
d0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
e0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
f0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff    ................
root@linux:/home/nvidia#

tegra210-porg-eeprom-manager.dtsi file modification gone wrong?

Are you sure your hardware is correct?

I think there is no problem with the hardware.
Because 0x50 on the same I2C line is normal and
Because 0x51 is not allowed.

Sorry for the late response, have you managed to get issue resolved or still need the support? Thanks

The problem has not been resolved.
Is there any other way?
(How to install the EEPROM driver as an example)

Are you sure this " at24c256" driver is present? Please be aware that we don’t know much about your driver. You should know where to find it and how to check if it is running.

It exists in the following path.
./kernel-4.9/drivers/misc/eeprom/at24.c

I mean does this driver probe and init on your device?

Tested with the following content:

In your .dtsi edit, status = “okey” s/b 'status = “okay”. I suspect that’s keeping that i2c node from being enabled by the kernel/driver.

HTH,

Tom

1 Like

The result is the same.

	i2c@7000c500 {
		status = "okay";
		eeprom@51 {
			compatible = "at,24c256";
			reg = <0x51>;
			cape0_data: cape_data@0 {
				reg = <0 0x100>;
			};
		};
	};

a.dts (319.0 KB)