7.1.3 RDK S600 硬件 bringup
S600 boardid 由 ADC0、ADC1、ADC2、ADC4、ADC5、ADC6共同作用,其中 ADC0、 ADC1和ADC2用于地瓜硬件区分,客户不可更改;ADC4用于module底板区分,ADC5用于底板版本区分,ADC4和ADC5用户可以更改;ADC6为预留状态,强制为0x1。具体 ADC 如何设置分压电阻,可联系地瓜 FAE 团队进行支持
ADC0、ADC1和ADC2 通道共有8个档位,对应0x0-0x7;ADC4、ADC5通道共有7个档位,对应0x0-0x6。S600的 boardid 是一个28bit 的无符号整形,例如0x5131310,其中 boardid[27:24]对应 ADC0,为0x5;boardid[23:20]对应 ADC1,为0x1;boardid[19:16]对应 ADC2,为0x3;boardid[15:12]对应 ADC4,为0x1;boardid[11:8]对应 ADC5,为0x3;boardid[7:4]对应 ADC6,为0x1;boardid[3:0]默认为0x0
由 ADC 采样形成 boardid,在 SBL 内实现,对应代码路径为mcu/BootLoader/BoardId/src/Board_Id_Matrixp.c,函数SBL_GetADC_To_AonSram
在 MCU 下新增硬件
在 MCU 侧需要做的是实现自己的 Acore 外设上电方式,如果是参考地瓜的设计,客户无需修改 MCU,可忽略此部分
添加 Acore 电源管理代码
启动阶段
在文件mcu/BootLoader/Sys/src/Sys_InitSocEarly.c,函数Sys_Lld_SetPmicGpio内,添加pmic EN PIN设置代码
void Sys_Lld_SetPmicGpio(void)
{
...
#if ((SOC_TYPE == SOC_TYPE_S600) || (SOC_TYPE == SOC_TYPE_S300))
uint32 boardid = 0U;
//coverity[misra_c_2012_rule_11_4_violation:SUPPRESS], ## violation reason SYSSW_V_11.4_01
//coverity[misra_c_2012_rule_18_4_violation:SUPPRESS], ## violation reason SYSSW_V_18.4_01
boardid = *((uint32 *)AON_SRAM_ADC);
LogSync("boardid 0x%x\r\n",boardid);
switch (boardid)
{
case 0x501FFF0U:
case 0x502FFF0U:
case 0x503FFF0U:
case 0x504FFF0U:
case 0x505FFF0U:
case 0x506FFF0U:
case 0x507FFF0U:
case 0x5111110U:
case 0x5121210U:
case 0x5131310U:
/*MAIN_DRAM_PRE_PWR_EN_M*/
Sys_Lld_SetBits32(0x23202000U, BIT_12);
Sys_Lld_SetBits32(0x23202004U, BIT_12);
...
break;
default:
LogSync("can't find boardid\r\n");
break;
}
#endif
}
如果完全使用地瓜的电源逻辑,可以把自己的boardid放在代码中以0x5开头的boardid case下方。如果是自定义的,需要新建case分支