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.

[参考译文] CC1200:简单链接-如何同时执行Tx和Rx?

Guru**** 2540720 points
Other Parts Discussed in Thread: CC1200

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/577204/cc1200-easy-link---how-to-make-it-doing-both-tx-and-rx

部件号:CC1200

*应用示例- CC120x Easy Link Tx/Rx (来自CC120x软件示例)

此示例生成一个仅Tx和一个仅Rx的端点。

是否可以使它相互交谈? (半双工)

因此,使两端同时执行Tx和Rx。

  -当一端执行Tx时,B端执行Rx

  -当B端执行Tx时,A端执行Rx

您能否指导如何在Tx模式和Rx模式之间切换

此致,

海登

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    从Rx更改为Tx时,在Rx模式中仅调用"trxSpiCmdStrobe(CC120X_STX);"是否正确?
    是否需要执行更多操作,或者是否有任何调用API的时间要求?

    此致,
    海登
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    www.ti.com/.../swru346b.pdf中的图2 描述了这些状态。

    如您所见,可以从空闲或Tx转至Rx (类似于Tx),该功能在某种程度上取决于设置。 LBT/CCCA设置可以根据RSSI级别对Rx -> Tx进行门控。

    您也可以从Rx或Tx自动转至VISA (RXOFF_MODE/ TXOFF模式)

    您的使用案例是什么,为什么要直接从Rx转到Tx?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,Hayden。

    在我目前正在工作的项目中,我有一个主服务器和几个从属服务器。 其中每个都可以Tx和Rx。

    我不知道这是不是最好的方法,但我正在做这样的事情:

    1.初始化对讲机并创建任务

    void radio_task_init(void)
    {
    	u8 addrFilter[EasyLink_MAX_ADDR_SIZE * EasyLink_MAX_ADDR_filters]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,//广播地址
    																	0xFF,0xff,0xff,0xff,0xff,0xff,0xff,0xff,//自有地址
    																	0xFF,0xff,0xff,0xff,0xff,0xff,0xff};//未使用
    
    	EasyLink_init (dRADIO_EasyLink_modulement);
    	EasyLink设定频率(dRADIO_FREQUENCY);
    	EasyLink_setRfPwrd(dRADIO_POWER);
    
    	//它将接收到广播地址和地址的消息EasyLink_AdeFilter_AdeLink_AdgetLink_AdeFilter( EasyLink_EasyLink_Adget_Adget_Adget_Light_Light_Add_Filter_Adget_Adget_Ad_Adget_Adget_Ad_Adget_Ad_Light_Light_Light_Light_Add_Link_Add_Light_Light_Light_Light_Add_Filter(
    	
    	
    	EasyLink _MAX_ADDR_filters);
    
    	Event_Params eventParams;
    EVENT_PARAM_INIT (&eventParams);
    radioEvents = Event_create(&eventParams, NULL);
    
    	Task_Params taskParams;
    	Task_Params_init(&taskParams);
    	taskParams.STACKSIZE = dRADIO_TASK_STACK_SIZE;
    	taskParams.priority = dRADIO_TASK_priority;
    	taskParams.stack = radioTaskStack;
    	Task_construct (&radioTask,radio_task,&taskParams, 空);
    } 

    2.在任务中,将对讲机置于Rx模式,并等待将对讲机重新置于Rx模式的事件。

    现在我只有一个活动,但我可以在未来举办更多活动。

    static void radio_task(UArg arg0, UArg arg1)
    {
    	u32 eventResult;
    
    	EasyLink_receiveAsync (Rx_callback,0);
    
    	while (1)
    	{
    		eventResult = Event_pend(radioEvents, 0, dEVENT_All, BIOS_wait_Forever );
    
    		IF (eventResult & dEVENT_packet_Received){EasyLink_callback}
    		
    			
    		
    	
    

    3.由于对讲机始终处于Rx模式,因此当接收到新数据包或回叫中发生错误时,我们需要将其重新置于Rx模式。

    静态void rx_callback(EasLink_RxPacket * rxmitter Packet, EasyLink_Status status)
    {if(status
    	== EasyLink_Status_suce)
    	{if(rxCallback
    		!=NULL)&&(RxPacket->len >0))
    		{if(!memcmp((const
    			*)rxPacket->dstAddr->ddr->dstAddr,(con_Broadcast_reastpy);)
    				
    			
    				
    
    			
    			
    
    //进程接收的数据包
    			process_packet(&rxPacket->payload[EasyLink_MAX_ADDR_size]);
    		}//
    
    		将对讲机放回Rx
    		Event_post(radioEvents,dEVENT_packet_received);
    	}
    
    	IF (状态== EasyLink_Status_Rx_Error)||(状态== EasyLink_Error_Timeout)|
    	状态=EasyLink_Error_Error_Status_Error_Error_Error_Link_Error_|
    	//将对讲机放回Rx
    		Event_post(radioEvents,dEVENT_packet_received);
    	}
    
    	IF (status == EasyLink_Status_Aborted)
    	{
    //中止的Rx的函数负责将其放回Rx
    	中}
    

    4.同样,由于对讲机始终处于Rx状态,我们需要在发送数据包之前中止Rx。 发送数据包后,我们将对讲机放回Rx中。

    void radio_send (u8 * address,u8 * data,u8 size)
    {
    	if (size > dRADIO_MAX_DATA_length)
    		size = dRADIO_MAX_DATA_length;
    
    	//在有效负载的前8个字节中插入我们自己的地址
    	EasyLink_getIeeAddr (txPacket.payload);
    
    	memcpy (&txPacket.MAX_DAX_Size)<EasyLink_Size)
    
    	
    
    	txPacket.len =大小;
    	txPacket.absTime = 0;
    	memcpy(txPacket.dstAddr, address, EasyLink_MAX_ADDR_Size);
    
    	EasyLink_abort();
    
    	EasyLink_Transmit (&txPacket);
    
    	//将对讲机放回Rx中
    EasyLink_receiveAsync(Rx_callback, 0);}
    

    我使用这种方法已经有一段时间了,它运行得很好。

    如果TI员工有更好的方法,我将很高兴看到! 欢迎任何改进!

    此致。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好,Mad:

    感谢您的帖子。

    在CC1200中,它只调用SPI命令API来控制设备。
    发现RX / TX模式可与以下呼叫切换。

    从RX到TX (读取完成后)...
    * TxSpiCmdStrobe(CC120X_SFRX);//刷新fifo
    * TxSpiCmdStrobe (CC120X_Sidle);
    * TxSpiCmdStrobe (CC120X_STX);;//启动TX

    谢谢,此致,
    海登
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你(们)好

    您不能使用上述代码。 仅当对讲机处于时,才能发出SFRX选通

    空闲或RX_FIFO错误状态。 用户指南中对此进行了说明。

    如果您在RX中并且想要转至TX,您可以只进行闪存TX (如果已接收到数据包,RX FIFO可以包含数据),或者应该进行闪存空闲,刷新FIFO (SFRX),然后执行闪存STX。

    巴西

    Siri