电子产品世界 » 论坛首页 » 行业应用 » 汽车电子 » 【S32K3学习整理】FS26 SPI 通讯接口适配

共1条 1/1 1 跳转至页

【S32K3学习整理】FS26 SPI 通讯接口适配

高工
2026-11-13 14:19:06     打赏

【简介】

S32K3 系列芯片在电源设计时通常会搭配SBC芯片FS26来配合使用,MCU 需要通过SPI接口对SBC芯片进行配置。FS26 的驱动配置在S32DS中主要包含两个模块,一个是SPI 总线的配置,另一个是FS26的内部寄存器的配置。

【SPI配置】

以下是FS26 的SPI 接口参数说明。

image.png

image.png

我们按照上述说明配置SPI 通讯参数配置。

image.png

image.png


【FS26配置】

S32DS中安装FS26的驱动配置包后就会在配置中看到FS26的驱动配置,将该模块加入到工程配置即可。

image.png

在FS26的配置的SPI设备关联到我们之前配置的SPI设备。

image.png

   在界面中配置驱动参数

image.png

image.png

配置完成后,我们生成代码并添加如下的测试代码来初始化和读取当前的寄存器配置验证通讯配置是否正常。

void fs26_dump_registers(void)
{
    uint8 addr;
    Sbc_fs26_RxFrameType rxData = {0}; /* Received data structure. */
    Std_ReturnType eReturnValue;      /* Error status. */

    for(addr=0;addr<0x19;addr++)
    {
        eReturnValue = Sbc_fs26_ReadRegister(FALSE, addr, &rxData);
        if(eReturnValue == E_OK)
        {
            PRINTF("0x%x: 0x%x 0x%x \r\n",addr,rxData.u8DeviceStatus,rxData.u16ReadData);
        }
        else
        {
            LOG_E("Failed to read register 0x%x ret %d %x %x", addr, eReturnValue,rxData.u8DeviceStatus,rxData.u16ReadData);
        }
    }

    for(addr=0x40;addr<0x59;addr++)
    {
        eReturnValue = Sbc_fs26_ReadRegister(TRUE, addr - 0x40, &rxData);
        if(eReturnValue == E_OK)
        {
            PRINTF("0x%x: 0x%x 0x%x \r\n",addr,rxData.u8DeviceStatus,rxData.u16ReadData);
        }
        else
        {
            LOG_E("Failed to read register 0x%x ret %d %x %x", addr, eReturnValue,rxData.u8DeviceStatus,rxData.u16ReadData);
        }
    }
}

/*==================================================================================================
*                                       LOCAL VARIABLES
*================================================================================================*/

/*==================================================================================================
*                          LOCAL TYPEDEFS (STRUCTURES, UNIONS, ENUMS)
*================================================================================================*/

/*==================================================================================================
*                                   LOCAL FUNCTION PROTOTYPES
*================================================================================================*/

/*==================================================================================================
*                                       GLOBAL VARIABLES
*================================================================================================*/

/*==================================================================================================
*                                       GLOBAL CONSTANTS
*================================================================================================*/

/*==================================================================================================
*                                       GLOBAL FUNCTIONS
*================================================================================================*/

/********************************************************************************************************
 *                                      Shell command define                                            *
 *******************************************************************************************************/
#if (CFG_LITTLE_SHELL_ENABLE == 1U)
#include "littleshell.h"

unsigned int fs26(char argc, char **argv)
{
	Std_ReturnType ret = (Std_ReturnType)E_NOT_OK;
    Lpspi_Ip_StatusType spiret = LPSPI_IP_STATUS_SUCCESS;
    UNUSED(argc);

    if(strcmp(argv[1],"init") == 0)
    {
        spiret = Lpspi_Ip_Init(&Lpspi_Ip_PhyUnitConfig_FS26_Instance_0);
        if(spiret != LPSPI_IP_STATUS_SUCCESS)
        {
            LOG_E("LPSPI init failed %d", spiret);
        }

        ret = Sbc_fs26_Init(&Sbc_fs26_xConfig);
        if(ret != E_OK)
        {
            LOG_E("FS26 init failed");
        }
        else
        {
            LOG_D("FS26 init ok");
        }

        Sbc_fs26_InitDevice();
    }
    else if(strcmp(argv[1],"dump") == 0)
    {
        fs26_dump_registers();
    }
    else if(strcmp(argv[1],"recv") == 0)
    {

    }
    return 0;
}

       上述代码运行后已经可以通过SPI访问FS26 的寄存器

image.png


共1条 1/1 1 跳转至页

回复

匿名不能发帖!请先 [ 登陆 注册 ]