如何判断BLE包类型?
void RF_Init( void )
{
  uint8 state;
  rfConfig_t rfConfig;

  taskID = TMOS_ProcessEventRegister( RF_ProcessEvent );
  rfConfig.accessAddress = 0x8E89BED6;	// 禁止使用0x55555555以及0xAAAAAAAA ( 建议不超过24次位反转,且不超过连续的6个0或1 )
  rfConfig.CRCInit = 0x555555;
  rfConfig.Channel = 37;
  rfConfig.LLEMode = LLE_MODE_AUTO;
  rfConfig.rfStatusCB = RF_2G4StatusCallBack;
  state = RF_Config( &rfConfig );
  PRINT("rf 2.4g init: %x\n",state);
  /*state=3;
  while(--state){
    RF_Tx( TX_DATA,16, 0x02, 0x02 );
  }*/


	{ // RX mode
		state = RF_Rx( TX_DATA,16, 0, 0x02 );
		PRINT("RX mode.state = %x\n",state);
	}

	{ // TX mode
//		tmos_set_event( taskID , SBP_RF_PERIODIC_EVT );
	}
}

使用PHY接收数据时,要指定接收的数据包类型,0xff为任意,那么接收到的数据如何判断是何种BLE类型包?比如通用广播包类型为0,可以在rf_rx的时候设置接收类型为0,那么如果设置成FF,我该如何判断BLE包类型?

初始化时候按照下面配置:

//LLEMode的bit7置1即可把接收到的数据第一个字节即由rssi变为pkt_type
//本配置适用于比较新的CH579/CH573的lib
rfConfig.LLEMode = LLE_MODE_AUTO|(1<<7);

在接收到数据的回掉函数里获取pkt_type:

PRINT("rx pkt type:%02x\r\n",rxBuf[0]);


如果此时仍然想要得到rssi,

可以由下面两种方式:

1, 仍然根据数据包里数据

//本方式读写的,就是指示本数据包接收时候的rssi,
//其rssi是从传入的指针(指针传入是对齐到4字节的)开始到有效数据结束后的紧接着的,第一个对齐4字节内的第2个byte:
PRINT("rssi at:%d,rssi:%d\r\n",2+((rxBuf[1]+5)&0xffc),(int8_t)rxBuf[2+((rxBuf[1]+5)&0xffc)]);

2,通过API读取:

//在极限情况下,比如当前包收到了,紧接着又来了一包,这种情况下,这个api读的会是第二个包的rssi.
extern s8 BLE_ReadRssi( void )



多谢。

可是最新的573LIB有问题,我还用着1.2的。1.3的RF_PHY里面只能设置频率字段才能接收蓝牙包。问题是接收频率只能设置2400.如果想接收37信道设置频率2402等等,完全就接收不到。之前给技术支持回馈过,好像没下文了。


LLE_MODE_BASIC模式,不要设置频率部分,然后channel 设置为广播信道就好了,比如37,38,39


你好,现在使用582蓝牙5,以上是否还成立,LLEMode的bit7置1即可把接收到的数据第一个字节即由rssi变为pkt_type,SDK里是#define  LLE_MODE_NON_RSSI            (1<<7),是否还能用这个方法得到RSSI和pkt_type


在582上依然是可以的,通过以上方法获取rssi和pkt_type。


试过不行,就用obsever了


只有登录才能回复,可以选择微信账号登录