Other Parts Discussed in Thread: CC2564C
您好、TI!
我们正在开发一款使用 CC2564C 双模特性(BT+BLE)的产品。
我们要设置一套生产线测试系统、确保射频器件按预期工作。
从 FCC 测试指南中、我们能够将器件置于 BR、EDR 和 LE 的连续 TX 模式下。 该部件正常工作。
现在、为了确保 RX 路径也按预期工作、我们将执行 RX 模式测试。
我们关注的是文档: CC256x-Testing-Guide-_2D00_-Texas-Instruments-Wiki.pdf
由于我们没有任何测试仪设置、因此我们使用 CC2564C 本身作为 TX 部件(而不是 PLL 测试仪)
它使用以下功能进入 TX 模式(已使用 RSSI 查看器进行验证。 我们观察到选定通道上的活动):
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
我们在 Bluetopia 栈中重写以下这些函数
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);
}
}
对于 RX 部分、我们使用该函数
HCI_VS_DRPb_BER_Meter_Start 0xFD8B、0、0、0x123456781234、1、 0x1、27、1000、0x1FF、0x1
我们在 Bluetopia 栈中重写了此函数、如下所示
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);
}
}
在调用该函数之前、堆栈初始化已完成。
来获得 我们使用的该 BER 测试的结果
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"));
}
}
}
但我得到的结果是全为零。
这是执行该 BER 测试的正确方法吗?
在测试之前、我们是否必须将 RX 与 TX 配对?
TI 是否有任何序列的命令来正确执行这些测试?
谢谢!
Vishnuprasad