软件支持:
要把板子跑起来,无非就是包括U-boot、dtb、Kernel和跟文件系统均写入正确,此次TF启动只修改U-boot和dtb的部分代码。
3.1 U-boot
u-boot如果要支持TF卡启动,则启用USDHC1,注释USDHC2。修改uboot-imx/include/configs/mx6ul_arm2.h,修改后如下图3-1。
图3-1
然后,修改uboot-imx/board/freescale/mx6ul_14x14_ddr3_arm2/mx6ul_14x14_ddr3_arm2.c将USDHC1设为高电平。如图3-2所示。
图3-2
3.2 内核
EVB-P6UL采用3.14.38版本的Linux内核,驱动描述使用dts。因存储媒质及应用接口不同,对应的dtb也不同,EVB-P6UL评估板主要有5路UART(双网络)和8路UART(单网络)两种,另外有使能CAMERA接口产品等,为了便于管理这些dtb文件,我们采用关键字区别法来区别。例如:“CSI”、“UART”、“RES”、“CAP”来判定应该烧写那个dtb,命名规则举例说明:
evbp6ul-m256f512-res-8uarts.dtb:
m256,即memory 256MB;f512,即Nand Flash 512MB;res,电阻式触摸屏;8uarts,8路UART(单网络)。
evbp6ul-m256s64-res-5uarts.dtb:
m256,即memory 256MB;s64表示QSPI Nor Flash为64M;res表示电容式触摸屏;5uarts表示5路UART(双网络)。
evbp6ul-m256e2g-cap-5uarts.dtb:
m256,即memory 256MB;e2g表示emmc Flash为2G;cap表示电容式触摸屏;5uarts表示5路UART(双网络)。
说明:选择正确的dtb才能使板子正常工作,具体可看/fsl-release-bsp/Makefile,然后选择对应的dtb编译。
确认dts中usdhc1(EVB-P6UL硬件设计usdhc1为TF卡)的驱动描述,如下图3-3、图3-4、图3-5所示
代码清单如下:
&usdhc1 {
pinctrl-names = “default”, “state_100mhz”, “state_200mhz”;
pinctrl-0 = <&pinctrl_usdhc1>;
pinctrl-1 = <&pinctrl_usdhc1_100mhz>;
pinctrl-2 = <&pinctrl_usdhc1_200mhz>;
cd-gpios = <&gpio1 19 0>;
keep-power-in-suspend;
enable-sdio-wakeup;
vmmc-supply = <®_sd1_vmmc>;
status = “okay”;
};
代码清单如下:
reg_sd1_vmmc: regulator@1 {
compatible = “regulator-fixed”;
regulator-name = “VSD_3V3”;
regulator-min-microvolt = <3300000>;
regulator-max-microvolt = <3300000>;
gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>;
enable-active-high;
代码清单如下:
pinctrl_usdhc1: usdhc1grp {
fsl,pins = <
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x17059
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x10071
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x17059
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x17059
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x17059
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x17059
;pinctrl_usdhc1_100mhz: usdhc1grp100mhz {
fsl,pins = <
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170b9
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100b9
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170b9
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170b9
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170b9
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170b9
;
};
pinctrl_usdhc1_200mhz: usdhc1grp200mhz {
fsl,pins = <
MX6UL_PAD_SD1_CMD__USDHC1_CMD 0x170f9
MX6UL_PAD_SD1_CLK__USDHC1_CLK 0x100f9
MX6UL_PAD_SD1_DATA0__USDHC1_DATA0 0x170f9
MX6UL_PAD_SD1_DATA1__USDHC1_DATA1 0x170f9
MX6UL_PAD_SD1_DATA2__USDHC1_DATA2 0x170f9
MX6UL_PAD_SD1_DATA3__USDHC1_DATA3 0x170f9