扩展外部eMMC存储

By Toradex胡珊逢

简介

存储器的嵌入式设备中扮演着重要角色,上面不仅安装有操作系统,同时也保存着应用程序和运行日志等。对于存储器如 eMMC,写入的数据量决定其使用寿命,对于有大量日志记录的应用,通常可以选用一个大容量的存储设备。文件将介绍如何在 Toradex 的计算机模块 Apalis iMX6 上扩展一个外部 eMMC。

Apalis iMX6 具有四个 SDIO 接口,其中一个已经用于模块本身的 eMMC。其余三个均可以用于连接另外的 eMMC。为了提高读写速度,SDIO 接口可配置为 8bit 模式。

扩展外部eMMC存储315.png

eMMC 模块硬件连接

eMMC 内部有一个控制器,负责执行来自 host 的 MMC 指令、将数据写入到存储单元、维护映射关系确保每个存储单元可以均衡得写入等。该控制器通常需要两路电压。如下图的 VCCQ 用于驱动控制器本身,该电压也用于面向 host 的 SDIO 接口,因此需要于 host 端的 SDIO 电平一致。Apalis iMX6 的 SDIO 为 3.3V,Toradex 另外一个系列 Verdin 模块的接口则为 1.8V。目前绝大多数的 eMMC 都可以支持 1.8V 和 3.3V 两种电压。图中另外一个电源 VCC 用于存储单元 NAND 的供电。

扩展外部eMMC存储606.png

在 Apalis Evalution Board 上 Apalis iMX6 的其中一路 SDIO 通过 X5 排针座引出。由于 eMMC 通常不需要热拔插,所以 SDIO 接口的 CD 引脚就不需要再被使用。

扩展外部eMMC存储716.png

我们选取市场上常见的 eMMC 模块,制作适合 Apalis Evalution Board 的转接板。在实际应用中,可以把 eMMC 芯片直接焊接在定制的底板上,以增加牢固性和稳定性。

扩展外部eMMC存储813.png

下面是 eMMC 模块转接板原理图。其中 U1 是 eMMC 模块底部的 B2B 链接器,上面的引脚都直接来自 eMMC 芯片。其中使用到了 CMD、CLK、DATA0~7。由于 Apalis iMX6 的 SDIO 为 3.3V,所以 eMMC 模块的两路电源均使用 3.3V。iMX6 SoC 只有其中的两路 SDIO 才有 Reset 引脚,其中一路已经用于模块自身的 eMMC,另一路的 SD4_RESET 没有引出到模块的金手指上。这对于扩展的 eMMC 来说将失去硬件复位功能,只能采用断电复位 eMMC。图中 H1 是 2.54mm 排针,可以直接连接 Apalis Evalution Board。另外,对于 CMD、CLK、DATA0~7 信号在设计底板时务必使用等长布线。

扩展外部eMMC存储1163.png

将转接板插入到 Apalis Evalution Board 的 X5,并提供 3.3V 供电。

扩展外部eMMC存储1216.png

Device tree 修改

软件方面采用 Linux BSP v3,对应内核为 toradex_4.14-2.3.x-imx分支。对 eMMC 的配置较为简单,在 device tree 中完成即可。

修改 `imx6q-apalis-eval.dts` 中的 usdhc1 节点,删除原来的 CD 引脚。

diff --git a/arch/arm/boot/dts/imx6q-apalis-eval.dts \

b/arch/arm/boot/dts/imx6q-apalis-eval.dts

index 70be137c1f8b..6accb3611bcf 100644

--- a/arch/arm/boot/dts/imx6q-apalis-eval.dts

+++ b/arch/arm/boot/dts/imx6q-apalis-eval.dts

@@ -468,9 +468,9 @@

/* MMC1 */

&usdhc1 {

- pinctrl-names = "default";

- pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_usdhc1_8bit &pinctrl_mmc_cd>;

- cd-gpios = <&gpio4 20 GPIO_ACTIVE_LOW>;

+ /*pinctrl-names = "default";*/

+ /*pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_usdhc1_8bit &pinctrl_mmc_cd>;*/

+ /*cd-gpios = <&gpio4 20 GPIO_ACTIVE_LOW>;*/

status = "okay";

};

修改 `imx6qdl-apalis.dtsi` 中 usdhc1 引脚配置,添加 non-removable 属性。这里限制了 SDIO 的最高频率为 20MHz。原因是在测试中发现通过转接板方式连接 eMMC 模块,当 SDIO 使用高频率时钟通信时容易引起发 MMC 相关错误。如果在定制底板上直接放置 eMMC 芯片并合理布线,则不会存在该问题。

diff --git a/arch/arm/boot/dts/imx6qdl-apalis.dtsi \

b/arch/arm/boot/dts/imx6qdl-apalis.dtsi

index e18ac19dd3bf..5622d1aadb88 100644

--- a/arch/arm/boot/dts/imx6qdl-apalis.dtsi

+++ b/arch/arm/boot/dts/imx6qdl-apalis.dtsi

@@ -910,11 +910,14 @@

/* MMC1 */

&usdhc1 {

pinctrl-names = "default";

- pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_usdhc1_8bit>;

+ pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_usdhc1_8bit>; /* 8bit */

vqmmc-supply = <®_module_3v3>;

+ max-frequency =<20000000>;

bus-width = <8>;

- disable-wp;

+ /*disable-wp;*/

no-1-8-v;

+ mmc-ddr-3_3v;

+ non-removable;

status = "disabled";

};

eMMC 测试

重新启动后查看日志中 mmc0 相关信息,mmc0 控制器上时别到外部扩展的 eMMC 模块。

root@apalis-imx6:~# dmesg|grep mmc0

[ 2.823135] mmc0: SDHCI controller on 2190000.usdhc [2190000.usdhc] using ADMA

[ 2.951996] mmc0: new DDR MMC card at address 0001

[ 2.962770] mmcblk0: mmc0:0001 58A43A 14.6 GiB

[ 2.975332] mmcblk0boot0: mmc0:0001 58A43A partition 1 4.00 MiB

[ 2.987248] mmcblk0boot1: mmc0:0001 58A43A partition 2 4.00 MiB

[ 2.998825] mmcblk0rpmb: mmc0:0001 58A43A partition 3 4.00 MiB, chardev (245:1)

由于前面设置了 20MHz 的最高时钟,mmc0 的实际频率为 19.8MHz,8bit 总线模式。

root@apalis-imx6:~# cat /sys/kernel/debug/mmc0/ios

clock: 20000000 Hz

actual clock: 19800000 Hz

vdd: 21 (3.3 ~ 3.4 V)

bus mode: 2 (push-pull)

chip select: 0 (don't care)

power mode: 2 (on)

bus width: 3 (8 bits)

timing spec: 8 (mmc DDR52)

signal voltage: 0 (3.30 V)

driver type: 0 (driver type B)

测试写入一个 1GB 文件,速度约为 14MB/s。

root@apalis-imx6:/media/mmcblk0p1# time dd if=/dev/zero of=./write_test_8bit \

bs=1M count=1024

1024+0 records in

1024+0 records out

real 1m8.987s

user 0m0.001s

sys 0m11.510s

总结

上面演示了如何在 Toradex 计算机模块上方便地扩展外部 eMMC,以及一些注意事项如 eMMC 接口的电压选择、调试期间的时钟设置和载板设计中的布线问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/163456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript:监听事件

该方法用于向浏览器窗口注册事件监听器&#xff0c;当指定的事件&#xff08;如单击、按键按下&#xff09;被触发时&#xff0c;浏览器会自动调用指定的函数&#xff08;回调函数&#xff09;。 window.addEventListener(event, function, useCapture); 参数说明&#xff1a…

洛谷题单--线性表

P3156 【深基15.例1】询问学号 链接 : 【深基15.例1】询问学号 - 洛谷 直接输入&#xff0c;然后输出a[i]即可; 代码 : #include<iostream> #include<cstring> #include<algorithm> #include<vector> using namespace std; int main(){int n, q …

请手写一个发布-订阅的模式

发布-订阅模式也是经典的设计模式之一&#xff0c;它在前端很多地方都有应用&#xff0c;比如javascript事件池&#xff0c;Vue的$on、$off&#xff0c;nodejs的events模块和socket通信等等都有应用&#xff0c;也是前端面试比较火热的考点之一&#xff0c;接下来给大家详细介绍…

cefsharp119.4.30(cef119.4.3,Chromium119.0.6045.159)版本升级体验支持H264及其他多个H264版本

Cefsharp119.4.30,cef119.4.3,Chromium119.0.6045.159 此更新包括一个高优先级安全更新 This update includes a high priority security update. 说明:此版本119.4.3支持H264视频播放(需要联系我),其他版本。.NETFramework 4.6.2 NuGet Gallery | CefSharp.WinForms 119.…

运动规划Motion-Planning随笔

online verification技术 实时安全校验技术&#xff1a;留一手 首先计算能否通过刹车这种方式得到一条安全轨迹&#xff0c;&#xff08;让速不让道&#xff09;&#xff0c;当刹车有可能碰撞到行人或其他车辆时&#xff0c;则判断变道是否会产生碰撞。如果能变道&#xff0…

深度学习之七(深度信念网络和受限玻尔兹曼机器)

概念 深度信念网络(Deep Belief Networks,DBN)和受限玻尔兹曼机器(Restricted Boltzmann Machines,RBMs)都是无监督学习的模型,通常用于特征学习、降维和生成数据。 受限玻尔兹曼机器(RBM): 结构: RBM 是一个两层神经网络,包括一个可见层和一个隐藏层。这两层之间…

qt按照不同编码格式读取文字(UTF-16LE,UTF-8,UTF-8BOM,UTF-16BE)

enum class EncodingFormat : int {ANSI 0,//GBKUTF16LE,UTF16BE,UTF8,UTF8BOM, }; EncodingFormat VideoPlayer::FileCharacterEncoding(const QString &fileName) {//假定默认编码utf8EncodingFormat code EncodingFormat::UTF8;QFile file(fileName);if (file.open(QI…

「 系统设计 」 为什么要做架构分层?

「 系统设计 」 为什么要做架构分层&#xff1f; 参考&鸣谢 3.设计模式之分层思维&#xff1a;为什么要做代码分层架构&#xff1f; 从零开始学架构&#xff08;八&#xff09;分层架构和设计模式 架构模式之分层架构总结 文章目录 「 系统设计 」 为什么要做架构分层&…

解决 IDEA下VUE项目 @符号无法识别的问题

根目录新建jsconfig.json {"compilerOptions": {"baseUrl": "./","paths": {"/*": ["src/*"]}},"exclude": ["node_modules","dist"] }

IT支持团队的绩效指标和最佳实践

一名员工在远程时因笔记本问题寻求IT支持&#xff0c;尽管他们多次尝试排除故障&#xff0c;但由于缺乏专业知识&#xff0c;最终还是无法访问工作所需的应用程序。这时&#xff0c;他们需要一名专业的 IT 技术人员来指导他们&#xff0c;但他们只能等待有人注意到并回应他们的…

海报设计必备:揭秘5款炙手可热的设计工具

1.即时设计&#xff1a;能实现在线协作的海报设计软件 即时设计作为 2020 年上线的国产设计工具&#xff0c;目前已经有了超百万的注册用户&#xff0c;获得了广大设计师的一致好评。与其他传统海报设计软件相比&#xff0c;即时设计具有这几个优点&#xff1a;一是所有功能都…

Chrome 访问不了项目?10080端口 ERR_UNSAFE_PORT:问题原因 / 解决方案

文章目录 被禁用端口列表解决方法方法一、更换端口 / 使用代理 / 使用域名方法二、对浏览器下手WindowsMac 最近有客户反馈&#xff0c;在chrome浏览器中访问不了项目&#xff0c;其他浏览器都是正常的。 &#xff1f;奇了怪了&#xff0c;难道客户对chrome做了什么操作&#x…

Docker | Docker入门安装

✅作者简介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;热爱Java后端开发者&#xff0c;一个想要与大家共同进步的男人&#x1f609;&#x1f609; &#x1f34e;个人主页&#xff1a;Leo的博客 &#x1f49e;当前专栏&#xff1a;Docker系列 ✨特色专栏&#xff1a; My…

探索WebStorm 2023 Mac/win:最强大的JavaScript开发工具

在当今的软件开发领域&#xff0c;JavaScript已经成为了一种不可或缺的编程语言。而在众多的JavaScript开发工具中&#xff0c;WebStorm一直以其强大的功能和友好的用户界面脱颖而出。现在&#xff0c;我们迎来了全新的WebStorm 2023版本&#xff0c;它将带给开发者们更加出色的…

有机纺织品OCS认证

【有机纺织品OCS认证】 有机产品是指按照这种方式生产和加工的产品。产品符合国际或者国家有机产品要求标准&#xff0c;并通过国家认证机构认证的一切农副产品及其加工品&#xff0c;包括粮食、蔬菜、水果、奶制品、禽畜产品、天然纤维等。 有机纺织品认证是指在使用经过国际或…

华中科技大学李松课题组,利用机器学习预测多孔材料水吸附等温线

多孔材料的水吸附等温线是一个非常重要的参数&#xff0c;但这一参数的获得并不容易。这是因为多孔材料种类过多、结构多元&#xff0c;通过实验和计算的方式获得水吸附等温线数据成本过高&#xff0c;耗时过长。 华中科技大学的李松课题组&#xff0c;建立了一个两步机器学习模…

LeetCode [简单] 283. 移动零

给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 283. 移动零 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 快慢指针&…

可以在uni-app使用的类vconsole.js插件

兴致勃勃在uni-app项目引入调试工具vconsole.js结果真机调试页面空白 怎么办?! 别着急 paradox老师有方法 替代插件下载地址&#xff1a;直接下载插件并引入HbuilderXuni_modules插件 - 类Vconsole APP端调试工具 - HF调试器 - DCloud 插件市场 下载完成在main.js中引入&…

鸿蒙开发环境搭建-deveco-studio 开发工具安装问题()

从华为官网下载工具deveco-studio, 下载地址 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 这是下载后的工具 1、一步步安装步骤 报错了&#xff0c;一般安装都会报这个错误 看似问题不小&#xff0c;其实&#xff0c; 继续下步&#xff0c;就正常了&#xff0c…

栈回溯--在栈里挑出返回地址

GNU Arm Embedded Toolchain project files : GNU Arm Embedded Toolchain arm-none-eabi-addr2line -e F103_Moduel.axf -a -f 08000350 08001d94 0800260c 汇编中&#xff1a; ;HardFault_Handler ; PROC ; EXPORT HardFault_Handler …