落叶飘飘 发表于 2016-10-20 15:27

求助!!!SI4438接收可变长度数据包错误

本帖最后由 落叶飘飘 于 2016-10-20 15:40 编辑

本人刚入手SI4438,经过一段时间调试,可实现收发固定长度数据,可正常读取RSSI。但是接收可变长度数据时,只能收到前两个字节,获取到的数据包长度为2。我使用WDS进行参数配置。我的思路是:
(1)使用variable length模式;
(2) 在start_Tx中指定发送的数据长度;
(3)在start_rx中数据长度设为0.
WDS配置界面如下:





//开始接收可变数据包,在主函数中芯片初始化完成后执行
void vRadio_StartRX_Variable_Packet(u8 channel)
{
// Read ITs, clear pending ones
si446x_get_int_status(0u, 0u, 0u);

   // Reset the Rx Fifo
   si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT);

   /* Start Receiving packet, channel 0, START immediately, Length according to PH config */
   si446x_start_rx(channel, 0u, 0u,
                   SI446X_CMD_START_RX_ARG_RXTIMEOUT_STATE_ENUM_NOCHANGE,
                   SI446X_CMD_START_RX_ARG_RXVALID_STATE_ENUM_RX,
                   SI446X_CMD_START_RX_ARG_RXINVALID_STATE_ENUM_RX );
}

//接收程序:
u8 bRadio_Check_Tx_RX(void)
{//数据处理过程
          u8 kk;
      u8 tmp;
      u8 rssi = 0;
          if(radio_hal_NirqLevel() == RESET)
      {
                  /* Read ITs, clear pending ones */
                  si446x_get_int_status(0u, 0u, 0u);

                kk = Si446xCmd.GET_INT_STATUS.CHIP_PEND;
               if(kk & SI446X_CMD_GET_CHIP_STATUS_REP_CMD_ERROR_PEND_BIT)
                      {      
                              /* State change to */
                              si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_SLEEP);
      
                        /* Reset FIFO */
                              si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT);

                        /* State change to */
                              si446x_change_state(SI446X_CMD_CHANGE_STATE_ARG_NEW_STATE_ENUM_RX);
                     }

                  /* check the reason for the IT */
                  if(Si446xCmd.GET_INT_STATUS.MODEM_PEND & SI446X_CMD_GET_INT_STATUS_REP_SYNC_DETECT_PEND_BIT)
                  {//SYNC WORD DETECT
                            //si446x_frr_a_read(rssi);
                            rssi = App_Read_Rssi_temp();//RF_LEVEL_dBm = RSSI_VALUE/2 - MODEM_RSSI_COMP - 70
                        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                        USART_SendData(USART1,rssi);      //串口打印RSSI
                        GPIO_Reverse(RECEIVEUART_LED_PORT, RECEIVEUART_LED_PIN);
                  }

                  if(Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_PACKET_RX_PEND_BIT)
                  {//接收数据

                              /* Read the length of RX_FIFO */
                              si446x_fifo_info(0u);

                              /* Packet RX */
                              si446x_read_rx_fifo(Si446xCmd.FIFO_INFO.RX_FIFO_COUNT, variableRadioPacket);
                        while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET);
                        USART_SendData(USART1,Si446xCmd.FIFO_INFO.RX_FIFO_COUNT);//串口打印数据包长度      
                        UART1ToPC(variableRadioPacket,Si446xCmd.FIFO_INFO.RX_FIFO_COUNT);//串口打印数据包
                              return TRUE;
                  }

                  if (Si446xCmd.GET_INT_STATUS.PH_PEND & SI446X_CMD_GET_INT_STATUS_REP_CRC_ERROR_BIT)
                  {
                              /* Reset FIFO */
                              si446x_fifo_info(SI446X_CMD_FIFO_INFO_ARG_RX_BIT);
                  }
          }

          return 0;
}

附上我的配置文件。


请教大侠们!!!是我的配置文件错误还是数据读取过程错误,小弟在此谢过。



song9644 发表于 2016-10-20 17:11

主要是理解此函数,才能变长度。

song9644 发表于 2016-10-20 17:12

我们自己编写的API,可发任意长度,SI提供的API要理解。

落叶飘飘 发表于 2016-10-20 17:36

本帖最后由 落叶飘飘 于 2016-10-20 17:44 编辑

song9644 发表于 2016-10-20 17:12
我们自己编写的API,可发任意长度,SI提供的API要理解。
感谢,我找到问题了,我在发送数据包时没有将数据包长度放进TX_FIFO,更改后可以实现任意长度数据发送了。
现在又有另外的问题,在近距离时数据收发正确,距离稍远时,出现数据随机的错误,还有出现数据顺序错乱的情况,请问怎样避免这样的情况?

貌似稿手 发表于 2016-10-26 14:28

会出现死机的问题 小心了

落叶飘飘 发表于 2016-10-27 16:29

貌似稿手 发表于 2016-10-26 14:28
会出现死机的问题 小心了

是有出现这样的情况,不知道是什么原因

貌似稿手 发表于 2016-10-30 12:39

落叶飘飘 发表于 2016-10-27 16:29
是有出现这样的情况,不知道是什么原因

芯片厂商的问题芯片开发的时候本身就出现了问题, 建设选择其他公司的芯片。之前开发也是用这个后来进行不下去,总存在死机问题解决不了。除非冷启动

gaoyong118 发表于 2016-12-26 16:46

貌似稿手 发表于 2016-10-30 12:39
芯片厂商的问题芯片开发的时候本身就出现了问题, 建设选择其他公司的芯片。之前开发也是用这个后来进 ...

哥们,我也遇到这种问题了,一开始没问题,运行一段时间后就死机了,实在找不出问题在哪里了

gaoyong118 发表于 2016-12-26 16:47

gaoyong118 发表于 2016-12-26 16:46
哥们,我也遇到这种问题了,一开始没问题,运行一段时间后就死机了,实在找不出问题在哪里了 ...

是NIRQ引脚不产生中断了

RF-7 发表于 2016-12-27 14:46

换用a7139性价比更好。管用sx1278更贵,性能更好

wjl520tyy 发表于 2017-9-14 09:19

你的数据包的长度放进TX_FIFO的命令的是什么,我在实现可变报数据处理的时候,总是出现CRC校验出错

yang_pengjian 发表于 2018-4-14 09:31

貌似稿手 发表于 2016-10-26 14:28
会出现死机的问题 小心了

请教使用4438做接收机 突然不能收到数据了,怎么能解决

ckc1119 发表于 2018-5-18 16:32

不理解它的固定长度,可变长度是什么意思啊。这几天看手册 看的晕晕了
页: [1]
查看完整版本: 求助!!!SI4438接收可变长度数据包错误