• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 博客專欄

    EEPW首頁 > 博客 > 擴展外部eMMC存儲

    擴展外部eMMC存儲

    發布人:toradex 時間:2023-11-23 來源:工程師 發布文章

    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 接口的電壓選擇、調試期間的時鐘設置和載板設計中的布線問題。


    *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。




    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 南陵县| 普格县| 大埔区| 德阳市| 徐水县| 元朗区| 潍坊市| 澳门| 灌云县| 建昌县| 襄樊市| 刚察县| 锡林浩特市| 色达县| 台中市| 寿宁县| 江达县| 沁阳市| 大英县| 阜宁县| 大英县| 靖宇县| 乐亭县| 普兰店市| 当雄县| 通山县| 江永县| 电白县| 泊头市| 石河子市| 凉山| 青龙| 登封市| 磐安县| 眉山市| 馆陶县| 辽阳县| 黄石市| 辰溪县| 玛纳斯县| 同江市|