I.MX6UL核心模块tf卡启动linux的实现

1 TF卡启动Linux的原理  1.1 TF卡简介TF卡又称T-Flash卡。全名:【TransFLash】又名【Micro SD】,由摩托罗拉与SANDISK共同研发,在2004年推出。是一种超小型卡(11*15*1MM),约为SD卡的1/4,可以算目前最小的储存卡了。MicroSD 卡是一种极细小的快闪存储器卡,其格式源自SanDisk创造,原本这种记忆卡称为 T-Flash,及后改称为TransFlash;而重新命名为microSD的原因是因为被SD协会(SDA)采立。其主要应用于移动电话,但因它的体积微小和储存容量的不断提升,现在已经使用于GPS设备、便携式音乐播放器和一些快闪存储器盘中。 它的体积为 1mm x 15mm x1mm ,差不多相等于手指甲的大小,是现时最细小的记忆卡。它也能通过SD转接卡来接驳于SD卡插槽中使用。1.2 高速卡和低速卡TF卡又分为高速卡和低速卡,TF高速卡和低速卡的区分方法:主要靠TF卡上的速度等级标志来识别,TF卡符合的SD规范标准越高,速度分级等级越高,则读写速度越快。如图1-1, 注意看他右上角的圆圈里的 4  说明这是普速卡,一般传文件速度在每秒8MB以下,反应比较慢,传文件更慢,如图1-1,就是高速卡,注意看他的右边的圆圈的10,说明是高速卡一般速度在10MB 以上每秒。


1.3 TF卡特性卡容量:1.标准容量卡(SDSC):最大容量为128MB~2GB(默认格式为FAT16)2.高容量卡(SDHC):容量大小为4~32GB的卡(默认格式为FAT32)3.扩展容量卡(SDXC):容量大小为64GB~2TB的卡(默认格式为exFAT)TF卡一般作为外置扩展容量,那么不同用户用的卡肯定不一样,那为了区分不同的卡,SD3.0协议中在初始化和识别卡的过程中会判断用户插入的卡是SDSC/SDHC/SDXC中的哪一种卡,比如在R3中的第38Bit的CCS = 0b时,表示插入的卡为SDSC卡,而CCS = 1b时,表示插入的卡为SDHC或者SDXC卡。四线总线速率模式,如图1-3所示:


图1-3 SD卡速率模式

说明:

SDR的意思是Single Data Rate(单边数据采样,换句话说就是,要么上升沿采样,要么下降沿采样);DDR的意思是Double Data Rate(双边数据采样,换句话说,双边沿采样)。

1.4 TF卡工作原理

1.4.1 EVB-P6UL TF卡硬件设计

EVB-P6UL的TF卡硬件设计兼容SD 3.0标准,即支持SDXC与SDHC,原理图1-3所示。


图1-3 EVB-P6UL TF卡原理设计

TF卡的默认工作电压为3.3V,通过设置IO脚“SD1_VSELECT”的电平(控制2KS3018是否导通改变FB脚的电阻阻值),从而设置RT9043GB的反馈电压,最终调节输出电压(RT9043GBVout)。RT9043GB的输出电压与FB脚上电阻有关,相关的计算公式如图1-4所示。电阻已经选定,设置“SD1_VSELECT”为高电平即可输出1.8V。


图1-4RT9043GB电压计算公式

2 tf卡及EMMC启动

2.1 tf卡及EMMC启动原理

I.MX6UL根据BOOT_MODE0和BOOT_MODE1配置不同,分为如下四种启动方式.


图2-0 TF卡启动GPIO配置

 Fuses启动模式 (BOOT_MODE[1:0] = 00b)

当BOOT_MODE[1:0]寄存器为00b是,选择为从Fuses模式下启动。该模式和内部启动模式很相似,只是有一点不同:在此模式下,GPIO启动(internal boot 内部启动)重载引脚会被忽略。

内部启动模式 (BOOT_MODE[1:0] = 0b10)

BOOT_MODE[1:0]寄存器的值为0b10时,选择为内部启动模式。在此模式下,处理器继续执行内部的启动代码。启动代码执行硬件初始化,从选择的启动设备中加载程序镜像,使用HAB执行镜像有效性检查,然后跳到程序镜像地址处。如果在内部启动中出项任何错误,启动代码就会跳到串行下载器。

内部启动模式一般只用于产品的开发阶段,因为此模式要占用大量的GPIO资源,而这些GPIO是EIM中关键的数据和地址控制线。在Fuses启动模式下,一旦这些eFuses被烧录,均不能被重擦修改,显而易见的是后者不利于开发中的摸索尝试(一旦出现错误,我们甚至要考虑更换CPU)。在开发阶段,我们使用跳线来配置efuses,然后我们调试测试,直至其稳定后,在最终的产品中,使用和跳线配置相对的eFuses值来烧录fuse,最终可将这些GPIO上的跳线去除,而用于一般用途。


下载模式 (BOOT_MODE[1:0] = 0b01)

该模式下,i.mx6ul处于下载模式,可以通过mfgtools工具对i.mx6ul的存储媒质进行烧写.

EVB-P6UL支持4种存储媒质的启动,分别是SD/TF卡启动、NAND启动、eMMC启动和QSPI启动(分为不同的四类产品,根据客户选择核心模块的不同),通过对BT_CFG1、BT_CFG2和BT_CFG4三组信号来配合设置来改变启动媒质,除了BT_CFG4之外,其他两组信号BT_CFG1和BT_CFG2直接影响启动模式选择(BT_CFG1+BT_CFG2+BT_CFG4等于24位LCD信号),整个启动配置如下图2-1、图2-2所示:


图2-1 TF卡启动GPIO配置


图2-2 TF卡启动GPIO配置

而根据EVB-P6UL评估板原理图里面对BOOT的选择,只设置了几个信号来供用户进行配置选择,其他都已经被强制拉高或拉低,原理设计如图2-3所示。


图2-3 EVB-P6UL 启动GPIO配置

 因EVB-P6UL采取了internal boot mode,所以,这些配置的gpio起到了关键作用,直接决定了启动模式的选择,TF卡关于信号的配置(启动电阻)说明参考如图2-4、图2-5所示:


图2-4


图2-5

说明:目前只操作了普速卡。如若把BOOT_DFG2[1]设为1,GPIO_IO5设为1,VDD_SD1输出3.3V,板子可以正常启动。

缺陷:当操作高速卡时,即把BOOT_DFG2[1]设为1,GPIO1_IO5为0,VDD-SD1输出为1.8V,终端会打印信息提示提供电压不足,详见附录2。

2.1 tf卡启动原理及实现

我们刚刚交代了tf卡(接到端口uSDHC1)和emmc(接到端口uSDHC2)启动的原理,为了更改为TF卡启动,我们必须去更改配置电阻,那么是否有更好的办法实现TF卡启动呢?经过我们仔细查看相关手册,我们发现,在Fuses启动(BOOT_MODE[1:0] = 00b)这个模式下,默认的启动就是从uSDHC1启动:


3软件支持

要把板子跑起来,无非就是包括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所示。


图3-3

代码清单如下:

&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";

};


图3-4

代码清单如下:

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;

};


图3-5

代码清单如下:

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

>;

};

4 TF卡启动Linux

EVB-P6UL可选用MfgTools或Linux主机(PC,x86平台)烧录TF卡。Linux内核镜像包括u-boot、zImage、DTB和根文件系统。u-boot裸写到TF卡,zImage与DTB存储到u-boot之后的FAT分区,根文件系统存储到内核分区之后的ext3/ext4分区。

以下两节,将分别介绍Linux主机和MFGTools制作TF。

4.1Linux主机制作TF卡

Linux主机制作TF卡,使用脚本完成。步骤如下:

1、将p6ultfboot.tar.bz2复制到Linux主机,并解压,指令如下

$tar -jxf p6ultfboot.tar.bz2

解压后得到图4-1所示的文件:


图4-1

其中,mksdcard.sh为制作TF卡的脚本文件;rootfs-p6ul-mmc.tar为根文件系统,该文件根据需要替换,文件名为格式rootfs*.tar;sdboot目录下的u-boot.imxzImageevbp6ul.dtb分别为u-boot、内核镜像和dtb文件。

2、使用root用户(权限)执行制作脚本createSdcard.sh

$ sudosh createSdcard.sh

提示选择设备号时,根据实际情况输入“#”所在列的数值。若同时有多个TF卡,设备号与设备对应(name对应的列),制作TF卡时不建议同时插入多张卡。如图4-2所示。


图4-2

 提示重分区是,输入“y”。如图4-3所示。


图4-3

 当制作完成,显示如图4-4所示信息。


图4-4

说明:除了图4-4所提示的信息,还应查看脚本执行的所有信息是否有错误提示。

4.2 MfgTools烧录TF卡

使用MfgTools制作TF启动卡的步骤如下:

MfgTools的烧录脚本分为QT与无QT两种,分别如下:

mfgtool2-linux-mx6ul-console-sd (无QT)

mfgtool2-linux-mx6ul-qt4-sd (QT4.8)

1、拨码开关SW5切换至下载模式(Serial Downloader),连接电源、debug console、USB device接口(CN11)。上电,运行烧录脚本(例如,mfgtool2-linux-mx6ul-console-sd),当USB device连接成功后插入TF卡,USB device与PC连接成功,MfgTools出现“HID-compliant device”,如图4-5所示。


图4-5

说明:由于启动设备优先级的原因,TF卡需在MfgTools连接成功后安装,否则出现MfgTools不连接的现象,如图4-6所示。若不了解接线以及拨码开关的使用,请参考产品开发光盘中《EVB-P6UL linux系统烧录手册》。


图4-6

 2、点击MfgTools的“start”按钮开始烧录,此时debug console(用超级终端、putty此类软件查看)打印Linux系统启动、烧录等信息。当弹出如图4-7的格式化对话窗时,cancel或关闭。


图4-7

3、烧录完成,弹出图4-8窗口。


图4-8

4、断电,拨码开关切换至“00”(Boot From Fuses),从TF卡引导Linux。

说明:关于i.MX6UL从TF卡引导的介绍,参考附录1。

你可能感兴趣的:(I.MX6UL核心模块tf卡启动linux的实现)