英飞凌
直播中

李平

8年用户 1333经验值
私信 关注

请问如何为一个QSPI模块使用两个CS/SLSO?

我正在使用 TC397,试图使用同一个 SPI 模块(QSPI1)与两个从机通信
我为两个从机配置了 SPI,其中一个使用 SLSO3_P11_10,另一个使用 SLSO4_P11_11。 初始配置后,我只能与最后配置的设备通信,我想找到一种方法,在与每个设备通信前切换 SLSO。
我正在使用 iLLD,并尝试使用不同的方法来更改 CS。 通常情况下,每个设备都有自己的配置结构,当我为特定设备调用IfxQspi_SpiMaster_write 时,CS 应自动更改,但不知何故,它不想更改。
到目前为止行之有效的方法:
-使用 IfxQspi_setSlaveSelectOutputControl 启用所需的 SLSO
-使用 IfxQspi_writeBasicConfigurationEndStream,然后进行虚拟写入,推送 TxFiFo 并更新寄存器
-通过 BACONENTRY 手动更改 QSPI1.BACON.B.CS 寄存器
所有选项都不起作用,我想知道是否有可能这样更改 CS。
如果有任何提示,我们将不胜感激。

回帖(1)

石玉兰

2024-7-2 16:44:37
要为 QSPI 模块使用两个 CS/SLSO,您可以按照以下步骤操作:

1. 初始化 QSPI 模块:首先,您需要初始化 QSPI 模块并配置其参数,如波特率、数据位等。您可以使用 `IfxQspi_InitConfig` 函数来完成这个任务。

2. 配置 QSPI 从机:为每个从机创建一个配置结构,例如 `IfxQspi_SlaveConfig`。在这个结构中,您可以设置从机的特定参数,如 SLSO 引脚。例如:

   ```c
   IfxQspi_SlaveConfig slaveConfig1 = {
       .sso = IfxQspi_Sso_3,
       .csPolarity = IfxQspi_CsPolarity_activeLow
   };

   IfxQspi_SlaveConfig slaveConfig2 = {
       .sso = IfxQspi_Sso_4,
       .csPolarity = IfxQspi_CsPolarity_activeLow
   };
   ```

3. 设置 SLSO 控制:使用 `IfxQspi_setSlaveSelectOutputControl` 函数启用所需的 SLSO。例如:

   ```c
   IfxQspi_setSlaveSelectOutputControl(&MODULE_QSPI1, IfxQspi_Sso_3, TRUE);
   ```

4. 切换 SLSO:在与每个设备通信之前,您需要切换 SLSO。您可以使用 `IfxQspi_setSlaveSelectOutputControl` 函数来实现这一点。例如,要切换到从机 2,您可以这样做:

   ```c
   IfxQspi_setSlaveSelectOutputControl(&MODULE_QSPI1, IfxQspi_Sso_3, FALSE);
   IfxQspi_setSlaveSelectOutputControl(&MODULE_QSPI1, IfxQspi_Sso_4, TRUE);
   ```

5. 与从机通信:使用 `IfxQspi_SpiMaster_write` 或其他相关函数与从机进行通信。在调用这些函数之前,请确保已正确设置 SLSO 控制。

6. 切换回原始 SLSO:在与第二个从机通信完成后,您可以切换回原始 SLSO,以便与第一个从机通信。例如:

   ```c
   IfxQspi_setSlaveSelectOutputControl(&MODULE_QSPI1, IfxQspi_Sso_4, FALSE);
   IfxQspi_setSlaveSelectOutputControl(&MODULE_QSPI1, IfxQspi_Sso_3, TRUE);
   ```

通过遵循这些步骤,您应该能够使用同一个 QSPI 模块与两个从机通信,并在它们之间切换 SLSO。请注意,您可能需要根据您的具体硬件和软件环境调整这些步骤。
举报

更多回帖

×
20
完善资料,
赚取积分