S32G PFE_M_Master_A_Slave_Simple_Demo

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

S32G PFE_M_Master_A_Slave_Simple_Demo

S32G PFE_M_Master_A_Slave_Simple_Demo

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上搜索获得。

本文讨论一种简易的办法,就是:

  • S32G3 RDB3板子配置为SDcard启动,插入SDcard,里面放有PFE SLAVE驱动的Linux镜像。
  • 上电启动后运行PFE Master工程的lauterbach调试脚本:run_main_G3_REV1_1.cmm,这个脚本会重启整个S32G3。
  • 然后在脚本中用wait 10S的操作,这个时候Linux已经启动,并且使用Uboot的代码调用ATF来完成PFE相关pre-init, partition reset和时钟与管脚初始化(如上分析, EMAC0~2的RGMII IOMUX已经配置好),然后Slave驱动会等待一段时间,等MCAL Master驱动加载,继续运行PFE Master MCAL代码后,Linux端Slave驱动也加载正确。然后就可以测试整个M Master/A Slave Demo。

总结:以上办法实际上是把bootloader应该做的PFE相关硬件初始化工作由Linux来完成,以便快速搭建Demo,这样客户在做真实的产品开发时,可以做为一个NXP release的标准参考。

Labels (1)
Attachments
Comments

Hello, 

Is there an English version of this Demo?

updated eng. version

Hi john,

我在参考文档《S32G_Bootloader_V*》的指导下,在bootloader里添加了PFE MAC2的时钟初始化,PFE MAC2相关引脚的初始化,并在bootloader源文件中时钟初始化之前设置了RGMII模式,并且在PFE MCAL层驱动中把时钟初始化和引脚初始化相关代码注释了,上电启动代码后,通过打印能看到PFE初始化通过,但是网口就是ping不通。

在PFE MCAL层驱动中,clock初始化保留,程序启动后PFE MAC2口能ping通,可以定位到应该是时钟问题吧,但是我不知道具体是哪个时钟没有配好,下面是我在bootloader中的相关配置,您可否提供一点建议屏幕截图 2023-08-15 091501.png屏幕截图 2023-08-15 091622.png屏幕截图 2023-08-15 091643.png屏幕截图 2023-08-15 091721.png屏幕截图 2023-08-15 091749.png屏幕截图 2023-08-15 091816.png

1:你在bootloader中将PFE时钟的根源配置后,PFE自己的时钟由他自己来配置即可。

2:  在pfe自己的sample中:

1.1    PFE_PreInit

在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说明如下:

Johnli_0-1692064714958.png

 

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);

      

Johnli_1-1692064714970.jpeg

 

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了吧

这个函数的执行,需要在pfe clock inital之前执行。

 

hi john,

还是不行,我用的是s32g2 rdb开发板,目前没有头绪。我还有其它需要注意的地方吗

我的意思是:

你的回复“在PFE MCAL层驱动中,clock初始化保留,程序启动后PFE MAC2口能ping通

我的回复:“1:你在bootloader中将PFE时钟的根源配置后,PFE自己的时钟由他自己来配置即可。

这样也行,就是bootloader不需要去配置pfe mcal时钟,只保证他的源时钟配置正确就可以了。

然后pfe自己去初始化自己的时钟,在他的代码里,PFE_PreInit是在时钟初始化之前的。

 

hi john,

  如何去配置pfe mcal时钟呢?如果在pfe程序中调用Clock_Ip_Init()这个API函数去配置时钟,相当于对整个soc的时钟树又初始化了一遍吧,当boot A核Linux镜像时,是否会发生时钟冲突?

你只要保证bootloader, pfe sample, linux中的clock配置是一模一样的,就不会冲突,后面的配置时钟函数会先读,后配置,如果读出来的值和配置值是一样的,就会直接返回,不会再操作硬件。

john,

   明白了,多谢大佬宝贵时间!

100% helpful (1/1)
Version history
Last update:
‎09-20-2023 11:19 PM
Updated by: