imx6ull适配vxworks的emmc驱动

项目场景:

imx6ull从emmc启动之后需要挂载驱动用于存储数据及文件系统


1.硬件设计

用uSDHC2

引脚配置

2.MMC初始化流程

详细学习了mmc的特性及初始化流程,网上有很多相关资料:

(1)mmc和SD卡最主要的区别在初始化cmd流程上;

(2)mmc卡内部集成了flash控制器,使用时不需要用户进行erase操作

 (3)如上图,只有发从CMD1才能使mmc到ready状态,检测不到busy信号就一直发CMD1

3.驱动修改调试

3.1 vxworks6.9自带FSL_SDHC驱动,基于这个进行修改,挂载device instances。

 3.2 创建SDMMC_BUS,并挂载mmcStorage

 

 以上fslSDHC设备主要完成初始化CMD0~2的过程,并对设备的热插拔进行检测,当然对于emmc设备来说,检测插拔的函数直接返回TRUE,monitor任务也没有必要。但是后续如果需要添加SD卡的驱动时,monitor任务还是需要的。mmcstorge完成CMD3之后包括读写在内的所有功能,创建XBD任务。

 3.3 修改的关键位置

调试过程卡住时间最长的地方就是到数据读取时候,初始化时候因为是1bit模式,用CMD线读取状态等操作很顺利,当到开始用data线4bits和8bits读取数据时调不通,原因在于DMA的配置。

(1)使能DMA中断

(2)DMA选择SDMA 

 

4.MMC分区切换

mmc内部有boot1、boot2及用户分区。boot1烧写了BootLoader,若要存参数到boot区,需要切换分区。

 (1)分区切换

由extCsd寄存器的第179号控制

 bit0~2控制当前分区,bit3~5是使能引导分区的。

(2)切换分区之后出现无法重新启动,主要问题是没有使能boot1引导位。但是这里出现的问题是第179号寄存器取值应该是mmc设备初始化时候已经读出来的,但是这个值是全0,很奇怪,所以导致用这个值或操作分区切换bit位再写入emmc,再次启动时没有引导使能所以起不来。

(3)添加nvRamToFlash.c文件

其中sysNvRamGet与sysNvRamSet函数用于bootline参数存储,偏移地址是0。但是没有生效,参数已经存储到boot2分区,但是启动时这些参数并没有读出来,后续再调试吧。

### 如何将 U-Boot 烧录到 i.MX 6ULLeMMC #### 准备工作 确保拥有正确的文件和工具。需要准备如下文件: - `u-boot-imx6ull14x14evk_emmc.imx`:这是带有 IVT 和 DCD 头部的 U-Boot 映像文件[^2]。 这些文件通常位于开发环境中的特定路径下,如 `Profiles\Linux\OS Firmware\firmware` 或者 `Profiles\Linux\OS Firmware\files` 目录中[^1]。 #### 使用 MfgTool 进行烧录 MfgTool 是一种用于批量生产和调试的工具,适用于多种 NXP 平台,包括 i.MX 6ULL。通过此工具可以简化固件更新流程。 当使用 MfgTool 来烧写 U-Boot 至 eMMC 时,操作分为两部分进行: - **第一阶段**: 加载初始引导加载程序 (即来自 firmware 文件夹内的 u-boot, kernel 及 dtb),并将它们临时存放在 DDR 内存里运行 Linux 启动过程[^3]。 - **第二阶段**: 当 Linux 成功启动之后,继续执行后续命令来把最终版本的 U-Boot (`u-boot-imx6ull14x14evk_emmc.imx`) 持久化保存至 eMMC 设备上。 具体步骤如下所示: 1. 打开 MfgTool 软件,并确认连接好目标硬件; 2. 在 MfgTool 中配置合适的脚本文件(例如 mfgtool2-yocto-mx-evk-emmc.vbs),这决定了哪些文件会被传输以及如何处理; 3. 开始前务必检查所有设置无误后再点击 "Start" 按钮发起烧写请求; 4. 工具会自动按照预定顺序依次完成上述提到的第一、二阶段的任务直至显示 Done 提示为止。 另外,在某些情况下也可以直接利用串口控制台手动输入命令来进行低级编程,比如采用 mmc write 命令将 U-Boot 数据流发送给指定地址范围内的 eMMC 存储单元[^4]: ```bash mmc write 80800000 2 2EE # 示例命令,需根据实际情况调整参数值 ``` 以上方法提供了两种不同的途径实现相同的目标——即将定制化的 U-Boot 安全可靠地安装到基于 i.MX 6ULL 架构的产品当中去。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值