一、问题:无法识别SD或初始化报错
正常启动过程(我这里安装了WK驱动和ads 驱动,未安装设备没有):

异常过程:SD卡初始化报错,或无法识别SD卡

二、解决方法
2.1,无设备解决方法
1,安装安装dtc软件
sudo apt-get install device-tree-compiler
2,进入HW Imager内核路径下,反编译dts源文件 (针对不同jetpack,修改对应路径)
$ cd Linux_for_Tegra/kernel/dtb/
$ sudo dtc -I dtb -O dts -o tegra210-p3448-0002-p3449-0000-b00.dts tegra210-p3448-0002-p3449-0000-b00.dtb
3,修改设备树
sudo vim tegra210-p3448-0002-p3449-0000-b00.dts
4,找到sdhci@700b0400部分,将status = "disable"改成okay,下面添加如下信息:
cd-gpios = <0x5b 0xc2 0x0>;
sd-uhs-sdr104;
sd-uhs-sdr50;
sd-uhs-sdr25;
sd-uhs-sdr12;
no-mmc;
uhs-mask = <0xc>;


5,编译dtb文件
sudo dtc -I dts -O dtb -o tegra210-p3448-0002-p3449-0000-b00.dtb tegra210-p3448-0002-p3449-0000-b00.dts
6,烧录系统,Jetson Nano 需进入recovery模式,连接到Ubuntu电脑。
cd ~/nano/Linux_for_Tegra/
sudo ./flash.sh jetson-nano-emmc mmcblk0p1
7,Jetson Nano开机,检查SD卡是否被识别:
sudo ls /dev/mmcblk*
如果有识别到mmcblk1p1 设备,说明SD卡被正常识别了。
关于上述驱动修改解释:
1. cd-gpios = <0x5b 0xc2 0x0>;
- 含义:指定SD卡的Card Detect (CD) 引脚的GPIO配置,用于检测SD卡是否插入。
0x5b:GPIO控制器的句柄(phandle),在设备树中指向具体的GPIO控制器节点。0xc2:GPIO引脚在控制器中的偏移量。0x0:标志位,表示电平有效状态。
- 作用:驱动通过此配置读取CD引脚状态,判断SD卡是否插入。例如,低电平可能表示卡已插入。
2. UHS模式配置 (sd-uhs-sdr104;, sd-uhs-sdr50; 等)
- 含义:启用SD卡的Ultra High Speed (UHS) 传输模式,支持更高带宽:
sd-uhs-sdr104:最高支持208 MHz时钟频率,理论速率104 MB/s。sd-uhs-sdr50:支持100 MHz时钟,速率约50 MB/s。sd-uhs-sdr25:支持50 MHz时钟,速率约25 MB/s。sd-uhs-sdr12:支持25 MHz时钟,速率约12.5 MB/s。
- 作用:声明控制器支持的UHS模式,系统会根据SD卡能力自动协商最佳模式。
3. no-mmc;
- 含义:明确禁用MMC卡支持(如eMMC存储),仅启用SD卡功能。
- 作用:简化驱动逻辑,避免MMC与SD协议冲突,确保资源专用于SD卡操作。
4. uhs-mask = <0xc>;
- 含义:UHS模式的位掩码配置,用于屏蔽(禁用)特定UHS模式。
0xc(十六进制)对应二进制1100,表示:- 第3位(值8):可能屏蔽SDR104模式。
- 第2位(值4):可能屏蔽SDR50模式。
- 保留SDR25和SDR12模式(位1和位0为0)。
- 作用:硬件或电源限制时,主动禁用高功耗模式(如SDR104需1.8V电压),确保稳定性。
2.2,初始化报错
更换64G以下SD卡,或使用其他厂商SD卡,笔者采用闪迪128G超高速SD卡,上述错误不再报。
尝试过128G class10 的 HIKVISION,EZVIZ 这两款均不行(跟供应商底板相关)。
1848

被折叠的 条评论
为什么被折叠?



