飞凌嵌入式ElfBoard ELF1板卡-开发板适配之uSDHC
其他
711 人阅读
|
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
|
|
|
|
|
|
|
|
|