CC1310如何实现组网
Hi,TI工程师,
想在cc1310上实现组网,节点30个左右差不多。有解决方案吗?
您可以尝试 Contiki 6LowPAN ,是支持 CC13xx的。也有私有组网 ,在CCS下集成了Wireless Sensor Network组网例程,一对多 http://www.ti.com/tool/cc13xx-sw
你好,
目前还没有任何联盟为sub1g定义协议,你可以在上面自由的定义自己协议进行组网,比较灵活,可以基于虚拟地址或物理地址,路由等方式组网。我曾经模仿蓝牙的调频协议在CC1310里组网,是完成没问题的。若保存节点信息的话,30个肯定没问题的,若不保存节点信息,自由刷新,多少个都没问题。
建议参考我们的SDK提供的基于EASYLINK的例程 : (concentrator 和node)这两个程序。
(concentrator 和node)这两个例程没有解决冲突的问题。这个冲突又如何解决的?
K三9,
来来,用TI的TI15.4stack.
http://www.ti.com/tool/TI-15.4-STACK
或者像2楼推荐的contiki 6lowpan均可。
Designed for 915MHz FCC / 863MHz ETS 只支持这两个频率吗?
我们有listen before talk这个例程,我把它整合到concentrator和node里面,我这样用过,是很好的解决了冲突问题。
明年初就支持china band了。不远了。
hi Eggsy Pang:
可以将你的这个例程发出学系学习吗?
Hi K999,
不好意思,这几天都在忙,那么晚回复实在抱歉。
由于协议这方面跟客户信息有关,不方便把这个文件给到您。我可以给你跟您看一下怎么实现防止冲突,主要是在下面一个EasyLink_transmit发送函数里面实现:
EasyLink_Status EasyLink_transmit(EasyLink_TxPacket *txPacket)
{
EasyLink_Status status = EasyLink_Status_Tx_Error;
if ( (!configured) || suspended)
{
return EasyLink_Status_Config_Error;
}
//Check and take the busyMutex
if (Semaphore_pend(busyMutex, 0) == FALSE)
{
return EasyLink_Status_Busy_Error;
}
if (txPacket->len > EASYLINK_MAX_DATA_LENGTH)
{
return EasyLink_Status_Param_Error;
}
//store application callback
memcpy(txBuffer, txPacket->dstAddr, addrSize);
memcpy(txBuffer + addrSize, txPacket->payload, txPacket->len);
//packet length to Tx includes address
EasyLink_cmdPropTx.pktLen = txPacket->len + addrSize;
EasyLink_cmdPropTx.pPkt = txBuffer;
if (txPacket->absTime != 0)
{
RF_cmdNop.startTrigger.triggerType = TRIG_ABSTIME;
RF_cmdNop.startTrigger.pastTrig = 1;
RF_cmdNop.startTime = txPacket->absTime;
}
else
{
RF_cmdNop.startTrigger.triggerType = TRIG_NOW;
RF_cmdNop.startTrigger.pastTrig = 1;
RF_cmdNop.startTime = 0;
}
/* Set up the next pointers for the command chain */
RF_cmdNop.pNextOp = (rfc_radioOp_t*)&RF_cmdPropCs;
RF_cmdPropCs.pNextOp = (rfc_radioOp_t*)&RF_cmdCountBranch;
RF_cmdCountBranch.pNextOp = (rfc_radioOp_t*)&EasyLink_cmdPropTx;
RF_cmdCountBranch.pNextOpIfOk = (rfc_radioOp_t*)&RF_cmdPropCs;
/* Customize the API commands with application specific defines */
RF_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM;
RF_cmdPropCs.csEndTime = (IDLE_TIME_US + 150) * 4; /* Add some margin */
RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
// asyncCmdHndl = RF_postCmd(rfHandle, (RF_Op*)&EasyLink_cmdPropTx,
// RF_PriorityNormal, txDoneCallback, EASYLINK_RF_EVENT_MASK);
RF_runCmd(rfHandle, (RF_Op*)&RF_cmdNop, RF_PriorityNormal, &Wcallback, 0);
status = EasyLink_Status_Success;
RF_cmdNop.status = IDLE;
RF_cmdPropCs.status = IDLE;
RF_cmdCountBranch.status = IDLE;
RF_cmdPropTx.status = IDLE;
RF_cmdCountBranch.counter = CS_RETRIES_WHEN_BUSY;
//Release the busyMutex
Semaphore_post(busyMutex);
return status;
}
thanks Eggsy Pang,我试试。
返回这个错误 PROP_ERROR_NO_FS (Synth was not programmed when running Rx or Tx)怎么解决?
hi Eggsy Pang.
我按照你的方法试了好多次了,已加入lbt就接收不到数据,没有lbt的接收正常啊,不知道是什么解决了?
有没有单步调试一下呢?或者用软件SmartRF Studio 作接收方试试看
concentrator和node里面都需要LBT吗?我移植LBT到NODE里,在concentrator这边一直显示WAITING FOR NODES。。。。
能告知一下移植的主要步骤及要点吗?
我也移植了这个,LBT机制的函数,我发现他们的例程中有application_setting这个头文件和源代码,但是我从node中全部拷贝过去还是不好用!
能不能将的详细一点,移植都需要什么文件和参数配置