近来一直在研究无线项目,其中的重点就是无线收发芯片,可以正常的发送接收数据了,无线项目的大难题也就解决了。于是开始收集各种无线收发芯片的资料,例如NRF24L01,CC1101,一些LoRa模块还有一些超外差无线模块等等,但是他们有着相同的问题,一是例如NRF24L01和CC1101之类的使用QFN封装的模块在自制上存在焊接困难度的问题,再就是这些模块普遍都有着过于繁杂的外围电路(一些电感电容),无法将其做到很小的体积。于是在查阅了很多资料后,有一款小巧的无线模块进入我的眼帘,就是LT8920。
先不谈他的各项参数指标相对其他模块有什么优劣,光是这个采用了SSOP16的引脚封装就使得其焊接容易了许多。并且其简洁的外围电路着实易于制作,只需要一个晶振一个电容即可,这确实在焊接难度和外围电路成本上秒杀其他芯片。于是我开始对这个芯片进行了学习,希望可以使用它做出一些项目。调试起来还是废了一番周折,因为厂家给出的数据手册并不清楚,所以很多东西都是摸着石头过河,在前前后后调试了大概3天左右,终于可以正常的收发数据,下面我就分享一些学习的过程。
拿到一个新的芯片,想要了解他就一定要去下载数据手册,一般在网上都可以找到,有中文的有英文的,遇到英文的数据手册就需要具备一定的英语阅读能力才可以理解清楚意思。这个芯片的数据手册我也会放到文章的最后,大家可以下载来学习。
1.基本介绍
这款芯片使用的是2.4G频段进行通信,可以设置通信频率,发射速率以及发射功率,电源使用2.2V到3.6V的电压都可以,发射时电流在20毫安左右,接受电流在18毫安左右,可以说比较省电的一款芯片。芯片内置倍频电路,但是没有内置晶振,所以需要外接一颗12Mhz的晶振,晶振的补偿电容芯片已经内置了,所以无需外接。对于芯片与MCU的通信方面,使用的是SPI总线协议,最高支持10Mhz的速度。为了更好的兼容一些低速的MCU,这款芯片内置FIFO缓存器。
如下图给出了典型应用电路:
2.通信代码编写
看完了这些参数,我对这款芯片也有了一些了解,下面要做的就是编写程序进行通信了。我使用的是STC8单片机来对这个芯片进行控制,由于模块采用的是4线的SPI总线通信,尽管一些STC的单片机上带有硬件的SPI总线接口,但是为了程序的可移植性,整个程序使用软件模拟SPI总线协议来进行与LT8920的通信。
既然是使用SPI通信,那么肯定数据手册里面就有一些关于通信时序的说明,我在数据手册里面找到如下:
可以看到芯片是在时钟的下降沿读取MOSI线上的数据和在MISO线上发送数据,并且先发送高位,再发送低位。并且可以看出一次需要读取2字节(16位)的数据,看完这个时序图,我就很容易的写出了SPI接口的写入函数。
对于从LT8920上读取寄存器数据,需要注意的一点是每次SPI通信的地址最高位是读写标志位,写入的时候是0,读取的时候是1,所以在SPI读取函数中,所有的地址都需要加0x80,如图:
写完这两个函数之后,寄存器的配置就可以使用这两个函数了,但是我注意到手册中说到,对于FIFO寄存器(就是存储发射和接受数据的寄存器),可以采用单字节读取或者写入,那么我就又写了两个函数,一次读取和写入分别都是单字节的,如图:
写完这两个函数,基本的SPI通信就没问题了,下面我就开始对LT8920的寄存器进行逐一的了解与设置,这耗费了较多的时间。
3.寄存器设置与初始化
对于在LT8920中的寄存器,其地址和其寄存器的编号相同,这就给了编写代码时的便利性,需要操作那个寄存器只需要知道其的编号即可,在LT8920中,一共有近50多个寄存器,对这些寄存器的逐个配置,就可以使用LT8920来收发数据了。但是遗憾的是,手册中并没有逐个逐个说明寄存器的作用,而是只说明了几个重要的寄存器的作用以及配置,但是在手册最后给出了所有寄存器的推荐配置值,于是我参考了手册最后的推荐值以及一些网络上的调试经验,给出了每个寄存器的初值,如图:
可以看出,上电之后先给LT8920进行复位,然后延时5ms,等待晶振输出频率稳定之后就可以开始初始化端口了,我默认使用的都是准双向口,所以将端口设置为1的时候也是作为输入模式。下面是LT8920的初始化时序:
4.接受数据程序
初始化完毕之后就可以开始发送接收数据了,这个芯片有一个外置引脚PKT来指示芯片的FIFO缓存中是否有数据,当有数据的时候,整个外置引脚会被置1,没有的时候则会被置0。所以在编写接受数据的程序时,我只需要不停地判断这个引脚是不是高电平,如果是,那么就进入处理函数,不是就不进入。
对于从LT8920的FIFO中读取接受到的数据,其第一字节表示的是整个数据的长度,单位是字节,所以我在从LT8920的FIFO中读取数据时,先读取一个字节,那么这个字节表示的就是整个数据的长度。具体实现的程序如下:
5.发射数据程序
Lt8920的发射其实也比较简单,向FIFO中写入数据,然后打开发射器等待发射完成(PKT置1),之后读取自动应答寄存器,如果收到应答的话,就代表一次通信成功,实现的代码如下:
发射程序和接受程序都介绍完毕,如果您是使用的其他单片机,如stm32或者arduino,应该整体的配置思路我都讲解的比较清晰,也比较容易就调试好这款模块。
上一篇:51单片机GPS+sim800c GSM定位短信LCD1602液晶显示程序
下一篇:51单片机18b20温度及按键可调上下限报警源程序
推荐阅读最新更新时间:2024-11-12 15:31
设计资源 培训 开发板 精华推荐
- NCN8026AMNGEVB,使用 NCN8026A QFN24L 智能卡接口的评估板
- LT1271、5V 至 12V 升压转换器的典型应用电路
- 继电器控制板
- L6390,适用于工业应用的高压半桥栅极驱动器
- Si4701-EVB,Si4701 高性能、76 至 108 MHz 数字无线电调谐器评估板
- QN9080SIP-DK: 高度可扩展的QN9080SIP应用开发平台
- 使用 Panasonic 的 AN37000A 的参考设计
- NCP1063BUCKGEVB:用于低功率离线 SMPS 评估板的高压开关
- LT1764EQ-1.8 SCR 预稳压器的典型应用可提供跨线路变化的效率
- LTC3130IMSE 12V、600mA 降压-升压型 DC/DC 转换器的典型应用