本帖最后由 落叶飘飘 于 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;
}
附上我的配置文件。
radio_config.zip
(7.39 KB)
请教大侠们!!!是我的配置文件错误还是数据读取过程错误,小弟在此谢过。
|