TI中文支持网
TI专业的中文技术问题咨询交流网站

Z-Stack协议栈处理串口事件(CMD_SERIAL_MSG)

我的2530和外部的传感器通过 UART 口 通信,当2530接收到UART数据后向应用层发送CMD_SERIAL_MSG事件然后进行处理发送。想在碰到的问题是外部的传感器模块向2530发送数据是连续的(波特率9600),每次也就发送5个字节。协议栈明显处理不过来,通过逻辑分析仪分析,只能接收到其中几个包,发送频率大概60ms那样。

Viki Shi:

应该是DMA的问题,尝试如下方法:

/ The timeout tick is at 32-kHz, so multiply msecs by 33.
#define HAL_UART_MSECS_TO_TICKS33
将DMA接受数据延时改大,比如300或者200

tim zhuang:

回复 Viki Shi:

你好,改了300之后结果是一样的,还是没解决问题

Viki Shi:

回复 tim zhuang:

1、先停掉其他任务,只跑UART部分,是否能跑通?
2、排查下设备是否有进入低功耗?

tim zhuang:

回复 Viki Shi:

OK,设置不进入睡眠,目前DMA可以接收串口数据,但是有另外一个问题,我补充了另外一个图,你可以看下,DMA接收到并且写入到链表,但是应用事件却没收到,CMD_SERIAL_MSG,链表数据会丢失??

Viki Shi:

回复 tim zhuang:

发送频次是多少?UART是比较占内存的,CC2530的内存本身也不多。有没有排查过内存不足的问题?

tim zhuang:

回复 Viki Shi:

排查过,目前频率是60毫秒一个包,一个包就5个字节,改过每隔1秒发一个包一样有问题,还是会漏事件

Viki Shi:

回复 tim zhuang:

1、改为1s后,漏事件的频次有减少吗?
2、数据包格式都一样吗?调用回调函数MT_UartProcessZToolData才能真正触发CMD_SERIAL_MSG事件,进而才能调用对应事件处理函数。此回调函数要求发送过来的数据格式必须与协议栈定义的格式保持一致,否则不会触发CMD_SERIAL_MSG

赞(0)
未经允许不得转载:TI中文支持网 » Z-Stack协议栈处理串口事件(CMD_SERIAL_MSG)
分享到: 更多 (0)