硬件模块_NRF24L01调试总结(转)

1.样品
一个无线通信项目,原因种种选择了NRF24L01,和一般的器件一样SPI口控制,但是多了射频功能。
网上买了2个STM32的小开发板,就开始调试了,我是模拟SPI,所有的时序都严格按照手册,很快就寄存器读写成功了;
接下来要调通信,一个周期性发送,一个接收;但是接收端始终无法接收,为了证明发射是正常的,刚好有频谱仪用,测试在我所设置的频点存在信号,证明发射正常;查看手册有一个载波监听的寄存器可用,读取发现为1,也就是确实收到信号,但是接受函数收不到;
再次研读手册,将NRF的自动重发和检验功能关闭,居然通了,由于我是大量数据传输,有自己的交互流程,因此就没有把自动重发和检验开启。
初次调试就是这么简单,但是好戏在后头。

2.速率
由于模拟的SPI的clk很慢不到500K,人家NRF说是可以到8M的,因此就改硬件SPI;
在使用时将CS设置为了软控,其他三根线为硬控,但是为了简便,在SPI初始化的时候我就将CS置低,这直接导致我SPI通信异常,使用示波器抓取各种信号,并未发现异常;
意外的将CS信号在每次读写时正常的置高和置低,这样SPI通信正常;
疑惑中,根据度娘的结果“CS不光是片选,一般还作为一次操作序列的起止,所以不能一直拉低”,再次理解NRF24L01,每一个寄存器对应的数据长度不是等长的,有1个字节的,也有5个字节,而数据读写缓冲区是1~32可选的,因此它的CS就是起到控制读写长度的作用,这又是一课啊!
虽然配置硬SPI为8M,但是实际速度却只有3M左右,有说DMA可以完全达到8M,实测是可以,但是因为我的交互中存在各种握手过程,使用DMA不方便,所以放弃DMA。

3.功耗
项目使用的是电池供电,因此功耗是个大问题;目前大概也就430比较低吧,最后选型为mps430FR5969,这个是带铁电flash的速度快,功耗也低;
当然了由于没玩过430,从马云那里买了开发板,移植代码也是费了点神,由于也无线无关不提了;
结合上边的经验,SPI通信很快就通了,但是收数还是收不到;万般无奈求助各种论坛,发现有好多这种发射正常,接收不正常的情况;有帖子说供电问题,后测量NRF的3.3V供电居然有200mV的纹波,再测之前的STM32的供电确实是纹波很小,因此使用杜邦线直飞STM32,接收到数据了,但是此时存在误码了,我的天啊,问题咋就这么多。
再次在STM32平台验证无问题,代码检查多遍没有怀疑的地方,再次怀疑电的问题,在收发端都给NRF的电源增加电容,最后用到了22uf,误码消失。

4.产品

必须走的路,由于之前的NRF24L01是马云的成品,现在我们自己画板,外围匹配和接口要自己做,谁知道还有什么问题啊,天啊!

5.一些测试数据
1)NRF的频率干扰验证
NRF收发功率:0dB 
NRF收发频率:2470M 
NRF收发字节:32个
干扰信号功率:10dB(剥皮的射频线,放置于收发模块之间)
干扰信号频率:2468~2472M之外
发送间隔:10ms
收发距离:20cm
结果:累计发送5000次,数据无丢包、无误码。

2)430的硬SPI速度验证
430外接晶体:8M
配置SPI速率:8M
实测CLK速率:8M
但是,在每8个clk之间会有22us,在STM32中也遇到此情况,但是32M时钟8M的SPI的间隔为4uS。

3)功耗验证
430正常工作不接NRF:3mA,电压3.3V(标称1M=0.2mA,即6.4mA)
STM正常工作不接NRF:15mA,电压3.3V(标称1M=0.1mA,即0.8mA)
NRF接收状态:14mA,电压3.3V(标称12mA)

4)降电压验证
在stm32平台,电压将至2.3V,stm32和nrf都工作正常,电流基本不变,根据P=U*I,降低电压功耗可以很客观的降低。

猜你喜欢

转载自blog.csdn.net/weixin_34981646/article/details/81411756