微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI Zigbee设计交流 > 加密后不能通讯

加密后不能通讯

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

协调器和单一终端通讯

配置如下:

zgPreConfigKeys = TRUE

加密:SECURE=1 ,ZG_SECURE_DYNAMIC=1;

不能入网了终端,ZG_SECURE_DYNAMIC=0也试过还是不能通讯,终端入网过后立即就退网了,不晓得怎么回事

在这个osal_memcpy( zgPreConfigKey, defaultKey, SEC_KEY_LEN );加入断点,主机的defaultKey和终端的defaultKey,都是一样的

协调器和终端那边的设置都一样吗? 

另外你把协调器和终端的程序用flash programmer擦除掉,然后重新烧写程序来测试下。

最后请把你的测试的抓包的log上传出来

加密设置只有

zgPreConfigKeys = TRUE

加密:SECURE=1 ,ZG_SECURE_DYNAMIC=1;

这三个参数么?

抓包的数据如何看?

还有就是怎样才算加密成功呢?

我的抓包器被人借了,晚点传上来。你们有没有关于SmartRF Packet Sniffer的使用手册

一般ZG_SECURE_DYNAMIC设置为0

如果设备两端的设置都一样的,在入网的时候会有秘钥分配,并且成功解密的,说明加密功能是正常的。

抓包已经上传,请帮忙看看是怎么回事

会不会是秘钥发生了变化,刚刚看到你们有个资料说的秘钥是可以升级的,不过由于是全英文,看不太懂

上传截图等于没有上传一样,

要另存为psd文件,这样我才可以打开解析啊!

0184.aa.psd这样可以么

从你的抓包数据来看,是父设备没有发出来tranport key。

这样吧,你重新安装一个新的协议栈,没有任何改动的

你使用的协议栈版本

然后把SECURE=1,zgPreConfigKeys = TRUE加上去,做下测试。

我这边也可以做同样的验证。

好的,我试一下,

我断点调试的时候走到status = osal_nv_item_init( ZCD_NV_PRECFGKEY, SEC_KEY_LEN, zgPreConfigKey );

osal_nv_item_init()返回是NV_ITEM_UNINIT而不是ZSUCCESS所以没有进入

if ( status == ZSUCCESS )
  {
    if ( setDefault )
    {
      // Write the default value back to NV
      status =  osal_nv_write( ZCD_NV_PRECFGKEY, 0, SEC_KEY_LEN, zgPreConfigKey );
    }
  }

不会是你的工作电压有问题吧!

我实际测量供电电压,协调器是3.3V。终端是3V因为终端是电池供电。而且在不加密的情况下,协调器和终端都能正常工作。

VV 大神我找到一点原因,就是我在NV操作的时候使用了

void ClearNCnetmessage(void)
{
    uint8 pg;
     for ( pg = OSAL_NV_PAGE_BEG; pg <= OSAL_NV_PAGE_END; pg++ )
      {
                    HalFlashErase(pg);
      }
}

函数,于是运行 status = osal_nv_item_init( ZCD_NV_PRECFGKEY, SEC_KEY_LEN, zgPreConfigKey );返回status的值总是不对

但是第一就是void ClearNCnetmessage(void)的目的是想清空网络保留的数据,他把密码部分也操作了。

还有就是就算不用 void ClearNCnetmessage(void)函数也仅仅是status == ZSUCCESS成立,setDefault的值还是零,而且我重新安装了协议栈到这一步的时候setDefault也为零。

if ( status == ZSUCCESS )
  {
    

    if ( setDefault )
    {
      // Write the default value back to NV
      status =  osal_nv_write( ZCD_NV_PRECFGKEY, 0, SEC_KEY_LEN, zgPreConfigKey );
    }
    
  }

 

 

YY大神我直接把程序改成这样了也不能通讯

status = osal_nv_item_init( ZCD_NV_PRECFGKEY, SEC_KEY_LEN, zgPreConfigKey );
  status =  osal_nv_write( ZCD_NV_PRECFGKEY, 0, SEC_KEY_LEN, zgPreConfigKey );
  if ( status == ZSUCCESS )
  {
    

    if ( setDefault )
    {
      // Write the default value back to NV
      status =  osal_nv_write( ZCD_NV_PRECFGKEY, 0, SEC_KEY_LEN, zgPreConfigKey );
    }
    
  }

  // clear local copy of default key
  osal_memset(zgPreConfigKey, 0x00, SEC_KEY_LEN);

  return (status);
}

VV大神,我重新安装了协议栈,可以加密并正常通讯。我把我的程序回复到最开始还是不能通讯。我使用对比软件比较发现两者程序都一样。后来我发现我的程序多定义了

NV_RESTORE
NV_INIT
POWER_SAVING

去掉这三个定义,加密也可以通讯。但是这三项在设计中必须的要得呀。如何处理?

vv大神我的加密还没有解决,我认为现象是秘钥出了问题,有没有在调试的过程中看到当前网络秘钥的办法

清空网络保留的数据,不是用这个来做的,直接修改startoption,然后重启就可以了。

// Set the NV startup option to force a "new" join.
zgWriteStartupOptions( ZG_STARTUP_SET, ZCD_STARTOPT_DEFAULT_NETWORK_STATE );

// The device has been in the UNAUTH state, so reset
// Note: there will be no return from this call
SystemResetSoft();

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

网站地图

Top