tag 标签: emmc

相关博文
  • 热度 6
    2023-12-1 11:53
    1997 次阅读|
    0 个评论
    By Toradex胡珊逢 简介 双屏显示在显示设备中有着广泛的应用,可以面向不同群体展示特定内容。文章接下来将使用 Verdin iMX8M Plus 的 Arm 计算机模块演示如何方便地在 Toradex 的 Linux BSP 上实现在两个屏幕上显示独立的 Qt 应用。 硬件介绍 软件配置 Verdin iMX8M Plus 模块使用 Toradex Multimedia Reference Image V6.4.0 版本,其包含 Qt5.15 相关运行环境。默认系统中已经使能了 Verdin iMX8M Plus 原生的 HDMI 和 DSI 转 HDMI 适配板。 root@verdin-imx8mp-07320826:~# cat /boot/overlays.txt fdt_overlays=verdin-imx8mp_hdmi_overlay.dtbo verdin-imx8mp_dsi-to-hdmi_overlay.dtbo 在 /sys/class/drm 目录下可以看到两个 HDMI 接口,分别是 HDMI-A-1 和 HDMI-A-2,但是它们都属于同一个 DRM 接口 card1。所以系统只能运行一个 weston 实例。 root@verdin-imx8mp:/sys/class/drm# ls card0 card1 card1-HDMI-A-1 card1-HDMI-A-2 renderD128 version #gbm-format=argb8888 idle-time=0 use-g2d=1 xwayland=true repaint-window=16 #enable-overlay-view=1 modules=screen-share.so shell=kiosk-shell.so Qt 应用在 weston 环境中运行时会对应一个 app_id,例如 BSP 中默认的应用 /usr/share/cinematicexperience-1.0。在命令行中启动该应用前添加 WAYLAND_DEBUG=1。 root@verdin-imx8mp:~# cd /usr/share/cinematicexperience-1.0 &1|grep app xdg_toplevel@21.set_app_id("Qt5_CinematicExperience") 另外一个 Qt 应用位于 `/usr/share/qtsmarthome-1.0/`中。 root@verdin-imx8mp:~# cd /usr/share/cinematicexperience-1.0 &1|grep app xdg_toplevel@21.set_app_id("smarthome") 从上面的命令中可以看到两个应用的 app_id 分别是 Qt5_CinematicExperience 和 smarthome。相应地在 /etc/xdg/weston/weston.ini 创建两个 。指定在 HDMI-A-1 上显示 Qt5_CinematicExperience 应用,而 HDMI-A-2 上则显示 smarthome 应用。配置完成后保存并重启。 name=HDMI-A-1 app-ids=Qt5_CinematicExperience mode=1920x1080 name=HDMI-A-2 app-ids=smarthome mode=1920x1080 分别启动上面两个 Qt 应用后可以在两个 HDMI 显示器上看到相应的内容。 总结 上面介绍了双屏显示的配置,在 Linux BSP 上可以十分便捷得实现,除了提到的 HDMI 接口,对于 LVDS 也是同样的配置方法。
  • 热度 2
    2023-11-23 14:32
    1228 次阅读|
    1 个评论
    B y Toradex 胡珊逢 简介 存储器的嵌入式设备中扮演着重要角色,上面不仅安装有操作系统,同时也保存着应用程序和运行日志等。对于存储器如eMMC,写入的数据量决定其使用寿命,对于有大量日志记录的应用,通常可以选用一个大容量的存储设备。文件将介绍如何在 Toradex 的计算机模块 Apalis iMX6 上扩展一个外部 eMMC。 Apalis iMX6 具有四个 SDIO 接口,其中一个已经用于模块本身的 eMMC。其余三个均可以用于连接另外的 eMMC。为了提高读写速度,SDIO 接口可配置为 8bit 模式。 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 的供电。 在Apalis Evalution Board 上 Apalis iMX6 的其中一路 SDIO 通过 X5 排针座引出。由于 eMMC 通常不需要热拔插,所以 SDIO 接口的 CD 引脚就不需要再被使用。 我们选取市场上常见的eMMC 模块,制作适合 Apalis Evalution Board 的转接板。在实际应用中,可以把 eMMC 芯片直接焊接在定制的底板上,以增加牢固性和稳定性。 下面是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 信号在设计底板时务必使用等长布线。 将转接板插入到Apalis Evalution Board 的 X5,并提供 3.3V 供电。 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 = ; - cd-gpios = ; + /*pinctrl-names = "default";*/ + /*pinctrl-0 = ;*/ + /*cd-gpios = ;*/ 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-0 = ; /* 8bit */ vqmmc-supply = ; + max-frequency = ; bus-width = ; - disable-wp; + /*disable-wp;*/ no-1-8-v; + mmc-ddr-3_3v; + non-removable; status = "disabled"; }; eMMC 测试 重新启动后查看日志中mmc0 相关信息,mmc0 控制器上时别到外部扩展的 eMMC 模块。 root@apalis-imx6:~#dmesg|grepmmc0 mmc0: SDHCI controller on 2190000.usdhc using ADMA mmc0: new DDR MMC card at address 0001 mmcblk0: mmc0:0001 58A43A 14.6 GiB mmcblk0boot0: mmc0:0001 58A43A partition 1 4.00 MiB mmcblk0boot1: mmc0:0001 58A43A partition 2 4.00 MiB 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:20000000Hz actualclock:19800000Hz vdd:21(3.3~3.4V) busmode:2(push-pull) chipselect: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#timeddif=/dev/zeroof=./write_test_8bit\ bs=1Mcount=1024 1024+0recordsin 1024+0recordsout real1m8.987s user0m0.001s sys0m11.510s 总结 上面演示了如何在Toradex 计算机模块上方便地扩展外部 eMMC,以及一些注意事项如 eMMC 接口的电压选择、调试期间的时钟设置和载板设计中的布线问题。 ​
  • 热度 3
    2023-9-19 16:23
    1029 次阅读|
    0 个评论
    在对评估板进行开发验证时,时常会遇到根目录空间不足的情况,而在其他分区又有冗余空间,这时则需要对分区大小重新进行分配,合理化利用分区空间。 本文将基于HD-RK3568-IOT评估板主要讲解如何修改eMMC分区大小。 ​ 1. 分区表介绍 本文主要通过修改parameter.txt 分区表文件来实现修改分区大小,示例分区表内容如下: FIRMWARE_VER:1.0 MACHINE_MODEL:RK3568 MACHINE_ID:007 MANUFACTURER:RK3568 MAGIC:0x5041524B ATAG:0x00200800 MACHINE:0xffffffff CHECK_MASK:0x80 PWR_HLD:0,0,A,0,1 TYPE:GPT CMDLINE:mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00002000@0x00006000(misc),0x00010000@0x00008000(boot),0x00010000@0x00018000(recovery),0x00010000@0x00028000(backup),0x00c00000@0x00038000(rootfs),0x00040000@0x00c38000(oem),-@0x00c78000(userdata:grow) uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9 paramter.txt 中的uboot,misc,boot,recovery,oem,rootfs 分区应该保留,重新分区时无需删除。 分区参数的格式是size@offset(name) ,size 和offset 的单位是块,对EMMC 就是”扇区”,扇区大小是512byte 。EMMC 最前面的8MiB 空间是保留区,分区时必须从8MiB 之后的空间开始。 比如第一个分区是u-boot 分区: 0x00002000@0x00004000(uboot)0x00002000@0x00004000(uboot) size=0x2000*0x200/0x100000=4MiB offset=0x4000*0x200/0x100000=8MiB 分区名 "uboot" 2. 扩展rootfs 分区大小到7GB 目前rootfs 在分区表的大小如下所示: 0x00c00000@0x00038000(rootfs),0x00040000@0x00c38000(oem),-@0x00c78000(userdata:grow) 已知rootfs 分区大小是0x00c00000(6GB ,进制转换*512Byte) ,可以考虑从userdata 分区中回收0x200000(1GB) ,oem 分区大小不动,那么修改后的分区配置是: 0x00e00000@0x00038000(rootfs),0x00040000@0x00e38000(oem),-@0x00e78000(userdata:grow) 修改完后保存,重新将parameter.txt 文件导入到烧写工具中,以及更新修改分区的固件进行烧写,在此需要更新parameter.txt ,rootfs ,oem 以及userdata 。 烧写成功后进入系统使用df-h 查看存储空间,可以看到/dev/root 分区已经从6GB 扩展到7GB 了。
  • 热度 10
    2023-9-5 14:19
    985 次阅读|
    0 个评论
    eMMC内部有7个寄存器:OCR、CID、CSD、EXT_CSD、RCA、DSR和QSR。这些寄存器只能通过对应的命令访问。OCR、CID、CSD和QSR带有规定的设备信息,RCA和DSR存储实际的配置参数。EXT_CSD两者都有。 OCR:Operation Conditions Register , 32bits,存储了设备的VDD电压和访问模式,bit31是状态位,表示设备上电完成。 CID:Device IDenitifcation Register,128bits,包括在identification期间,设备的识别信息。 CSD:Device Specific Data,128bits,提供访问设备内容的信息。 EXT_CSD:Extended CSD,512bytes,其中320bytes是设备属性,不可修改,192bytes定义了设备现有配置,是常用的寄存器。 RCA:Relative Device Address,16bits,存储在identificantion器件,设备被host赋予的地址。 DSR:Driver Stage Register,可用来提示总线性能; QSR:Queue Status Register,32bits,记录了队列中任务在特定时间点的状态。
  • 热度 2
    2023-9-1 18:02
    2954 次阅读|
    0 个评论
    eMMC有四种命令: BC:广播命令,无需返回值; BCR:广播命令,需要返回值; AC:点对点寻址命令,DAT线上没有数据传输; ADTC:点对点寻址命令,DAT线上有数据传输。 所有的命令和返回值都在CMD线上完成。 所有命令的长度都是48bits,在52MHz时钟时传输时间为0.9ms。格式如下表: 命令分级 eMMC的命令分为不同class。每个class支持一系列设备功能。 Class0是所有eMMC都强制支持的,其他classes要么是特定设备类型强制支持,要么是可选的。通过使用不同的class,就可以使用不同的配置。eMMC所支持的命令等级Command Classes(CCC),都作为参数存储在寄存器Device specific data(CSD)中。 下面是常用的CMD0/CMD1/CMD6的描述。 返回值 所有命令的返回值都通过CMD发送,返回值长度依赖于命令类型。共有5种返回值类型。 R1:常用的返回值类型,格式如下: R1b:与R1类似,多了个可选的在DAT0上传输的busy信号。 R2:CID,CSD寄存器专用,CMD2和CMD10返回CID寄存器值,CMD9返回CSD寄存器值 R3:OCR寄存器专用,CMD1命令的返回值 R4: Fast IO,包括寻址设备的RCA R5:中断请求
相关资源