This application note explain how to run M kernel PFE master and A kernel PFE slave demo without bootloader support. chinese version:
在真实的产品中,一般会使用一个基于M7_0核的bootloader来启动M和A核,这个bootloader负责所有M核和A核资源的初始化,解决M核和A核的资源冲突,并且启动M和A核。所以理论上运行M PFE Master Mcal驱动加A PFE Slave Linux驱动也是需要一个bootloader的。参考文档《S32G_Bootloader_V*》,Johnli,可以在公开community上搜索获得。
本文讨论一种简易的办法,就是:
总结:以上办法实际上是把bootloader应该做的PFE相关硬件初始化工作由Linux来完成,以便快速搭建Demo,这样客户在做真实的产品开发时,可以做为一个NXP release的标准参考。
Hello,
Is there an English version of this Demo?
Hi john,
我在参考文档《S32G_Bootloader_V*》的指导下,在bootloader里添加了PFE MAC2的时钟初始化,PFE MAC2相关引脚的初始化,并在bootloader源文件中时钟初始化之前设置了RGMII模式,并且在PFE MCAL层驱动中把时钟初始化和引脚初始化相关代码注释了,上电启动代码后,通过打印能看到PFE初始化通过,但是网口就是ping不通。
在PFE MCAL层驱动中,clock初始化保留,程序启动后PFE MAC2口能ping通,可以定位到应该是时钟问题吧,但是我不知道具体是哪个时钟没有配好,下面是我在bootloader中的相关配置,您可否提供一点建议
1:你在bootloader中将PFE时钟的根源配置后,PFE自己的时钟由他自己来配置即可。
2: 在pfe自己的sample中:
在Demo代码中的调用顺序是:
\example_application\src\sample_app_ethswt_initialization.c
SampleAppInitTask
|-> Eth_43_PFE_PreInit
|-> Mcu_InitClock
|-> Serdes_Init
|-> SampleAppEthInit
| |-> Eth_43_PFE_Init
所以Eth_43_PFE_PreInit是先于Mcu_InitClock调用的,在集成文档:C:\NXP\SW32G_RTD_4.4_3.0.2\eclipse\plugins\Eth_43_PFE_TS_T40D11M09I7R0\doc\ AUTOSAR_MCAL_ETH_43_PFE_IM.pdf说明如下:
Eth_43_PFE_PreInit->Eth_PFE_LLD_InitInterfaces->
*(uint32_t *)(uintptr_t)(S32G_GPR_BASE + PFE_EMACX_INTF_SEL_OFF) |= PFE_EMACX_SET(u8EmacIdx, u8MiiMode);
当0x460a411高四位为“0000”时,表示接口为GMII or MII, “0001”时表示接口为RGMII,“0010”表示接口为SGMII。
因为大部分量产产品,会将clock初始化在bootloader中一次完成,所以相当于函数Eth_43_PFE_PreInit的实现需要由PFE驱动移植到bootloader中的Mcu_InitClock调用前,请注意。
hi john,
感谢您能回复!
PFE_PreInit是指把 *(uint32_t *)(uintptr_t)(S32G_GPR_BASE + PFE_EMACX_INTF_SEL_OFF) |= PFE_EMACX_SET(u8EmacIdx, u8MiiMode);这句话放在bootloader 程序中的Mcu_InitClock调用前对吗?“PFE自己的时钟由他自己来配置即可”具体是啥意思?应该不用在PFE应用中再去调用Mcu_InitClock了吧