ESL UART与RF问题

802.15.4 based products and Zigbee related discussions
Post Reply
shu121
Posts: 9
Joined: Thu Jan 03, 2019 5:59 pm

Mon Apr 29, 2019 11:47 am

我把ESL的USB通信修改成了UART接口来和外部的MCU通信,UART使用的是非DMA的模式。UART RX中断开启,TX不使用中断,采用查询的方式发送,发现当RF和UART都持续接受数据时,UART的数据会混乱,如果RF不接受数据,则UART正常。
询问贵公司的FAE,回复是UART和RF是不能全双工工作的。
如果是这样那UART和RF就只能分时工作了,即uart开启时RF关闭,RF开启时UART关闭。
测试时,当我认为UART接收某个指令时,调用RF关闭函数。函数如下:
void gataway_close(void)
{
IRQ_Disable();
IRQ_RfIrqSrcClrAll();
IRQ_DisableType(FLD_IRQ_ZB_RT_EN);
IRQ_RfIrqDisable(FLD_RF_IRQ_RX | FLD_RF_IRQ_TX);
IRQ_Enable();
}


发现RF确实没有在工作了,但是UART输出数据没问题,但是如果UART输入的数据打印出来,发现UART接受数据错乱。
比如发送: AD BA 00 01 06 01 02 03 04 05 06 00 15 1C 03 00 31 32 33 CD CD
UART实际接受的数据为 CD CD AD BA 00 01 06 01 02 03 04 05 06 00 15 1C 03 00 31 32 33


这会是因为什么呢?
如果RF要与UART分时工作,有什么可以参考的示例吗?
感谢!
shu121
Posts: 9
Joined: Thu Jan 03, 2019 5:59 pm

Sun May 05, 2019 11:55 am

目前我的做法是在UART接受中断时失能RF的中断,直到UART数据接受完毕后再使能RF的中断,目前测试不会出现UART数据错乱的问题了。只是如果uart接受的数据量比较大时,由于一直不处理节点的数据,会导致节点一直发送请求数据,可能会导致节点的功耗偏大。
TL_Porter
Posts: 21
Joined: Tue Mar 07, 2017 9:31 am

Mon May 20, 2019 3:54 pm

建议使用DMA来处理,设置较大的接收buffer来缓存数据。
Post Reply