请教:CC1101接收端的地址过滤问题?
TX端发出的数据包为:08 FE 01 02 03 04 05 06,表示包长08、地址FE、用户数据6Byte,相关寄存器设置为:0x04,// PKTCTRL1 关闭地址过滤为 0x04,开启地址过滤为 0x05,再增加广播地址 00 的方式为 0x06、继续增加广播地址 FF 的方式为 0x07
0x04,// PKTCTRL0 固定数据包长方式为 0x04,可变数据包长方式为 0x05
0x22,// ADDR 发送端的本机地址
0x0F,// PKTLEN 最大允许数据包长
RX端的相关寄存器设置为:
0x04,// PKTCTRL1 关闭地址过滤为 0x04,开启地址过滤为 0x05,再增加广播地址 00 的方式为 0x06
0x04,// PKTCTRL0 固定数据包长方式为 0x04,可变数据包长方式为 0x05
0xFE,// ADDR 接收端的本机地址
0x0F,// PKTLEN 最大允许数据包长
在如上的寄存器参数设置情况下,接收端能正确地收到发送端发出的数据包,各项数据都完全正确。
现在需要启用接收端的地址过滤功能,将 PKTCTRL1 = 0x06 后,无论发送端的数据包第2字节设为0xFE、或者是设为0x00,接收端都不能收到任何数据了!!!
请问除了修改 PKTCTRL1 之外,还有什么地方需要对应地调整?
谢谢指点... 可能的问题:
1、你的包长度为8,而最大允许的包长度为0x0F,又是采用固定包长度,这里显然有问题。
解决问题的办法:把固定包长度改为可变包长度。
原因:
1> 当采用固定包长度时,包的第一字节是地址,而不是包的长度(包的长度由PKTLEN决定);
2> 当采用可变包长度时,包的第一字节才是包的长度,第2个字节才是地址。
明白了吗? 谢谢指点,可变包长的方式验证OK 学习了 学习了 mark mark 奇怪,我设置如下
0x06,// PKTCTRL1 关闭地址过滤为 0x04,开启地址过滤为 0x05,再增加广播地址 00 的方式为 0x06、继续增加广播地址 FF 的方式为 0x07
0x05,// PKTCTRL0 固定数据包长方式为 0x04,可变数据包长方式为 0x05
0x02,// ADDR 发送端的本机地址
0x20,// PKTLEN 最大允许数据包长
发送0x08,0x02,0x01,0x02,0x03,0x04,0x05,0x06。接收端还是无法正确接收。
请问楼主,接收端不用程序判断地址来过滤了吧,另外读取到的第一个字节真的是数据包长度,然后读取的第二个字节真的是目标地址? 回复【7楼】gavin_li
-----------------------------------------------------------------------
回复【楼主位】scty
-----------------------------------------------------------------------
同7楼的设置 也想知道还需要程序里判断地址吗? 回复【1楼】wuzhujian吴助建
可能的问题:
1、你的包长度为8,而最大允许的包长度为0x0f,又是采用固定包长度,这里显然有问题。
解决问题的办法:把固定包长度改为可变包长度。
原因:
1> 当采用固定包长度时,包的第一字节是地址,而不是包的长度(包的长度由pktlen决定);
2> 当采用可变包长度时,包的第一字节才是包的长度,第2个字节才是地址。
明白了吗?
-----------------------------------------------------------------------
这个是正确的。 地址滤波 需要在接收端程序判断地址数据吗?我判断了但是无法接收。我用串口显示来判断的。QQ指教下:664974392
页:
[1]