以下内容已经在盈鹏飞嵌入式Iot-6ULX/EVB-6ULX验证通过平台,Iot-6ULX/EVB-6ULX介绍如下:
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.标准容量卡(SDSC):最大容量为128MB~2GB(默认格式为
2.高容量卡(SDHC):容量大小为4~32GB卡(默认格式为
3.扩展容量卡(SDXC):容量大小为64GB~2TB卡(默认格式为
TF为了区分不同的卡,卡通常用作外部扩展容量,所以不同用户使用的卡必须不同,SD3.在初始化和识别卡的过程中,0协议将判断用户插入的卡是SDSC/SDHC/SDXC哪种卡,比如在R3中的第38Bit的CCS = 0b时间表示插入的卡SDSC卡,而CCS = 1b时,插入的卡是SDHC或者SDXC卡。
如图1-3所示,四线总线速率模式:
说明:
1. 4 TF卡工作原理
1.4.1 EVB-P6UL TF卡硬件设计
EVB-P6UL的TF卡硬件设计兼容SD 3.0标准,即支持SDXC与SDHC,原理图1-3显示。
TF卡的默认工作电压为
2.1 tf卡及EMMC启动原理
I.MX6UL根据BOOT_MODE0和BOOT_MODE1不同的配置分为以下四种启动模式.
BOOT_MODE[1:0]寄存器的值为0b10时,选择为内部启动模式。在此模式下,处理器继续执行内部的启动代码。启动代码执行硬件初始化,从选择的启动设备中加载程序镜像,使用HAB执行镜像有效性检查,然后跳到程序镜像地址处。如果在内部启动中出项任何错误,启动代码就会跳到串行下载器。
内部启动模式一般只用于产品的开发阶段,因为此模式要占用大量的GPIO资源,而这些GPIO是EIM中关键的数据和地址控制线。在Fuses启动模式下,一旦这些eFuses被烧录,均不能被重擦修改,显而易见的是后者不利于开发中的摸索尝试(一旦出现错误,我们甚至要考虑更换CPU)。在开发阶段,我们使用跳线来配置efuses,然后我们调试测试,直至其稳定后,在最终的产品中,使用和跳线配置相对的eFuses值来烧录fuse,最终可将这些GPIO上的跳线去除,而用于一般用途。
该模式下,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所示:
而根据EVB-P6UL评估板原理图里面对BOOT的选择,只设置了几个信号来供用户进行配置选择,其他都已经被强制拉高或拉低,原理设计如图2-3所示。
因EVB-P6UL采取了internal boot mode,所以,这些配置的gpio起到了关键作用,直接决定了启动模式的选择,TF卡关于信号的配置(启动电阻)说明参考如图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卡启动呢?经过我们仔细查看相关手册,我们发现,在
要把板子跑起来,无非就是包括U-boot、dtb、Kernel和跟文件系统均写入正确,此次TF启动只修改U-boot和dtb的部分代码。
3.1 U-boot
u-boot如果要支持TF卡启动,则启用USDHC1,注释USDHC2。修改
然后,修改
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
>;
};
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所示的文件:
其中,
2、使用root用户(权限)执行制作脚本createSdcard.sh
$ sudosh createSdcard.sh
提示选择设备号时,根据实际情况输入“#”所在列的数值。若同时有多个TF卡,设备号与设备对应(name对应的列),制作TF卡时不建议同时插入多张卡。如图4-2所示。
提示重分区是,输入“y”。如图4-3所示。
当制作完成,显示如图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出现“
说明:由于启动设备优先级的原因,TF卡需在MfgTools连接成功后安装,否则出现MfgTools不连接的现象,如图4-6所示。若不了解接线以及拨码开关的使用,请参考产品开发光盘中《EVB-P6UL linux系统烧录手册》。
2、点击MfgTools的“start”按钮开始烧录,此时debug console(用超级终端、putty此类软件查看)打印Linux系统启动、烧录等信息。当弹出如图4-7的格式化对话窗时,cancel或关闭。
3、烧录完成,弹出图4-8窗口。
4、断电,拨码开关切换至“00”(Boot From Fuses),从TF卡引导Linux。
说明:关于i.MX6UL从TF卡引导的介绍,参考附录1。