这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 通讯及无线技术 » 最近测试的2.4g收发一体芯片si24r1,发现pin对pin兼容nrf24l0

共2条 1/1 1 跳转至

最近测试的2.4g收发一体芯片si24r1,发现pin对pin兼容nrf24l01p/nrf2401,交流分享

菜鸟
2019-12-10 10:17:58     打赏
最近公司的要求,要研发一款2.4g校讯通方案,本来想选择nordic的nRF24l01p,打算购买点样品试样了,同行听说直接推荐我一款超低功耗芯片,还跟我说价格方面低了nrf24l01p一倍多,而且pin对pin兼容。我了解了一下这颗芯片,是南京中科微的,国产芯片,抱着试一试的心态,跟代理购买了几个样品,开始测试,本来已经以nrf24l01p去打的板子,我用si24r1替换上去,居然真的完全pin对pin兼容,一点都不需要改动,在之后的测试顺风顺水,老大那边也很满意,直接定下这颗芯片,打算开始量产,好了,废话不多说,我给大家分享一下这颗芯片。Si24R1是一颗由南京中科微专为低功耗无线通信应用场合设计的一颗自有知识产权的2.4G RF芯片。目前主要针对低功耗的校讯通、2.4G停车场、智能家居、无线音频等领域。
   当然,这颗芯片进入大众的视野是与友商的NRF24L01P芯片兼容通信。从而被打上了国产NRF24L01P的标签,更有甚者居然磨掉芯片原本的SI24R1的LOGO打成NRF24L01P,给很多客户产生了很多不必要的损失。大家定向的理解,国产的东西总是会比国外进口的相差到哪里哪里,如此云云。其实,在很多客户在使用Si24R1的时候,通过一定的控制与设计,是可以发挥Si24R1自己独特的特性的。
   不同的芯片设计需要不同的射频布线以及MCU的控制,那么我下面要分享几点自己所知道的一些问题以及解决办法:
   1.进入低功耗(关断)模式后,功耗可能还在1mA左右,正常应该在1.5uA左右。
    解决办法:由于芯片采用CMOS工艺,当芯片处于关断模式时,芯片的数字输入引脚,CE,CSN,SCK,MOSI,必须为低电平,即关断模式下,和上述四路输入引脚相连的MCU的输出必须为低电平,不能为高阻状态或高电平。否则由于输入端累积电荷,会导致内部电路不能关断,而使得功耗增加。
   2.当使用Si24R1号称7dbm的发射功率的时候,距离好像没有增加太多,而且无线音频客户觉得会有很大的噪声。
    解决办法:
       一、友商的nRF24L01+不要求芯片底部的金属焊盘接地,Si24R1规格书上也没要求接地,这是因为发射功率较低只有0dbm的情况,当芯片发射功率大于0dbm以后,芯片底部的金属焊盘会有很多白噪声合到地,而nRF24L01+的参考设计金属PAD下面有走3.3V的电源线,如果使用Si24R1 7dbm的发射功率,没有将底部的3.3V走线移除的话,那些噪声会干扰到电源,从而会增加通信的丢包率以及通信距离。有一些网友在网上提出,使用Si24R1替换NRF24L01P电源处需要多加一个大电容去滤波,这种做法是在一定的设计上是可行的,但是还是有一些朋友的问题没有解决。故,为达到更好的性能,特别是发射较大功率时,建议用户芯片底部PAD全部接地,将3.3V走线重新布线。
       二、无线音频客户做到第一点后还无法解决有噪声的问题,需要考虑这个噪声的来源,电源的纯净度,因为SI24R1相比对电源更加敏感一些,用户可以通过走线顺序来改进。本来电源的走线顺序为LDO-MCU-ADC-RF,整个流程设计下来,走线方便也符合流程,但是这样的设计弊端就是整个MCU与ADC转换(实际噪声maker)的噪声全部串扰到RF的电源中,从而影响无线通信。故,用户可以更改电源走线设计,LDO出来后分两路,一路给到RF,一路给到MCU+ADC。
   3.用户一直在使用nRF24L01P,替换成Si24R1后发现功耗突然大了许多。
     解决办法:对于已经使用nRF24L01+的用户,通常用户会将发射功率配置在0dbm,而此时的寄存器配置对于Si24R1来说,此时的发射功率是4dbm,此时消耗电流为16mA,比0dbm配置消耗的电流要大4-5mA,当系统采用纽扣电池供电时,需要注意这个问题。如果不需要大的发射功率请将发射功率的配置调整到小功率模式,具体配置,参考芯片手册(可配置为100模式,1dbm发射功率模式)。Si24R1的最大功率是7dbm,需要专门配置寄存器,请参考手册。总的说来,发现一个新一代nRF24L01P与上一代nRF24L01相比寄存器没有太大的变化,但是有几个关于通信管道和ACK的寄存器的配置还是与上一代不同的。另外,个人理解shockburst和enhanced shockburst的区别就在于enhanced shockburst可以在接收机回复ACK时挂上1到32字节的数据包,这样就实现了所谓的“全双工”通信。然而实际探查这项功能发现它的作用其实有限,因为是ACK附加数据包,因此它的传输可靠性无法由射频芯片的校验重发机制保证,只能在接收机软件上做改进,而这有时还不如让接收发送机依照发送次序轮流进入发送/接收状态来的方便。只适合回传一些实时性要求高,对传输可靠性要求不严格的数据。


所谓知易行难,在着手做最基础的SPI通信时就接连遇到了问题。首先是AVR的硬SPI无输出。经过查找,最终问题是SPI设定为主机时,SS口要么设置为输出,要么设置为输入时接上拉,否则当SS为输入又悬空或者低电平就会进入从机模式,自然没有输出。这个问题解决了,接下来遇到了一个更基本的问题,SPI的通信机制。一般说来另外两种常见的通信方式中,UART是有收、发两个数据寄存器,I2C则是通过数据包头来区分接收和发送的数据。而SPI只有一个SPDR寄存器,而且只有写入的时候启动SPI产生SCK信号,怎么去读MISO的数据?要自己做外部中断读取吗?后来才明白,SPI的主机和从机各自的一个SPDR通过MOSI和MISO串联成一个类似环形的大移位寄存器。主机的SPDR中的数据从MOSI每移除一位,从机就在相同的SCK上升沿或下降沿通过MISO将一位数据发送给主机。这样,当SCK八个周期后,主机中的SPDR的数据全部移出了而被从机发送来的数据填充,从机则反之,这样,在一字节的通信结束后再读取SPDR,所返回的数据也就是从机发送来的数据。


解决了这个问题后与nRF24L01P的通信也就变得简单了,先将SS拉低,告知nRF24L01P即将启动SPI通信,当通过MOSI第一次向射频芯片写入任何字节时,MISO上都会有一个字节传送给主机,这个就是芯片默认的0X07状态寄存器里的数据,如果我们在第一次写入读取0X01寄存器的数据,那么0X01寄存器的数据只有在下一字节的通信中才会通过MISO回传给主机,而发起下一轮字节通信就需要主机继续发送数据,那么问题来了,读命令已经发送了,那么接下来我该发送什么。在nRF24L01P的数据手册中给出的建议是发送0XFF,这个命令对射频芯片没有任何意义,其实也可以再随便发送其他任意一个数,只是为了避免产生不必要的麻烦而发送0XFF.发送0X00也可以,而且网上的绝大多数例程都是这样用的,但是这实际上是读0X00寄存器指令。读取完毕后,将SS拉高,本轮通信结束。当下一次SS再次拉低时,一切又重新开始。也就是如果上一轮通信的最后MOSI上发送的是0X00,在这一轮第一次发送指令时MISO上移入的并不是0X00寄存器的状态,而依旧是默认的0X07状态寄存器的状态。


有些绕,但是仔细看手册就会发现原来规则很简单。学习就是一个先将书本学厚,再将书本学薄的过程。


此外,MISO和IRQ信号虽然理论上和实际试验都可以达到AVR的0.7VDD的高电平检测电压,但是在实际应用时必须要做3.3V到5V的电平转换,否则极容易被干扰。而且对芯片的初始化也要等到开机后500毫秒在进行,以免因为芯片上电后还未稳定工作而配置不正常,事实也的确证明,芯片从上电到稳定的确存在一个比较长的时间。
但近年来国产芯片的替代品出来后,有理由项目国产芯片在支持产品本身需求的前提下,的却能降低成本。nRF24L01P的国产替代SI24R1也是有一同测试,确实是还可以。需要了解si24r1的,有相关技术疑问欢迎交流马工13823683914 企鹅2355573217





关键词: 2.4G 芯片     nrf24l01p    

菜鸟
2019-12-18 14:13:45     打赏
2楼

大家互相交流


共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]