飞凌嵌入式ElfBoard ELF1板卡-开发板适配之uSDHC
其他
 
706 人阅读
|
0 人回复
|
2025-02-24 
 
 
 
 
| 
 | 
 
 
i.MX6ULL的uSDHC(Ultra Secured Digital Host Controller)是连接系统和SD/SDIO/MMC设备的一种接口。i.MX6ULL有两路uSDHC接口,ELF 1开发板将这两路接口分别用于连接TF卡和eMMC设备,这跟NXP i.MX6ULL EVK板的方案一致。 
查看原理 
 
 
 
TF卡使用的是第一路uSDHC,对应的引脚:SD1_CLK、SD1_CMD、SD1_DATA0、SD1_DATA1、SD1_DATA2、SD1_DATA3,以及卡检测引脚SD1_CD(GPIO1_IO19,PAD NAME为UART1_RTS_B),通过卡检测引脚检测TF卡是否插入或者拔出。 
IOMUX配置 
在设备树中arch/arm/boot/dts/imx6ull-elf1-emmc.dts中iomuxc节点下已经存在对于这些引脚的配置: 
 
我们看到有三种不同的pinctrl_usdhc1配置,pinctrl_usdhc1、pinctrl_usdhc1_100mhz、pinctrl_usdhc1_200mhz,表示TF卡设置为不同的速率,就使用不同的配置,观察各组配置,可以发现其区别在于配置的IOMXC_SW_PAD_CTRL寄存器的值不同,不同的速率下使用的引脚电气参数要求不同,如引脚驱动能力、翻转速率等。ELF 1开发板目前不能支持高速模式,所以实际没有使用pinctrl_usdhc1_100mhz和pinctrl_usdhc1_200mhz的相关IOMUX配置。 
SD1_CD(GPIO1_IO19)卡检测引脚的配置: 
 
其中SD1 VSELECT引脚是电压选择引脚(TF卡在高速模式下,需要切换电压到1.8v,我们的方案不支持高速模式),SD1 RESET是TF卡复位引脚,这两个引脚都没有用到,注释掉。 
设备节点 
设备树中已经存在usdhc1节点: 
 
pinctrl-names属性值有三个字符串,"default", "state_100mhz", "state_200mhz",分别表示TF卡工作在不同速率下的引脚配置状态,对应三种不同的pinctrl配置:pinctrl-0、pinctrl-1、pinctrl-2。 
cd-gpios = <&gpio1 19 GPIO_ACTIVE_LOW>,指定卡检测引脚。 
no-1-8-v;属性是我们新加的一个属性,表示不支持TF卡工作在1.8v的高速模式。 
keep-power-in-suspend;表示在待机状态下,不关闭电源。 
enable-sdio-wakeup; 使能SDIO中断发生时允许唤醒主机系统的功能,这里也注释掉。 
vmmc-supply = <®_sd1_vmmc>;指向reg_sd1_vmmc子节点regulator,regulator(regulator是自动调节器的意思)主要用于模块的电源管理。 
 
regulator-name属性表示了电压调节器服务的对象; 
regulator-min-microvolt:可以设置的最小电压; 
regulator-max-microvolt:可以设置的最大电压; 
gpio属性和enable-active-high是复位引脚相关,注释。 
编译测试 
编译内核和设备树并拷贝到开发板: 
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ ./build.sh 
elf@ubuntu:~/work/linux-imx-imx_4.1.15_2.0.0_ga$ scp arch/arm/boot/dts/imx6ull-elf\1-emmc.dtb root@172.16.0.175:/run/media/mmcblk1p1/ 
进行sync操作后重启开发板: 
 
内核启动之后,将TF卡插入卡槽(系统支持热插拔),会在/dev/下会产生mmcblk0和mmcblk0p1节点: 
 
系统会自动将mmcblk0p1挂载到/run/media /mmcblk0p1目录下。查看TF卡中的文件,命令如下: 
root@ELF1:~# ls -l /run/media/mmcblk0p1 
 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |