STM32
直播中

李莉

7年用户 1342经验值
私信 关注
[问答]

si4463发完上电命令(POWER_UP)后 ,为什么返回的都是0xff?

请问大家有没有用过si4463这款无线模块,发完上电命令(POWER_UP)后 ,  发设备信息的命令(PART_INFO),为什么返回的都是0xff,  是我少了哪个步骤了么    帮我看看么?  下面是部分子程序,大家


void MYSI446X_WAIT_CTS(void)
{
        u8 cts=0;
    do
    {
        SI_CSN_LOW;                                
        SPI1_ReadWriteByte( READ_CMD_BUFF );                        
        cts = SPI1_ReadWriteByte( 0xFF );               
        SI_CSN_HIGH;
    }while( cts != 0xFF );
}

void MYSI446X_CMD(u8 *cmd, u8 cmdsize)
{        
    SI_CSN_LOW;
    while( cmdsize -- )
    {
        SPI1_ReadWriteByte( *cmd++ );
    }
    SI_CSN_HIGH;
    MYSI446X_WAIT_CTS( );
}

void MYSI446X_READ_RESPONSE(u8 *buffer, u8 size )
{   
    SI_CSN_LOW;
        SPI1_ReadWriteByte( READ_CMD_BUFF );
        while( size -- )
    {
        *buffer++ = SPI1_ReadWriteByte( 0xFF );
    }
    SI_CSN_HIGH;
    MYSI446X_WAIT_CTS( );
}

void MYSI446X_POWER_UP(void)
{
        u8 cmd[4];

    cmd[0] = POWER_UP;
    cmd[1] = 0x01;       //Boot main application image
    cmd[2] = 0x00;       //TCXO not used, XTAL used.
    MYSI446X_CMD( cmd, 3 );
}

void MYSI446X_PART_INFO(u8 *buffer)
{
        u8 cmd = PART_INFO;

    MYSI446X_CMD(  cmd, 1 );
    MYSI446X_READ_RESPONSE( buffer, 9 );
}

回帖(1)

麦特拉布

2024-5-13 18:07:56
在SI4463无线模块中,返回0xff通常表示接收到的数据是无效的。这可能是由于多种原因导致的,以下是一些可能的原因和解决方法:

1. 通信线路问题:请检查您的SPI通信线路是否正确连接,包括数据线、时钟线、片选线等。确保线路没有短路或断路。

2. SPI通信参数设置:请检查您的SPI通信参数设置是否正确,包括时钟速率、数据位宽、CPOL、CPHA等。不正确的参数设置可能导致通信失败。

3. SI4463模块初始化:在发送POWER_UP命令之前,请确保您已经正确地初始化了SI4463模块。这包括设置正确的SPI通信参数、配置GDOx(通用数字输出)引脚等。

4. POWER_UP命令参数:请检查您发送的POWER_UP命令参数是否正确。通常,POWER_UP命令的参数为0x00,表示正常上电。

5. 等待CTS(Clear To Send)信号:在发送PART_INFO命令之前,请确保SI4463模块已经准备好接收命令。您可以通过检测GDO0引脚的状态来判断模块是否准备好。如果GDO0为高电平,表示模块已经准备好接收命令。

6. PART_INFO命令参数:请检查您发送的PART_INFO命令参数是否正确。通常,PART_INFO命令的参数为0x01。

7. 检查SI4463模块的固件版本:如果上述方法都无法解决问题,您可能需要检查SI4463模块的固件版本。固件版本过低可能导致某些功能无法正常工作。您可以联系模块制造商获取固件升级文件。

8. 硬件故障:如果以上方法都无法解决问题,可能是SI4463模块本身存在硬件故障。您可以尝试更换一个模块进行测试。

以下是您提供的子程序的简要分析:

```c
void MYSI446X_WAIT_CTS(void){
    u8 cts=0;
    do {
        SI_CSN_LOW;
        // 这里应该添加发送命令和接收数据的代码
        SI_CSN_HIGH;
        // 检查接收到的数据是否为0xff
        if (接收到的数据 != 0xff) {
            cts = 1;
        }
    } while (cts == 0);
}
```

请确保在SI_CSN_LOW和SI_CSN_HIGH之间添加了正确的发送命令和接收数据的代码。同时,检查接收到的数据是否为0xff,如果不是,说明模块已经准备好接收PART_INFO命令。

希望以上信息对您有所帮助。如果问题仍然存在,请提供更多关于您的硬件连接和程序设置的详细信息,以便进一步分析和解决问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分