本帖最后由 numenjian 于 2012-4-11 15:18 编辑
本人用ZigBee制作一个无线报警分站,传感器通过ZigBee将数据传送给分站,为了方便区分各个传感器,我打开了模块的硬件地址识别:write_reg_word(CC2420_MDMCTRL0, 0x0AF2); 即:将MDMCTRL0.ADR_DECODE位置1了,帧头中的帧控制域公司规定用 03 88 ,PAN_ID、destAdress等都符合要求,但是分站就是收不到传感器的数据,将MDMCTRL0.ADR_DECODE位清零,即关闭硬件地址识**就能正常接收数据了;我修改帧控制域为 88 61(网上找的资料里的)后,打开硬件地址识别也能正常接收! 不知道是不是帧控制域不合规范啊,网上找了好多资料都讲的模模糊糊的。望高手指点一二,谢谢!
注:传感器发送的帧内容是 12 03 88 99 99 99 FF FE 99 99 +7字节的数据+校验,12是帧长, 03 88是帧控制域,99是队列, 99 99是PAN_ID,FF FE是SHORT_ADDR, 99 99是destAddr。
分站初始化程序:
void init_cc2420(void)
{
// uint32 temp;
comm(CC2420_SXOSCON); //打开晶振
WaitForCrystalOscillator(); //等待晶振稳定
write_reg_word(CC2420_MDMCTRL0, 0x01F2); //关闭自动地址识别
//write_reg_word(CC2420_MDMCTRL0, 0x0AF2); //打开自动地址识别
write_reg_word(CC2420_MDMCTRL1, 0x0500); //设置关联门限值为20
// write_reg_word(CC2420_RXCTRL1, 0x2A56); //控制RX带通滤波器参考偏置电流:3uA
write_reg_word(CC2420_IOCFG0, 0x007F); //设置FIFOP门限为最大值128
write_reg_word(CC2420_SECCTRL0, 0x01C4); //关闭安全使能 0x01c4
write_reg_word(CC2420_RXCTRL0, 0x12E5); //低噪声放大器增益中等
write_reg_word(CC2420_TXCTRL, 0xA0FF); //发射功率设置
SetChannel(RX_channel); //接收信道,选择10信道
comm( CC2420_SFLUSHRX );//清空接受缓冲区
comm( CC2420_SFLUSHTX );//清空发送缓冲区
write_ram(CC2420RAM_PANID,0x99); //本机PAN_ID为0x9999
write_ram(CC2420RAM_PANID+1,0x99);
write_ram(CC2420RAM_SHORTADDR,0xfe); //本机SHORT_ADDR为0xfffe
write_ram(CC2420RAM_SHORTADDR+1,0xff);
comm(CC2420_SRFOFF); //禁止RX/TX
comm(CC2420_SFLUSHRX); //清除接收缓冲区
comm(CC2420_SRXON); //使能接收
} |