大家好、
以下是客户的请求:
当器件不向外部发送数据时、是否有任何方法使其处于接收模式、并且在所有其他时间都处于发送模式?
客户 已制作 了每5分钟向传感器发送数据的设备、但现在他希望无线修改其频段和地址、因此当不向外部发送数据时、需要将其调谐为接收模式、 但是 、一旦它被调整为接收模式、它将进入一个环路、并且不能再成为传输模式。
您可以帮助检查此案例吗? 谢谢。
此致、
Nick
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.
大家好、
以下是客户的请求:
当器件不向外部发送数据时、是否有任何方法使其处于接收模式、并且在所有其他时间都处于发送模式?
客户 已制作 了每5分钟向传感器发送数据的设备、但现在他希望无线修改其频段和地址、因此当不向外部发送数据时、需要将其调谐为接收模式、 但是 、一旦它被调整为接收模式、它将进入一个环路、并且不能再成为传输模式。
您可以帮助检查此案例吗? 谢谢。
此致、
Nick
您好 Siri,
SDK 是 simplelink_cc13x0_sdk_1_30_00_06、 不使用堆栈、 
发送参数:
rfc_CMD_PROP_TX_t RF_cmdPropTx =
{
.commandNo = 0x3801,
.status = 0x0000,
.pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.pktConf.bFsOff = 0x0,
.pktConf.bUseCrc = 0x1,
.pktConf.bVarLen = 0x1,
.pktLen = 0x14,
.syncWord = 0x930B51DE,
.pPkt = 0
};
接收参数:
rfc_CMD_PROP_RX_t RF_cmdPropRx =
{
.commandNo = 0x3802,
.status = 0x0000,
.pNextOp = 0,
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.pktConf.bFsOff = 0x0,
.pktConf.bRepeatOk = 0x0,
.pktConf.bRepeatNok = 0x0,
.pktConf.bUseCrc = 0x1,
.pktConf.bVarLen = 0x1,
.pktConf.bChkAddress = 0x0,
.pktConf.endType = 0x0,
.pktConf.filterOp = 0x0,
.rxConf.bAutoFlushIgnored = 0x0,
.rxConf.bAutoFlushCrcErr = 0x0,
.rxConf.bIncludeHdr = 0x1,
.rxConf.bIncludeCrc = 0x0,
.rxConf.bAppendRssi = 0x0,
.rxConf.bAppendTimestamp = 0x0,
.rxConf.bAppendStatus = 0x1,
.syncWord = 0x930B51DE,
.maxPktLen = 0xFF,
.address0 = 0xAA,
.address1 = 0xBB,
.endTrigger.triggerType = 0x1,
.endTrigger.bEnaCmd = 0x0,
.endTrigger.triggerNo = 0x0,
.endTrigger.pastTrig = 0x0,
.endTime = 0x00000000,
.pQueue = 0,
.pOutput = 0
};
此致、
Nick
首先、他们为什么要使用这样的旧 SDK? 如果他们刚刚开始开发、则应使用最新的 SDK (4.20)
我仍然不知道他们在开始时使用了哪些示例以及他们在代码中执行了什么操作。 它们停留在哪个循环中、不同射频命令的状态是什么?
在 RX 和 TX 之间切换时、没有需要特别注意的事项。 只要使用 TX 命令完成无线电、您就可以发送 RX 命令、反之亦然。
如果它们需要在 RX 和 TX 之间更改参数频率、则需要执行新的 CMF_SF。 如果他们更改1MHz 的频率模式、他们还需要更改设置命令。 为了确保新的 setup 命令生效、需要先关闭射频代码、然后再重新启动。
请查看以下内容以供参考:
(+) CC1310:CC1310示例。 最终程序用户更改频率。 -低于1GHz 论坛-低于1GHz - TI E2E 支持论坛
如果他们有问题、他们应该首先尝试获得一个简单的测试程序、以便能够完成他们想要执行的任何操作。 使用 rfPacketRX 和 rfPacketTX 示例作为起点。
如果他们无法使其正常工作、我们应该可以轻松地进行测试、并尝试找出他们的错误。
您好、Siri、
以下是客户的进一步请求:
如以下程序中所述、是什么导致 RF_runCmd 函数执行的参数始终进入接收模式且不能跳出:
static void rxTaskFunction(UArg arg0, UArg arg1)
{
set_colFreq();
RF_Params_init(&rfParams);
if (RFQueue_defineQueue(&dataQueue, rxDataEntryBuffer,
sizeof(rxDataEntryBuffer),
NUM_DATA_ENTRIES,
MAX_LENGTH + NUM_APPENDED_BYTES))
{
/* Failed to allocate space for all data entries */
while (1)
;
}
/* Modify CMD_PROP_RX command for application needs */
RF_cmdPropRx.pQueue = &dataQueue; /* Set the Data Entity queue for received data */
RF_cmdPropRx.rxConf.bAutoFlushIgnored = 1; /* Discard ignored packets from Rx queue */
RF_cmdPropRx.rxConf.bAutoFlushCrcErr = 1; /* Discard packets with CRC error from Rx queue */
RF_cmdPropRx.maxPktLen = MAX_LENGTH; /* Implement packet length filtering to avoid PROP_ERROR_RXBUF */
RF_cmdPropRx.pktConf.bRepeatOk = 1;
RF_cmdPropRx.pktConf.bRepeatNok = 1;
RF_cmdPropRx.pOutput = (uint8_t*)&rxStatistics; //将接收结构体赋给协议接收结构体,便于接收过程中查看接收状态及信息
/* Request access to the radio */
rfHandle = RF_open(&rfObject, &RF_prop,
(RF_RadioSetup*) &RF_cmdPropRadioDivSetup, &rfParams);
/* Set the frequency */
RF_postCmd(rfHandle, (RF_Op*) &RF_cmdFs, RF_PriorityNormal, NULL, 0);
/* Enter RX mode and stay forever in RX */
RF_runCmd(rfHandle, (RF_Op*) &RF_cmdPropRx, RF_PriorityNormal, &callback,
IRQ_RX_ENTRY_DONE);
while (1)
;
}
rf_runCmd (rfHandle、(rf_Op*)&rf_cmdPropRx、rf_PriorityNormal、&callback、
IRQ_RX_Entry_Done);是程序当前以接收模式进入并执行以下接收参数的循环:
rfc_CMD_PROP_RX_t RF_cmdPropRx =
{
.commandNo = 0x3802,
.status = 0x0000,
.pNextOp = 0, // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
.startTime = 0x00000000,
.startTrigger.triggerType = 0x0,
.startTrigger.bEnaCmd = 0x0,
.startTrigger.triggerNo = 0x0,
.startTrigger.pastTrig = 0x0,
.condition.rule = 0x1,
.condition.nSkip = 0x0,
.pktConf.bFsOff = 0x0,
.pktConf.bRepeatOk = 0x0,
.pktConf.bRepeatNok = 0x0,
.pktConf.bUseCrc = 0x1,
.pktConf.bVarLen = 0x1,
.pktConf.bChkAddress = 0x0,
.pktConf.endType = 0x0,
.pktConf.filterOp = 0x0,
.rxConf.bAutoFlushIgnored = 0x0,
.rxConf.bAutoFlushCrcErr = 0x0,
.rxConf.bIncludeHdr = 0x1,
.rxConf.bIncludeCrc = 0x0,
.rxConf.bAppendRssi = 0x0,
.rxConf.bAppendTimestamp = 0x0,
.rxConf.bAppendStatus = 0x1,
.syncWord = 0x930B51DE,
.maxPktLen = 0xFF,
.address0 = 0xAA,
.address1 = 0xBB,
.endTrigger.triggerType = 0x1,
.endTrigger.bEnaCmd = 0x0,
.endTrigger.triggerNo = 0x0,
.endTrigger.pastTrig = 0x0,
.endTime = 0x00000000,
.pQueue = 0, // INSERT APPLICABLE POINTER: (dataQueue_t*)&xxx
.pOutput = 0 // INSERT APPLICABLE POINTER: (uint8_t*)&xxx
};
此致、
Nick
在上面的设置中、位重复模式被启用:
rf_cmdPropRx.pktConf.bRepeatOk = 1;
rf_cmdPropRx.pktConf.bRepeatNok = 1;
这意味着对讲机将永远不会退出 RX 模式(运行命令永远不会返回)、除非出现错误(没有更多可用的数据条目等)。
运行命令正在阻止、因此使用 POST 将使代码进入 while 循环。 但是、除非出现错误或应用程序调用 cancel 命令、否则 RX 不会终止。
Siri