本人jetson nano版本:p3448-0002(淘宝某店的4g版本,不带emmc)
本人在测试i2c功能时不慎用i2cset修改了i2c总线2里面的0x50的数据。
导致不管是:

  • 重新刷sd卡
  • 更换jetpack版本
  • 使用sdk manager刷机//会显示Parsing board information failed.
    都没有效果。
    上各大论坛查阅资料最终得到的结果是:i2c-bus2里面的0x50地址存储着jetson的板子信息
    根据官方文档解释如下:
    图1

    图2

    根据图1可以知道各个地址存放的是ASCII码,里面是jetson的板子数据。
    重点看图2,在第0XFF地址里面,存放的是对前254个地址进行crc计算的结果,也就是说如果:
    你修改了0x50里面的任意一个字节,都会导致最后一个校验码计算出来对不上,导致无法开机
    那么现在我们知道了原因,就可以对0x50里面的地址进行操作了,如下:

解决办法

用肉眼观察法看板子反面的接口,可以看到有TXD、RXD、GND,把他们通过TTL连接到电脑(TXD-RXD、RXD-TXD、GND-GND),然后使用Xshell/putty通过串口方式连接,在串口信息中可以看到

eMMC文件系统损坏原因 emmc坏了就开不开机了_神经网络


如图差不多的有关uboot的信息,如果你看见Press any key等字眼,请立刻在串口界面按任意按键,进入Uboot模式。

接着在Uboot里面按照我这样输入:

i2c dev 3 //设置总线
i2c md 0x50 0x00 0x100 //打印0x50里面的信息

eMMC文件系统损坏原因 emmc坏了就开不开机了_eMMC文件系统损坏原因_02


经过上面两段代码,可以得出类似于上图一样的256个地址,我们观察0xff(也就是右下角的a4)

这就是官方文档里面的最后一个验证字节,接下来我们有两种方法修复机器的错误:

  • 1、
    如果你有记下你之前0x50地址里面的所有正确数据,那么你只要使用:
i2c mw 0x50 0xff 0xa4 //0xff是你需要修改的地方,0xa4是替换的值

把正确的数值改回来即可

  • 2、
    如果你已经忘记了自己向前的数值是多少,可以进入https://github.com/plan1230/jetson_nano_crc8 这个项目有现成的jetson crc8计算代码,把你的数据代进去即可得出校验值。
    或者

    和笨笨的我一样,首先下载sdk manager(https://developer.nvidia.com/nvidia-sdk-manager),上面有linux的deb包,使用apt即可安装,然后在应用里面即可打开。
    登录nvidia账号后,在主界面选择好你的jetson版本,不用选择host machine,然后按着提示一直下一步。
    直到下载好之后,我们首先连接jetson nano,由于此时机器不断重启,我们需要进入rec模式,还是一样用肉眼观察法,把板子翻过来在背面看到FC REC字样,把这个引脚和旁边的GND用杜邦线连接起来,然后先用microusb把板子和电脑连接,再插上DC供电,然后你就会发现多了一个NVIDIA APX的设备(虚拟机在可移动设备里面,选择连接即可),最后在SDK manager里面选择manual方式刷机,点进去terminal界面你会发现出现如下错误:
  • eMMC文件系统损坏原因 emmc坏了就开不开机了_数据_03

  • 这样你就获取到了sdk manager帮你计算出来的正确校验值,如图是0xa4。
    记好你的正确值,按照 上面第一点进入uboot修改你的0xff地址里面的值即可。

修改完后如果你再把好的sd卡插进jetson nano里面,你会发现还是无限重启/黑屏,这是因为你还没有使用sdk manager刷机,这里建议再次在sdkmanager刷机一次,即可成功进入系统。

eMMC文件系统损坏原因 emmc坏了就开不开机了_eMMC文件系统损坏原因_04


但是在刷机过程中我发现出现如上错误,可能和我板子型号 和刷的型号不匹配,我的刷的是3448-0000的版本,但是影响不大,机器以及可以正常开机使用了,也在这里劝诫各位,在使用昂贵(升价如流水)机器的时候,对地址的修改要非常谨慎,不要一失足成千古恨(像我一样),在这里也非常感谢nvidia论坛的shinichiro.adachi大佬提供的uboot修改i2c方法,才能使我这个菜鸟救回价值不菲的jetson nano!