Jetson Nano Programming Stops

Hi,
We have a custom carrier board for the Jetson Nano (eMMC) and try to program it via µUSB. During flashing the device suddenly stops and we do not know the reason for this. We see two different problems un-deterministically.

In the first case, we see that the Nano finds some strange device / board information:

Enabled early print
[L4T TegraBoot] (version 00.00.2018.01-l4t-32cd7ad9)
Processing in recovery mode
A02 Bootrom Patch rev = 1023
Power-up reason: pmc por
Established communication link with host
Odmdata from BCT: 0x00094000
DebugPort= 0x3
BoardId read from EEPROM/NCT: 65535
Unsupported Platform 65535
Downloaded BCT successfully

I guess the Nano tries to load some information from some EEPROM(s) and just sees a lot of 0xff on the bus. Can you clarify which I2C EEPROMs TegraBoot expects and on which I2C busses it tries to gets the data?
We have an EEPROM on i2c1: i2c@7000c000 with address 0x50. Can this be an issue?

The second case:

Enabled early print
[L4T TegraBoot] (version 00.00.2018.01-l4t-32cd7ad9)
Processing in recovery mode
A02 Bootrom Patch rev = 1023
Power-up reason: pmc por
Established communication link with host
NvTbootI2cClearBus(): error code 0x00045004 Invalid register value in bus clear status register
NvTbootI2cDeviceRead(): error code 0x00045004 I2c Open Failed
NvTbootI2c: Read failed for slave 0xac, offset 0x00 with error code 0x00045004
Odmdata from BCT: 0x00094000
DebugPort= 0x3
NvTbootI2cWaitForTransferComplete(): error code 0x00000005 I2C Transaction could not complete within time
NvTbootI2cWaitForTransferComplete(): error code 0x00000005 I2C Transaction could not complete within time
NvTbootI2cWrite(): error code 0x00000005 Error while starting write transaction
NvTbootI2cDeviceRead(): error code 0x00045001 Error while sending the offset to slave
NvTbootI2c: Read failed for slave 0xac, offset 0x00 with error code 0x00045001
Reading Board-Type unsuccessful
BoardId read from EEPROM/NCT: 0
Unsupported Platform 0
Downloaded BCT successfully

Here we see that some I2C communication fails and in turn it outputs 0 instead of 65535.

On the host side we see the same outputs in both cases:

[   0.3713 ] Sending bootloader and pre-requisite binaries
[   0.3725 ] tegrarcm --download ebt cboot.bin.encrypt 0 0 --download rp1 tegra210-<CUSTOM>-rev0.dtb.encrypt 0
[   0.3736 ] Applet version 00.01.0000
[   0.3755 ] Sending ebt
[   0.4404 ]
Error: Return value 1
Command tegrarcm --download ebt cboot.bin.encrypt 0 0 --download rp1
tegra210-<CUSTOM>-rev0.dtb.encrypt 0

The full logs are attached: 20201203_flash-output.log (7.4 KB)

Can you please guide us some way to understand the issue?

mostly the i2c you have in your custom board is making the i2c lines is a bad state.
check this node in kernel dts, these i2c are checked by bootloader for eeprom
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 0x57>;
};
};

Thanks for the fast response! We removed the EEPROM and are able to program and boot.

Can you guide me to some documentation about the assumed constraints / boundary conditions of the bootloader?
Could we change the behavior of TegraBoot to be able to use the address 0x50 for other I2C devices? Could we change it by modifying the eeprom-manager section in device tree? Is there more documentation about the meaning of the eeprom-manager section?

you can just change the address of your slave device, that should be enough.
the 0x50 eeprom is on cvm and it is used to find the board version of the nano cvm board. you should not avoid it.
though by updating the dts you can change the behaviour
you can check here Welcome — Jetson Linux<br/>Developer Guide 34.1 documentation
Jetson Download Center | NVIDIA Developer