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 ![]() |
641 浏览 0 评论
1134 浏览 1 评论
1259 浏览 0 评论
1277 浏览 1 评论
esp8266作为tcp客户端,服务器主动断开连接后,是会主动重连吗,如何设置不要主动重连呢
1922 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
12821 浏览 31 评论