Qualcomm MTK平台ddr driver hal比较

本文对比了MTK和Qualcomm平台DDR driver的工作原理和配置方式。MTK平台采取turnkey模式,通过预认证简化配置过程;而Qualcomm平台则需要OEM工程师根据内存数据手册自行设置DDR timing参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qualcomm、MTK平台DDR driver主要做ddr controller初始化以及不同ddr memory timing设定、ddr block infor的配置等,所以真正需要客户做的工作主要是后者(ddr memory timing设定、ddr block infor的配置)。为了更好地使OEM客户能够更方便地完成特定ddr memory driver工作,两个平台都尽量方便oem engineer,都使用脚本化来完成ddr timing设置,以将oem engineer从繁杂的寄存器设定中解放出来。

 

MTK 平台以turn key模式成功上位,在ddr driver更是将turn key发挥到极致。MTK采用的是verify机制,市面上主流ddr memory MTK会先认证并将参数合入到MemoryDeviceList_MT6582.xls里,如果客户使用的是没有认证的ddr可以提认证需求,当然也是可以自己调timing的。所以oem engineer 只需将认证的ddr memory配置到custom_MemoryDevice.h

 

#define CS_PART_NUMBER[0]       H9TP32A8JDACPR_KGM


new编译时会调用emigen,emigen.pl脚本会解析MemoryDeviceList_MT6582.xls生成custom_emi.c文件,里面即有ddr timing parameter。

 

EMI_SETTINGS emi_settings[] =

{

       //H9TP32A8JDACPR_KGM

       {

              0x0,              /* sub_version */

              0x0202,        /* TYPE */

              9,           /* EMMC ID/FW ID checking length */

              0,           /* FW length */

              {0x90,0x01,0x4A,0x48,0x34,0x47,0x31,0x64,0x04,0x0,0x0,0x0,0x0,0x0,0x0,0x0},           /* NAND_EMMC_ID */

              {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0},              /* FW_ID */

              0x0002A3AE,              /* EMI_CONA_VAL */

              0xAA00AA00,             /* DRAMC_DRVCTL0_VAL */

              0xAA00AA00,             /* DRAMC_DRVCTL1_VAL */

              0x44584493,              /* DRAMC_ACTIM_VAL */

              0x01000000,              /* DRAMC_GDDR3CTL1_VAL */

              0xF0048683,        /* DRAMC_CONF1_VAL */

              0xA00632D1,              /* DRAMC_DDR2CTL_VAL */

              0xBF080401,              /* DRAMC_TEST2_3_VAL */

              0x0340633F,        /* DRAMC_CONF2_VAL */

              0x51642342,              /* DRAMC_PD_CTRL_VAL */

              0x00008888,              /* DRAMC_PADCTL3_VAL */

              0x88888888,              /* DRAMC_DQODLY_VAL */

              0x00000000,              /* DRAMC_ADDR_OUTPUT_DLY */

              0x00000000,              /* DRAMC_CLK_OUTPUT_DLY */

              0x01000510,              /* DRAMC_ACTIM1_VAL*/

              0x07800000,              /* DRAMC_MISCTL0_VAL*/

              0x04002600,              /* DRAMC_ACTIM05T_VAL*/

              {0x20000000,0x20000000,0,0},             /* DRAM RANK SIZE */

              {0,0,0,0,0,0,0,0,0,0},          /* reserved 10 */

              0x00C30001,              /* LPDDR2_MODE_REG1 */

              0x00060002,              /* LPDDR2_MODE_REG2 */

              0x00020003,              /* LPDDR2_MODE_REG3 */

              0x00000006,              /* LPDDR2_MODE_REG5 */

              0x00FF000A,        /* LPDDR2_MODE_REG10 */

              0x0000003F,        /* LPDDR2_MODE_REG63 */

       },

}

 

Qualcomm平台ddr driver hal相对MTK 的trun key模式,oem engineer的参与感会强一些,虽然也是脚本化,不需要coding,但是ddr timming parameter需要oem engineer在ddr memory datasheet里去查询,并能理解参数的意义及timing unit,将参数正确填入8974_cdp_jedec_ddr_4_die_interleave_dal.xml。然后通过python命令解析

python cdt_generator.py 8974_cdp_jedec_ddr_4_die_interleave_dal.xml  binfile.bin

把生成的boot_cdt_array.c copy到\secboot3\msm8974,重新build sbl1即可。

boot_cdt_array.c里有ddr timing parameter

 

uint8config_data_table[CONFIG_DATA_TABLE_MAX_SIZE] =

{

       /*Header */

       0x43,0x44, 0x54, 0x00,

       0x01,0x00,

       0x00,0x00, 0x00, 0x00,

       0x00,0x00, 0x00, 0x00,

 

       /*Meta data */

       0x16,0x00,

       0x05,0x00,

       0x1B,0x00,

       0x88,0x01,

 

       /*Block data */

   0x02, 0x01, 0x01, 0x00, 0x00,

 

       0x01,0x00, 0x00, 0x00,

       0x00,0x52, 0x44, 0x44,

       0xFF,0xFF, 0x00, 0x00,

       0x02,0x00, 0x00, 0x00,

       0xB8,0x00, 0x00, 0x00,

       0x03,0x00, 0x00, 0x00,

       0x01,0x00, 0x00, 0x00,

       0x00,0x00, 0x00, 0x00,

       0x05,0x00, 0x00, 0x00,

       0x14,0x05, 0x00, 0x00,

       0xA4,0x01, 0x00, 0x00,

       0x60,0xAE, 0x0A, 0x00,

       0x76,0x02, 0x00, 0x00,

       0x40,0x01, 0x00, 0x00,

       0x58,0x98, 0x00, 0x00,

       0x78,0x05, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0x0E,0x01, 0x00, 0x00,

       0x64,0x00, 0x00, 0x00,

       0x96,0x00, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0xF0,0x00, 0x00, 0x00,

       0x02,0x00, 0x00, 0x00,

       0x0E,0x00, 0x00, 0x00,

       0x0A,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x0E,0x00, 0x00, 0x00,

       0x0A,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x20,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x03,0x00, 0x00, 0x00,

       0xF0,0x00, 0x00, 0x00,

       0xF4,0x01, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x04,0x00, 0x00, 0x00,

       0x05,0x00, 0x00, 0x00,

       0x80,0x84, 0x1E, 0x00,

       0x10,0x27, 0x00, 0x00,

       0x04,0x00, 0x00, 0x00,

       0x10,0x0E, 0x00, 0x00,

       0x84,0x03, 0x00, 0x00,

       0x10,0x27, 0x00, 0x00,

       0x0A,0x00, 0x00, 0x00,

       0x96,0x00, 0x00, 0x00,

       0xF4,0x01, 0x00, 0x00,

       0x80,0xA2, 0x00, 0x00,

       0x00,0x20, 0x00, 0x00,

       0x19,0x00, 0x00, 0x00,

       0x37,0x00, 0x00, 0x00,

       0x00,0x00, 0x00, 0x00,

       0x00,0x00, 0x00, 0x00,

       0x05,0x00, 0x00, 0x00,

       0x14,0x05, 0x00, 0x00,

       0xA4,0x01, 0x00, 0x00,

       0x60,0xAE, 0x0A, 0x00,

       0x76,0x02, 0x00, 0x00,

       0x40,0x01, 0x00, 0x00,

       0x58,0x98, 0x00, 0x00,

       0x78,0x05, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0x0E,0x01, 0x00, 0x00,

       0x64,0x00, 0x00, 0x00,

       0x96,0x00, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0xF0,0x00, 0x00, 0x00,

       0x02,0x00, 0x00, 0x00,

       0x0E,0x00, 0x00, 0x00,

       0x0A,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x0E,0x00, 0x00, 0x00,

       0x0A,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x20,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x03,0x00, 0x00, 0x00,

       0xF0,0x00, 0x00, 0x00,

       0xF4,0x01, 0x00, 0x00,

       0x4B,0x00, 0x00, 0x00,

       0x08,0x00, 0x00, 0x00,

       0x04,0x00, 0x00, 0x00,

       0x05,0x00, 0x00, 0x00,

       0x80,0x84, 0x1E, 0x00,

       0x10,0x27, 0x00, 0x00,

       0x04,0x00, 0x00, 0x00,

       0x10,0x0E, 0x00, 0x00,

       0x84,0x03, 0x00, 0x00,

       0x10,0x27, 0x00, 0x00,

       0x0A,0x00, 0x00, 0x00,

       0x96,0x00, 0x00, 0x00,

       0xF4,0x01, 0x00, 0x00,

       0x80,0xA2, 0x00, 0x00,

       0x00,0x20, 0x00, 0x00,

       0x19,0x00, 0x00, 0x00,

       0x37,0x00, 0x00, 0x00,

};

 

MTK平台trun key模式,oem engineer只需要知道该key打开哪扇抽屉(which ddr memory),直接打开取出即可,甚至不需要知道抽屉里东西长啥样。而qualcomm平台更多的是告诉oem engineer配置的方法,至于所要用的材料需要oem engineer自己找到,然后提供便捷的方法将材料烹饪成最终美味菜肴。至于孰优孰劣,在此不便轻下结论。微笑微笑

### MTK 平台 DDR 压力测试方法与工具 在 MTK 平台下进行 DDR 压力测试,可以采用多种方法工具来确保 DDR 的稳定性。以下是详细的方法说明: #### 1. 使用 MTK FlashTool 的 MemoryTest 功能 MTK FlashTool 提供了一个内置的 MemoryTest 功能,用于测试 DDR 的稳定性可靠性。该功能适用于 MTK 平台中 6755(含)之后的版本[^1]。如果当前平台不支持此功能,FlashTool 会自动隐藏相关的测试选项。 - **操作步骤**: - 确保设备连接到 PC,并正确安装驱动程序。 - 打开 MTK FlashTool,在工具栏中找到 MemoryTest 功能。 - 根据提示选择测试模式并启动测试。 #### 2. 利用 ETT 压力测试工具 对于更复杂的 DDR 压力测试,可以使用 MTK 官方提供的 ETT 工具包。这些工具包通常包含必要的脚本文件,能够执行更全面的测试[^2]。 - **准备工作**: - 下载并解压 MTK_MVG_TOOLS.rar 文件,其中包含 `MTxxx_ETT_and_stress_test__Tool_exe_V1.0.rar`。 - 将解压后的工具放置在合适的目录下,并确保所有依赖项已正确安装。 - **测试过程**: - 运行工具中的脚本文件,按照提示完成 DDR 的压力测试。 - 测试过程中可以监控系统的运行状态,记录任何异常行为。 #### 3. 通过 Monkey 脚本测试内核稳定性 为了进一步验证 DDR 的稳定性,可以结合 Monkey 脚本对系统进行全面的压力测试。这种方法不仅可以检测 DDR 的问题,还可以评估整个系统的健壮性[^3]。 - **具体实现**: - 启动 MTK Log 工具,确保异常信息能够实时打印到屏幕上。 - 编写或下载现成的 Monkey 脚本,设置适当的参数以模拟高负载环境。 - 在测试期间,若系统出现崩溃或重启,检查 `/data/vendor/mtklog/aee_exp/db.fatal.00.KE` 文件,分析内核错误日志。 - 如果未发现系统重启且无相关日志输出,则可能是硬件或 DDR 与主芯片不兼容的问题,此时可以通过降频来缓解。 #### 4. 降频测试(可选) 当 DDR 频率过高导致系统不稳定时,可以尝试降低 DDR 的工作频率。这虽然会牺牲部分性能,但有助于解决因硬件不匹配引发的问题。 - **操作方法**: - 修改平台配置文件中的 DDR 频率参数。 - 重新编译固件并刷入设备。 - 再次运行上述压力测试,验证降频后的效果。 ```python # 示例:Monkey 脚本示例 adb shell monkey -p com.example.app --throttle 300 --ignore-crashes --ignore-timeouts --monitor-native-crashes -v 500000 ``` ### 注意事项 - 在执行压力测试前,请确保备份重要数据,避免因系统崩溃造成数据丢失。 - 测试过程中应密切监控设备温度,防止过热导致测试结果偏差。 - 若发现问题,及时收集日志并进行深入分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值