微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > CC2538 发出错误的数据帧

CC2538 发出错误的数据帧

时间:10-02 整理:3721RD 点击:

我们有一个Hub, 使用的是CC2538NF23芯片,协议是ZHA1.2.1

CC253通过SPI方式与主CPU通信


目前这个Hub作为协调器能够控制很多终端设备,但是最近我们发现一个问题

就是有时候APP jni层会接到错误的数据帧,如下:

D/DataFrameReceiver( 1353): received data hex data: 0xfe, 0x1d, 0x44, 0x81, 0x0, 0x0, 0x0, 0x5, 0x52, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d,  

我们已经作过抓包测试,抓到的数据包中并没有此类帧,这些数据并不是从end devices发出来。

我想请教一下为这个问题该如何解决呢?

谢谢!

APP Jni是什么? 和CC2538是什么关系? 错误数据是从2538串口发出来的?

你好, TY

下面是我们测试的示意图

1. 我们通过zigbee sniffer抓包,发现错误的包不是从sensor发出来的;

2. 有一个app 运行在主CPU上,而CPU通过jni方式读取spi;

3. 错误数据帧发生的概率大约是50分之一,大部分从CC2538接受的数据是正常的,如附件所示;

你好,

在CC2538上面的运行的工程ZHA 1.2.1里面的哪一个?

是ZNP工程吗?还是Sample Application?

你们MT6732和CC2538之间交互时SPI的数据帧格式是你们自己定义的,还是使用的TI的MT?

在MT6732上面的,通过SPI收到的数据,做解析处理的这些软件,都是你们自己开发的对吧? 还是使用TI的Linux Gateway方案的。 

这个异常数据包的出现,是MT6732和CC2538没有进行任何数据交互的时候也会出现吗? 还是说某些特定的操作命令以后就会先出现的?

你们复现这个问题的方法,操作顺序是什么样子的。

谢谢!

你好,VV

CC2538上面的运行的工程是Z-Stack Home 1.2.1\Projects\zstack\ZNP\CC2538NF23_spi

相对原始的Zstack工程就是使用新的flash配置,并且作为协调器

所有的数据都是依据TI zigbee协议,没有自定义

通过SPI收到的数据,是通过我们的app根据TI的文档中格式的定义解析的。

如若app解析frame 是alarm report,则将alarm信息传发给手机app。 而MT6732向CC2538传送的数据也是按TI数据格式来的

异常数据包的出现是sensor向CC2538发送数据(0x44, 0x81)后,CC2538向MT6732传递过来。但抓包发现sensor并没有发送过异常数据包

重现这个问题的时候就是将sensor添加到zigbee网络上,而后不停地确发alarm report。大部分时候读取的数据包都是正常数据包,但是偶尔app 就会接受到异常数据包。就如已经添加的log所示

错误的数据帧包括很多重复的字节,不符合zigbee 帧格式。如下所示:
D/zigbee  ( 1353): 4481 AF_INCOMING_MSG
D/DataFrameReceiver( 1353): received data hex data: 0xfe, 0x1d, 0x44, 0x81, 0x0, 0x0, 0x0, 0x5, 0x52, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 0x1d, 
E/zigbee  ( 1353): Parsing of command 17537 failed: java.lang.ArrayIndexOutOfBoundsException: src.length=31 srcPos=19 dst.length=29 dstPos=0 length=29

而正常的是这样的
D/DataFrameReceiver( 2066): received data hex data: 0xfe, 0x1d, 0x44, 0x81, 0x0, 0x0, 0x0, 0x5, 0xe1, 0xe9, 0x1, 0x10, 0x0, 0x44, 0x0, 0xd1, 0xba, 0x1f, 0x0, 0x0, 0x9, 0x19, 0x78, 0x0, 0x0, 0x0, 0x0, 0x2a, 0x0, 0x0, 0xe1, 0xe9, 0x1d,

我们用过不同的sensor,也测试过几个Hub。

 

这个数据在你们的MT6732收到以后,应该也会计算最后的校验,对吧,这个校验有通过吗? 如果校验没通过的话,这个包应该直接丢弃了,即便是错误的数据包也没关系。

如果校验正确的话,那这个数据应该是CC2538组了完整的包发送给MT6732的。 

另外有没有可能是SPI的读取上,多读了数据,因为CC2538是SPI的slave,读写数据都是master决定的。 

你好,请问后面的测试怎么样!

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top