求助!!!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;
}
附上我的配置文件。
请教大侠们!!!是我的配置文件错误还是数据读取过程错误,小弟在此谢过。
主要是理解此函数,才能变长度。 我们自己编写的API,可发任意长度,SI提供的API要理解。 本帖最后由 落叶飘飘 于 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-30 12:39
芯片厂商的问题芯片开发的时候本身就出现了问题, 建设选择其他公司的芯片。之前开发也是用这个后来进 ...
哥们,我也遇到这种问题了,一开始没问题,运行一段时间后就死机了,实在找不出问题在哪里了 gaoyong118 发表于 2016-12-26 16:46
哥们,我也遇到这种问题了,一开始没问题,运行一段时间后就死机了,实在找不出问题在哪里了 ...
是NIRQ引脚不产生中断了 换用a7139性价比更好。管用sx1278更贵,性能更好 你的数据包的长度放进TX_FIFO的命令的是什么,我在实现可变报数据处理的时候,总是出现CRC校验出错
貌似稿手 发表于 2016-10-26 14:28
会出现死机的问题 小心了
请教使用4438做接收机 突然不能收到数据了,怎么能解决 不理解它的固定长度,可变长度是什么意思啊。这几天看手册 看的晕晕了
页:
[1]