jetson nano 无法启动排查实录:使用i2c误写 EEPROM (地址 0x50)引发的修复经历
1、背景
-
我的设备:Jetson Nano B01(板载 eMMC)
-
背景:在调试 PCA9685 时,使用 i2cset / i2cget 命令向 0x50 地址写入了错误数据
-
故障现象:Jetson 无法开机,串口无任何输出,无法刷机
2、问题分析
-
EEPROM 地址 0x50 是板载模块 EEPROM,保存启动识别信息(Board ID, SKU, CRC)
-
Jetson 启动前,CBoot 会检查 EEPROM 信息:
Nano-SD: checking PT table on QSPI … PT: Partition DTB NOT found ! -
回忆误操作命令:
i2cset -y 2 0x50 0x00 0x11 (把 0x00 改成了错误值)
3、修复过程
参考英伟达论坛的帖子[1],先下载 Jetpack_4.2 (对应BSP版本号:Tegra210_Linux_R32.3.1_aarch64.tbz2),然后做解压构建操作,以及一些配置如下(来自文献 [1]):
Step 1: uncompress Tegra210_Linux_R32.3.1_aarch64.tbz2Step 2: uncompress Tegra_Linux_Sample-Root-Filesystem_R32.3.1_aarch64.tbz2Step 3: run “sudo ./apply_binaries.sh”Step 4: add BCFFILE to [p3448-0000.conf.common][Linux_for_Tegra/p3448-0000.conf.common]
…
BCT="–bct ";
VERFILENAME=“qspi_bootblob_ver.txt”;
+BCFFILE=“bootloader/${target_board}/cfg/board_config_p3448.xml”;Step 5: add some BOARDINFO to [p3448-0000-emmc.conf][Linux_for_Tegra/p3448-0000-emmc.conf]
…
+BOARDID=“3448”;
+FAB=“400”;
+BOARDSKU=“0002” ;
+BOARDREV=“70”;EMMC_CFG=flash_l4t_t210_emmc_p3448.xml;
BLBlockSize=1048576;
source “${LDK_DIR}/p3448-0000.conf.common”;
T21BINARGS="–bins "EBT cboot.bin; "
CMDLINE_ADD=“console=ttyS0,115200n8 console=tty0 fbcon=map:0 net.ifnames=0 sdhci_tegra.en_boot_part_access=1”;ROOTFSSIZE=14GiB;
VERFILENAME=“emmc_bootblob_ver.txt”;Step 6: set Nano to RCMStep 7: use command “sudo ./flash.sh jetson-nano-emmc mmcblk0p1” to flash
烧写完毕后,拔掉RCM跳线,重新上电(此时板子可以进入u-boot);接着快速按Enter
键,进入 u-boot
,执行下面命令从而改回0x50的地址内容,
i2c dev 3 //设置i2c总线为 i2c-2
i2c mw 0x50 0x00 0x01 1 //写地址信息
最后,输入boot命令,即可看到系统可以正常进入内核了
参考文献:
[1] https://forums.developer.nvidia.com/t/after-i2cset-test-nano-cant-boot-in-emmc-boot-evironment/126687/24