This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2564C: BER Test and other Production Line Tests on CC2564C.

Part Number: CC2564C

Hi TI,

We are working on a Product which use Dual mode feature of CC2564C (BT+BLE).

We like to set up one production line Testing system, So that we can make sure the RF part is working as expected.

From the FCC Testing guides, We are able to put the Device in Continuous TX modes for BR, EDR, and LE. That part is working Fine.

Now to make sure the RX path is also Working as expected, We like to Perform the RX mode Test.

We are following the document: CC256x-Testing-Guide-_2D00_-Texas-Instruments-Wiki.pdf

As we don't have any tester setups, we are using CC2564C itself as the TX Part(instead of  PLT tester) 

It is entering the TX mode using the following functions (verified with RSSI viewer. We observed activity on selected channels) :

HCI_VS_Write_BD_ADDR 0xFC06, "123456781234"

HCI_VS_DRPb_Tester_Packet_TX_RX 0xFD85, 3, 0, 0xFF, 0x1, 0x5, 0, 27, 9, 1, 0x01FF

These functions we rewrote in the Bluetopia stack as follows

void Start_Continuous_TX_RX(unsigned int RF_BTStackID){
    int ret_val;
    Byte_t Length;
    Byte_t Status;
    Byte_t OGF;
    Word_t OCF;
    Byte_t CommandBuffer[30];
    Byte_t ReturnBuffer[12];
    BD_ADDR_t BD_ADDR;
    
    ASSIGN_BD_ADDR(BD_ADDR, 0x12, 0x34, 0x56, 0x78, 0x12, 0x34);
    
    VS_Set_Bluetooth_Address(RF_BTStackID,BD_ADDR);
    
    /* Before continuing, make sure the input parameters appears to be */
    /* semi-valid. */
    if((RF_BTStackID)){
        
        /* Format the HCI VS DRPB Tester Con Tx Command. */
        BTPS_MemInitialize(CommandBuffer, 0, 30);
        
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[0], 0x03);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[1], 0x00);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[2], 0xFF);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[3], 0x01);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[4], 0x03);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[5], 0x00);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[6], 0x1B);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[7], 0x00);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[8], 0x0F);
        ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[9], 0x01);
        ASSIGN_HOST_WORD_TO_LITTLE_ENDIAN_UNALIGNED_WORD(&CommandBuffer[10], 0x01FF);
        
        Length = sizeof(ReturnBuffer);
        OGF = COMMAND_OGF(0xFD85); //#define HCI_VS_DRPb_Tester_Packet_TX_RX
        OCF = COMMAND_OCF(0xFD85); //#define HCI_VS_DRPb_Tester_Packet_TX_RX
        ret_val = HCI_Send_Raw_Command(RF_BTStackID, OGF, OCF, 12, (Byte_t *)CommandBuffer, &Status, &Length, ReturnBuffer, TRUE);
        
    }
}

 

For the RX part we are using the Function 

HCI_VS_DRPb_BER_Meter_Start 0xFD8B, 0, 0, 0x123456781234, 1, 0x1, 27, 1000, 0x1FF, 0x1

This function we rewrote in the Bluetopia stack as follows

void Start_Continuous_RX(unsigned int RF_BTStackID,Byte_t Test_Pattern, Byte_t Frequency_Channel){
	   int    ret_val;
	   Byte_t Length;
	   Byte_t Status;
	   Byte_t OGF;
	   Word_t OCF;
	   Byte_t CommandBuffer[30];
	   Byte_t ReturnBuffer[12];

	   /* Before continuing, make sure the input parameters appears to be   */
	   /* semi-valid.                                                       */
	   //MAX_BLE_Channel = 39
	   if((RF_BTStackID)){

	      /* Format the HCI VS DRPB Tester Con Tx Command.                  */
	      BTPS_MemInitialize(CommandBuffer, 0, 30);

	      ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[0], 0x00);
	      ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[1], 0x00);
	      ASSIGN_HOST_WORD_TO_LITTLE_ENDIAN_UNALIGNED_WORD(&CommandBuffer[2], 0x1234);
	      ASSIGN_HOST_DWORD_TO_LITTLE_ENDIAN_UNALIGNED_DWORD(&CommandBuffer[4], 0x12345678);
	      ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[8], 0x01);
	      ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[9], 0x01);
	      ASSIGN_HOST_WORD_TO_LITTLE_ENDIAN_UNALIGNED_WORD(&CommandBuffer[10], 27);
	      ASSIGN_HOST_WORD_TO_LITTLE_ENDIAN_UNALIGNED_WORD(&CommandBuffer[12], 10);
	      ASSIGN_HOST_WORD_TO_LITTLE_ENDIAN_UNALIGNED_WORD(&CommandBuffer[14], 0x1FF);
	      ASSIGN_HOST_BYTE_TO_LITTLE_ENDIAN_UNALIGNED_BYTE(&CommandBuffer[16], 0x1);

	      Length  = sizeof(ReturnBuffer);
	      OGF     = COMMAND_OGF(0xFD8B); //#define HCI_VS_DRPb_BER_Meter_Start                     ((Word_t)(0xFD8B))
	      OCF     = COMMAND_OCF(0xFD8B); //#define HCI_VS_DRPb_BER_Meter_Start                     ((Word_t)(0xFD8B))
	      ret_val = HCI_Send_Raw_Command(RF_BTStackID, OGF, OCF, 17, (Byte_t *)CommandBuffer, &Status, &Length, ReturnBuffer, TRUE);
	   }


}

Before calling this function Stack initialization is done.

To get the result of  this BER test we use 

HCI_VS_DRP_Read_BER_Meter_Result 0xFD13

 

void Get_BT_BER_Result(){
	int    ret_val;
	Byte_t Length;
	Byte_t Status;
	Byte_t OGF;
	Word_t OCF;
	Byte_t CommandBuffer[30];
	Byte_t ReturnBuffer[65];

	/* Before continuing, make sure the input parameters appears to be   */
	/* semi-valid.                                                       */
	//MAX_BLE_Channel = 39
	if((RF_BTStackID)){
	   Start_Continuous_RX(RF_BTStackID,0,0);

	   osDelay(10000);
	  /* Format the HCI VS DRPB Tester Con Tx Command.                  */
	  BTPS_MemInitialize(CommandBuffer, 0, 30);

	  ReturnBuffer[63] =55;
	  Length  = sizeof(ReturnBuffer);
	  OGF     = COMMAND_OGF(0xFD13); //#define HCI_VS_DRPb_BER_Meter_Start                     ((Word_t)(0xFD8B))
	  OCF     = COMMAND_OCF(0xFD13); //#define HCI_VS_DRPb_BER_Meter_Start                     ((Word_t)(0xFD8B))
	  ret_val = HCI_Send_Raw_Command(RF_BTStackID, OGF, OCF, 0, (Byte_t *)CommandBuffer, &Status, &Length, ReturnBuffer, TRUE);

	  if(ret_val == 0){
		  Display(("Get_BT_BER_Result\n"));
		  Display(("%d\n",ReturnBuffer[63]));
		  for(int i =0;i<Length;i++){
			  Display(("%d: %d\n",i,ReturnBuffer[i]));
		  }
	  }else{
		  Display(("Get_LE_BER_Result Failed\n"));
	  }
	}
}

But I am getting the Result as all Zero's.

Is this the correct way of doing this BER test?

Do we have to pair the RX and TX before testing?

Does TI have any sequence of commands to perform these tests correctly?

 

Thanks!

Vishnuprasad V