一,增加 flash步骤
1) 根据硬件原理图和EMMC 和DDR厂家的芯片资料, 确定EMMC 和DDR 64+4,型号如下:
EMMC: SamsungKLMCG4JETD_B041
DDR: H9CKNNNDATMUPR_NUH
2) 检查MemoryDeviceList_MT6737M.xls里是否有该flash
vendor\mediatek\proprietary\bootable\bootloader\preloader\tools\emigen\MT6797\MemoryDeviceList_MT6797.xls
list里面要有custom_MemoryDevice.h里用到的emmc
如果MemoryDeviceList_MT6797.xls 中没有,则需要加入对应的器件
3)添加 flash
查看修改 DDR
vendor\mediatek\proprietary\bootable\bootloader\preloader\custom\6797_6m_n\inc\custom_MemoryDevice.h
/64+4/
#define BOARD_ID MT6797_EVB
#define CS_PART_NUMBER[0] H9CKNNNDATMUPR
4)out目录查看编译的flash型号,及DDR时序
编译时会调用emigen,emigen.pl脚本会解析MemoryDeviceList_MT6797.xls生成custom_emi.c
out\target\product\MT6797\obj\PRELOADER_OBJ\inc\custom_emi.h
EMI_SETTINGS emi_settings[] =
{
//08EMCP08_NL2DT227
{
0x0, /* sub_version */
0x0202, /* TYPE */
9, /* EMMC ID/FW ID checking length */
0, /* FW length */
{
0x70,0x01,0x00,0x45,0x48,0x38,0x45,0x42,0x38,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, /* NAND_EMMC_ID */
{
0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, /* FW_ID */
0x00025052, /* EMI_CONA_VAL */
0xAA00AA00, /* DRAMC_DRVCTL0_VAL */
0xAA00AA00, /* DRAMC_DRVCTL1_VAL */
0x44584493, /* DRAMC_ACTIM_VAL */
0x01000000, /* DRAMC_GDDR3CTL1_VAL */
0xF0048483, /* DRAMC_CONF1_VAL */
0xA00632D1, /* DRAMC_DDR2CTL_VAL */
0xBF080401, /* DRAMC_TEST2_3_VAL */
到这flash 就添加好了
5)MTK 平台查看eMMC和DDR的工作频率
eMMC:
adb shell cat /sys/kernel/debug/mmc0/clock
DDR:
adb shell cat /sys/bus/platform/drivers/emi_clk_test/read_dram_data_rate
硬件信息:通过这个节点可以知道当前flash的id,上层根据id找到对应的flash名字。
cat /sys/block/mmcblk0/device/cid
\kernel-4.4\drivers\mmc\core\Mmc.c
MMC_DEV_ATTR(cid, "%08x%08x%08x%08x\n", card->raw_cid[0], card->raw_cid[1]
GDT42A32ED7_T2E 0x700100543532373332010585581e937d
二,支持兼容方式
-
EMCP类: 只要emmc id不同,就可以兼容。
-
discrete lp2 类: dram vendor ID不同,就可以兼容(也就是说不同晶圆厂家兼容,具体对应的是datasheet中的MR5值,对应到code中MemoryDeviceList_xxxx.xlsx 表格的MODE_REG5 列)
-
discrete lp3 类: dram vendor ID不同,就可以兼容(也就是说不同晶圆厂家兼容,具体对应的是datasheet中的MR5值,对应到code中MemoryDeviceList_xxxx.xlsx 表格的MODE_REG5 列)
-
PCDDR3类:不支持。
-
判断哪些ddr可以兼容,编译时会执行这个脚本
vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/MT8127/emigen.pl
①:Board ID不匹配,不支持
[Error]unsupported part number H9TKNNN8KDMP
所以xls表格里面配置的board id跟当前平台不一致的话,会报不支持。
②:兼容不了LPDDR2和LPDDR3同时选配
TotalCustemChips:2
[Error] LPDDR2 and LPDDR3 are not allowed to be mixed in the Combo Discrete DRAM list.
③:兼容不了多个PCDDR3同时选配
[Error] At most one discrete PCDDR3 DRAM is allowed in the Combo MCP list
④:兼容不了LPDDR3和PCDDR3同时选配
[Error] At most one discrete PCDDR3 DRAM is allowed in the Combo MCP list
- 开机检测ddr
Discrete lp3 (LPDDR3类) 或Discrete lp2 (LPDDR2类)
vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt8163/src/drivers/emi.c
对应log:
[EMI]MR5:3 ----------->读出来的值
emi_settings[i].MODE_REG_5:3,emi_settings[i].type:3
MODE_REG_5---------->时序表中MODE_REG5列配置的值
7.eMCP类
eMCP类的DDR是通过读emmc_id来实现兼容的。
所以:
可以兼容的情况:
1:兼容列表的ddr类型都是Discrete LPDDR2 (MODE_REG5不能有相同的)
2:兼容列表的ddr类型都是Discrete LPDDR3 (MODE_REG5不能有相同的)
不能兼容的情况:
1:兼容列表中不能同时包含LPDDR2,LPDDR3或PCDDR3类型
2:多个PCDDR3类型的ddr不能兼容
三,EMMC移植常见问题
1,无法下载
MTK平台会有以下几种情况:在下载过程中经常出现enable Dram fail的错错误,遇到这种情况第一反应先format 一下memory,然后再down,如果format不行过着还是没法dwon的话,那么再做如下分析;
一旦出现此问题,需做确认以下三点:
1,必须用最新版本的flash tool下载;
2,memory是不是经过MTK验证过;
3,板子必须跑过ett测试,preloader里面的MDL(memorydevicelist)里面配置Dram timing必须是ett log输出的对应的Dram timing;
去确认后还是无法下载那么就做如下分析:
a.软件原因(一般问题出在研发端):
a1.EMI没有配置手机硬件本身用的memory信息,此问题一般在研发端下载未知的软件版本时候发生,具体可以check 此文件:Custom_MemoryDevice.h是否配置了硬件本身用的memory的part number;
a2.修改了emigen.pl或者修改其他preloader的某些文件,导致tool解析不出build出的preloader.bin的EMI参数,此类一般是preloader客制化问题引起的,可以咨询一下MTK;
a3.DRAM 的时序timing有误,可以对比一下ETT测试输出的DRAM timing;
b.硬件原因;
b1.memory本身的问题,此时需要做交叉对比实验确定是memory问题,还是板子问题,若是memory问题,请找memoryvendor;
b2.板子硬件有问题,此类问题一般是由于Memory周边的器件有贴错或者虚焊导致;需要拿到硬件分析;
2,修改DDR时序
vendor/mediatek/proprietary/bootable/bootloader/preloader/tools/emigen/