加密后不能通讯
协调器和单一终端通讯
配置如下:
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();