2255178_zh-CN

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

2255178_zh-CN

2255178_zh-CN

[S32K311][MultiPartition]:在 S32K311 上设置多分区时 SPI 初始化失败

你好,团队、

李尔的问题如下

-------------------------------------------------------------------------------------

我们正在单核 ECU (S32K311) 上实施多分区,在 SPI 驱动程序初始化过程中遇到了一个问题。

观察结果:
SPI 驱动程序调用 OsIf_timer.c 中的 OsIf_GetPartitionID(),以获取当前分区 ID 并将其用作 SpiID。但是,该 ID 与 SpiCorePartitionUse 中的值不匹配,尽管两者都是为同一个 ECUC 分区配置的。由于这种不匹配,驱动程序会触发信号 DET 错误,无法初始化外围设备。

调试时发现的问题:
函数 OsIf_apxMultiPartitionPredefinedConfig 返回一个 SPI 驱动程序不期望的值。这似乎是造成不匹配的原因。
初步分析表明,该问题可能与 Vector DaVinci/Tresos 工具的配置生成有关。

影响
SPI 在多分区模式下无法完成初始化,导致通信功能受阻。

-------------------------------------------------------------------------------------


BR
Stefano


RTDRe: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

因为他们提到了OsIf_apxMultiPartitionPredefinedConfig,所以我认为他们使用的是 ASR OS。

Nhi_Nguyen_0-1764908336364.png

那么,在这种情况下,函数 GetApplicationID() 返回的是什么值?

请将它们的配置发送给我,包括EcuC、Os、Spi、BaseNXP。

生成以下结构的输出

Nhi_Nguyen_1-1764909416101.png

Nhi_Nguyen_2-1764909490186.png

他们使用的是什么软件包?

顺祝商祺!

Nhi



Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

请帮助我读取 SPI_Init() 函数中的以下参数:

- SpiId?

- 他们向函数 Spi_Init() 传递了什么配置?

像这样:

Nhi_Nguyen_0-1764930784516.png

顺祝商祺!

Nhi

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

您好 Nhi_Nguyen,

请告诉我附件是否足够。


BR
Stefano

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

您好 Nhi_Nguyen,

李尔回答道:

Spi_Init(&Spi_Config_EcucPartition_C0_B);

这是我们在 Init 函数中传递的信息,SPI_ID 从分区 ID api 中读取,但没有正确链接到操作系统应用程序 ID。

BR
Stefano

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

这是他们申请中的操作系统:

Nhi_Nguyen_0-1765160258666.png

他们将Spi_Config_EcucPartition_C0_B传递给了Spi_Init(),因此 SPI_ID 必须是下面的值:

Nhi_Nguyen_1-1765161093076.png

在这种情况下,u32AppId 必须为 1 才不会出现 Det 错误。但 OS_GetApplicationID() 函数属于 RTOS 而非 RTD,因此请标记 RTOS,以便有人能帮助获取该函数。

顺祝商祺!

Nhi

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

您好 Nhi_Nguyen,

下面是李尔的答复:

在我们的案例中,SPI ID 和操作系统应用程序不匹配。我们认为,就 ASIL 而言,它应该返回 1,但它却返回 0,导致配置不匹配。请看下面的快照。


StefanoGattazzo_0-1765278424158.png




如果你愿意,我们可以开个短会,我可以向你详细介绍。

BR
Stefano

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

我不知道 RTOS 是如何工作的,也不知道在 RTOS 中如何从函数 GetCurrentApplicationID() 返回值。但如果想保持 u32AppID = 0 为当前值,避免出现 Det 错误,则可以按下面的方法操作:

Nhi_Nguyen_0-1765349889769.png

然后,生成的文件是

Nhi_Nguyen_1-1765349983170.png

这意味着,如果 u32AppId = 0,SpiID = 0;

u32AppId = 1,SpiID = 1;

在 SPI 中,生成的文件是

Nhi_Nguyen_2-1765350057168.png

这意味着 Spi_Config_EcucPartition_C0_QM->u32SpiCorePartitionUse = 1;

Spi_Config_EcucPartition_C0_B->u32SpiCorePartitionUse = 0;

在另一种情况下,他们想将 u32AppID 更改为其他值,那么@StefanoGattazzo请添加 RTOS 标记并移除 RTD 标记,以便 RTOS 的人员可以帮助您。

顺祝商祺!

Nhi

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

抱歉,我对此一无所知。

顺祝商祺!

Nhi

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

HI Nhi_Nguyen,

我能问谁?


BR
Stefano

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

请删除 RTD,我看到您添加了 RTOS 标签,我们团队会有人回答您的问题。

顺祝商祺!

Nhi

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

您好 Nhi_Nguyen,

如果您认识某个人,我可以直接询问--现在情况紧急。


BR
Stefano

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好,团队、

李尔正在写作:

不,我们使用的不是恩智浦操作系统,而是矢量操作系统。OSIF 参考来自基础元器件。

我们目前正在开发一个 POC,其中 SPI 驱动程序被分区,这样 LPSPI2 是专用的,用于质量管理应用程序,而其余的 LPSPI 模块则用于 ASIL B 应用程序。

根据 RTD 用户手册,这要求每个分区分别调用两次 Spi_Init()。因此,我们首先从 ASIL B Os Application 调用 Spi_Init()函数,然后再从 QM Os Application 调用 Spi_Init()函数,并为每个函数传递正确的配置指针。

我们看到,在 Spi_Init()函数中调用了 Spi_GetID(),然后又调用了 GetCurrentApplicationID()(如下截图所示)

StefanoGattazzo_0-1765982551761.png


下面是 Os 生成的枚举。ASIL B Os 应用程序调用 GetCurrentApplicationID() 时,返回 0。 QM Os 应用程序调用 GetCurrentApplicationID() 时,返回 1。

StefanoGattazzo_1-1765982551945.png



在 OsIf_GetPartitionID 中,Os 返回的值用于获取在数组 OsIf_apxMultiPartitionPredefinedConfig 中配置的分区编号。

StefanoGattazzo_2-1765982552173.png



OsIf_apxMultiPartitionPredefinedConfig 中的值如下

StefanoGattazzo_3-1765982552232.png



当 QM 应用程序调用 Spi_Init()时,Spi_GetID() 返回的值为 1(GetCurrentApplicationID() 返回 1,OsIf_apxMultiPartitionPredefinedConfig 的索引 1 也是 1)。
但生成的 SPI 配置不符合预期值,Det 会收到错误报告。

StefanoGattazzo_4-1765982552605.png



是什么影响了 MCAL 在 Spi_Config 和 OsIf_apxMultiPartitionPredefinedConfig 中生成的值?

BR
Stefano

Re: [S32K311][MultiPartition] : SPI initialization fails in MultiPartition setup on S32K311

你好@StefanoGattazzo

以下是我从您所附项目中获得的配置 Spi、Ecu、Os。

Nhi_Nguyen_0-1766026210635.png

EcuC 用于定义分区 ID,例如在他们的配置中,QM 是 0 分区,C0_B 是 1 分区,System 是 2 分区。

然后,Os 选择从 EcuC 获取分区 ID 的分区。例如

SPI:C0_B 为分区 1,C0_M 为分区 0。

操作系统:结构 OsIf_apxMultiPartitionPredefinedConfig 也指 EcuC 中的分区 ID。例如,在他们的配置中:

应用程序 0 - 系统 - 分区 2;

应用 1 - C0_B - 分区 1;

应用 2 - C0_M - 分区 0;

因此,如果要将 C0_B 传递给 Spi_Init(),也就是将分区 1 传递给 Spi_Init(),那么 OsIf_apxMultiPartitionPredefinedConfig[x] = 1; 或者 x = 1; x = GetCurrentApplicationID();

所以,有了他们在最新回复中展示的照片:

在 Spi 中,C0_B 是分区 1;

C0_M 是分区 2;

这意味着,在 EcuC 中,索引 0 是系统分区;索引 1 是 C0_B 分区;索引 2 是 C0_M 分区。

总之,根据 Os、Spi、EcuC 的上述定义,他们可以调整分区配置以避免 Det 错误。

顺祝商祺!

Nhi



タグ(1)
評価なし
バージョン履歴
最終更新日:
‎12-19-2025 03:26 AM
更新者: