【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替换为 Samsung 2 GB DDR 方法 ( 下 )

. 前言
世平集团针对 DDR 相关技术整理了一系列博文,下图为详细的博文索引架构;笔者希望能够透过这些博文协助大家更了解如何在 i.MX8 相关平台上使用 DDR,未来笔者也会持续更新此系列的相关博文还恳请支持!而本篇博文会针对 DDR 相关技术索引架构中的【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替换为 Samsung 2 GB DDR 方法 ( 下 ) 这篇文章做介绍,本篇博文会对系统程式如何配合 DDR 容量大小修改做叙述接下来让我们开始进入正题吧!


博文架构

在上一篇博文 【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替换为 Samsung 2 GB DDR 方法 ( 上 ) 中,我们叙述了如何在 NXP 的 i.MX8M Mini 开发板上使用 Samsung 的 2 GB DDR 的方法,并配合其 Datasheet 设置 RPA 文件。而在接下来的这篇博文里面,将会接续介绍如何依照 2 GB 的容量大小对软体做修改。以下是本篇博文即将会介绍的内容:

(1) 如何把 Calibration 的结果打包进系统

(2) 开机后如何透过实验证明程式修改成功

a. 系统流程图

以下图片为替换 DDR 的流程图。



由于图片中提到的“查看 DDR Datasheet”、“配置 RPA 参数”、“透过 DDR Tool 测试参数并压力测试”以及“产出 "lpddr4_timing.c"” 等部分,已经在 【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替换为 Samsung 2 GB DDR 方法 ( 上 ) 这篇博文中介绍过了,所以本篇博文将会针对“把 "lpddr4_timing.c" 打包到 Bootloader 中”做介绍。



二. 针对 2 GB 容量的 DDR 修改软体设定

本篇博文使用的软体版本为 L5.4.47_2.2.0,以下将介绍如何把 "lpddr4_timing.c" 打包到 "u-boot-imx"。如果不知道如何产生出 "lpddr4_timing.c" 档可以参考 【ATU Book-i.MX8 系列-DDR】NXP i.MX8M Mini 之替换为 Samsung 2 GB DDR 方法 ( 上 ) 这篇文章。

a. 重编 u-boot-imx

首先,移动到 "u-boot-imx" 目录下。
$ cd tmp/work/imx8mmevk-poky-linux/u-boot-imx/1_2020.04-r0/git/


将 "lpddr4_timing.c" 放置到 "board/freescale/imx8mm_evk/" 下将本来的 "lpddr4_timing.c" 取代。



为了确保编译的档案是最新的,请更新 "lpddr4_timing.c" 的时间戳记。
$ touch board/freescale/imx8mm_evk/lpddr4_timing.c​


编译 "u-boot-imx"。
$ bitbake u-boot-imx -f -c compile; bitbake u-boot-imx -f -c deploy


编译完毕后会产生 "u-boot-imx8mmevk.bin" 与 "u-boot-imx8mmevk.bin-sd" 等档案;而档案会产出在 "tmp/work/imx8mmevk-poky-linux/u-boot-imx/1_2020.04-r0/deploy-u-boot-imx/" 目录下。

b. 重编 imx-boot

首先,移动到 "imx-boot" 目录。
$ cd tmp/work/imx8mmevk-poky-linux/imx-boot/1.0-r0/git/

最后编译 "imx-boot"。
$ bitbake imx-boot -f -c compile; bitbake imx-boot -f -c deploy

编译完毕后会产生 "imx-boot" 与 "imx-boot-imx8mmevk-sd.bin-flash_evk";档案会产出在 "tmp/work/imx8mmevk-poky-linux/imx-boot/1.0-r0/deploy-imx-boot/" 目录下。

c. 小结

透过以上操作我们了解到如需达成“将 DDR 改为 Samsung 2 GB ”的这个目的,需要修改及重新编译的地方包含了 "u-boot-imx"、"imx-boot" 等档案,而后续章节将介绍如何验证以上修改是否都有正确生效。




三. 验证是否能开机

a. 烧录 Bootloader

本篇范例是用 SD Card 开机。所以笔者请先将 SD 卡放进 PC 并且先把 Boot 与 Rootfs Partition unmount。
$ sudo umount /media/user/boot
$ sudo umount /media/user/root​


最后透过 "dd" Command 来烧录 Bootloader。( 这里的 "dev/sdb" 指的是笔者的 SD Card 位置,这应该根据您电脑的路径做相对应修改 )
$ sudo dd if=imx-boot-imx8mmevk-sd.bin-flash_evk of=/dev/sdb bs=1k seek=33​



b. 开机验证

把重新烧写好的 SD Card 放入开发板内并开机之后,可于 U-boot Log 中够看到 2 GiB 的字眼。



接着开进 Kernel 后,可从 Kernel Log 得知总记忆体大小为 2 GB ( 2060288 K ) 跟 U-boot 的 Log 相呼应。



那 Log 中的 1336092 K 怎么来的? 可以带入以下算式。

1336092 K = 总记忆体大小 - reserved - cma-reserved

                   = 2060288 K - 68836 K - 655360 K

当开进 Rootfs 后下 "free" Command 可以看到记忆体大小为 1994396 K。



那 1994396 K 怎么来的? 可以带入以下算式。

1994396 K = used + free + buff/cache

                   = 202400 K + 1761444 K + 30552 K

此外我们可以透过 "free" 命令找到未使用的记忆体空间。由下图可得知系统的可用空间还有 1.7 GB 左右。
$ free​



最后可以透过 "memtester" 程式验证记忆体读写是否正常。( 请读者自行把 "memtester" 程式 Copy 到系统中 )
$ ./memtester 1700M​


这里的 1700M 是指要测试的记忆体大小;为了确保在做记忆体测试时系统能正常运作,输入的数值不能超过 "free" 的大小,并且预留至少约 60MB 的空间给系统。

"memtester" 命令会不断的对记忆体做压力测试,下图中的 Loop 那行指的就是测试次数它会不断的累加。





四. 结语

本篇博文示范了如何在 i.MX8M Mini 平台上成功的使用 Samsung 2 GB 颗粒开机,主要是先将 DDR 的参数配置填入 RPA 文件,最后重新编译软体并且重新烧录后就可以在 i.MX8M Mini 平台上正常开机了。本篇博文也透过压力测试结果证明了替换 Samsung 2 GB 颗粒后在使用上没有问题。未来读者们若是有替换 DDR 颗粒的需求将可以直接套用本博文的方法,之后笔者也会持续撰写 “如何在 i.MX8M Mini 平台上使用不同容量的 DDR 颗粒的文章” 再请拭目以待。若是读者们在配置 DDR 参数或修改程式的过程中有遇到任何问题,也欢迎随时与世平集团讨论。


五. 参考文件

★博文内容参考自 网站,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

参考来源

false: https://community.nxp.com/t5/i-MX-Processors-Knowledge-Base/i-MX-8M-Family-DDR-Tool-Release/ta-p/1104467

评论