找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 22958|回复: 32
收起左侧

一款超小型的无线收发模块LT8920配置思路+单片机发射接收程序

  [复制链接]
ID:241755 发表于 2019-4-14 16:37 | 显示全部楼层 |阅读模式
近来一直在研究无线项目,其中的重点就是无线收发芯片,可以正常的发送接收数据了,无线项目的大难题也就解决了。于是开始收集各种无线收发芯片的资料,例如NRF24L01,CC1101,一些LoRa模块还有一些超外差无线模块等等,但是他们有着相同的问题,一是例如NRF24L01和CC1101之类的使用QFN封装的模块在自制上存在焊接困难度的问题,再就是这些模块普遍都有着过于繁杂的外围电路(一些电感电容),无法将其做到很小的体积。于是在查阅了很多资料后,有一款小巧的无线模块进入我的眼帘,就是LT8920。


先不谈他的各项参数指标相对其他模块有什么优劣,光是这个采用了SSOP16的引脚封装就使得其焊接容易了许多。并且其简洁的外围电路着实易于制作,只需要一个晶振一个电容即可,这确实在焊接难度和外围电路成本上秒杀其他芯片。于是我开始对这个芯片进行了学习,希望可以使用它做出一些项目。调试起来还是废了一番周折,因为厂家给出的数据手册并不清楚,所以很多东西都是摸着石头过河,在前前后后调试了大概3天左右,终于可以正常的收发数据,下面我就分享一些学习的过程。
                  
拿到一个新的芯片,想要了解他就一定要去下载数据手册,一般在网上都可以找到,有中文的有英文的,遇到英文的数据手册就需要具备一定的英语阅读能力才可以理解清楚意思。这个芯片的数据手册我也会放到文章的最后,大家可以下载来学习。


1.基本介绍
这款芯片使用的是2.4G频段进行通信,可以设置通信频率,发射速率以及发射功率,电源使用2.2V到3.6V的电压都可以,发射时电流在20毫安左右,接受电流在18毫安左右,可以说比较省电的一款芯片。芯片内置倍频电路,但是没有内置晶振,所以需要外接一颗12Mhz的晶振,晶振的补偿电容芯片已经内置了,所以无需外接。对于芯片与MCU的通信方面,使用的是SPI总线协议,最高支持10Mhz的速度。为了更好的兼容一些低速的MCU,这款芯片内置FIFO缓存器。
如下图给出了典型应用电路:
lt8920接线图.png



2.通信代码编写
看完了这些参数,我对这款芯片也有了一些了解,下面要做的就是编写程序进行通信了。我使用的是STC8单片机来对这个芯片进行控制,由于模块采用的是4线的SPI总线通信,尽管一些STC的单片机上带有硬件的SPI总线接口,但是为了程序的可移植性,整个程序使用软件模拟SPI总线协议来进行与LT8920的通信。
既然是使用SPI通信,那么肯定数据手册里面就有一些关于通信时序的说明,我在数据手册里面找到如下:
lt8920时序.png



可以看到芯片是在时钟的下降沿读取MOSI线上的数据和在MISO线上发送数据,并且先发送高位,再发送低位。并且可以看出一次需要读取2字节(16位)的数据,看完这个时序图,我就很容易的写出了SPI接口的写入函数。
lt8920写函数.png



对于从LT8920上读取寄存器数据,需要注意的一点是每次SPI通信的地址最高位是读写标志位,写入的时候是0,读取的时候是1,所以在SPI读取函数中,所有的地址都需要加0x80,如图:
lt8920读函数.png



写完这两个函数之后,寄存器的配置就可以使用这两个函数了,但是我注意到手册中说到,对于FIFO寄存器(就是存储发射和接受数据的寄存器),可以采用单字节读取或者写入,那么我就又写了两个函数,一次读取和写入分别都是单字节的,如图:
lt8920单字节读.png lt8920单字节写.png



写完这两个函数,基本的SPI通信就没问题了,下面我就开始对LT8920的寄存器进行逐一的了解与设置,这耗费了较多的时间。


3.寄存器设置与初始化
对于在LT8920中的寄存器,其地址和其寄存器的编号相同,这就给了编写代码时的便利性,需要操作那个寄存器只需要知道其的编号即可,在LT8920中,一共有近50多个寄存器,对这些寄存器的逐个配置,就可以使用LT8920来收发数据了。但是遗憾的是,手册中并没有逐个逐个说明寄存器的作用,而是只说明了几个重要的寄存器的作用以及配置,但是在手册最后给出了所有寄存器的推荐配置值,于是我参考了手册最后的推荐值以及一些网络上的调试经验,给出了每个寄存器的初值,如图:
lt8920初始化.png lt8920初始化1.png



可以看出,上电之后先给LT8920进行复位,然后延时5ms,等待晶振输出频率稳定之后就可以开始初始化端口了,我默认使用的都是准双向口,所以将端口设置为1的时候也是作为输入模式。下面是LT8920的初始化时序:
lt8920初始化时序.png



4.接受数据程序
初始化完毕之后就可以开始发送接收数据了,这个芯片有一个外置引脚PKT来指示芯片的FIFO缓存中是否有数据,当有数据的时候,整个外置引脚会被置1,没有的时候则会被置0。所以在编写接受数据的程序时,我只需要不停地判断这个引脚是不是高电平,如果是,那么就进入处理函数,不是就不进入。
对于从LT8920的FIFO中读取接受到的数据,其第一字节表示的是整个数据的长度,单位是字节,所以我在从LT8920的FIFO中读取数据时,先读取一个字节,那么这个字节表示的就是整个数据的长度。具体实现的程序如下:
lt8920接受端.png



5.发射数据程序
Lt8920的发射其实也比较简单,向FIFO中写入数据,然后打开发射器等待发射完成(PKT置1),之后读取自动应答寄存器,如果收到应答的话,就代表一次通信成功,实现的代码如下:
lt8920发射端.png

                          
发射程序和接受程序都介绍完毕,如果您是使用的其他单片机,如stm32或者arduino,应该整体的配置思路我都讲解的比较清晰,也比较容易就调试好这款模块。所以大家如果有什么关于这个模块的问题,欢迎来咨询我,我的QQ:2877137721。在近期准备使用这个模块来做一些小巧的项目,请大家期待。

全部datasheet资料51hei下载地址:
C77997_LT8920编带_2016-10-09.zip (923.57 KB, 下载次数: 430)
回复

使用道具 举报

ID:544323 发表于 2019-5-22 00:39 | 显示全部楼层
学习了!谢谢分享!!!
回复

使用道具 举报

ID:476527 发表于 2019-6-12 14:26 | 显示全部楼层
近期,我的某项目使用到了这款芯片,楼主你的配置没啥问题,但有个致命的风险你没注意到:
FIFO数据包的首位是表示剩余数据包大小的字节,如果这个字节在通信时受到干扰,使之变为很大,那你接下来要写入的数组就会溢出边界,直接导致你的单片机复位!
这个复位问题在我去测试的时候频繁遇到,经过痛苦的排查之后,我才意识到,我没有对这个关键的首字节进行检查!
解决的办法很简单,在读完FIFO的首字节之后,判断一下它的大小是否正常即可。
  1. /*这段代码有出现问题的可能*/
  2. j = OneByte;
  3. //请在此处对j的值经行检查!
  4. while(i<j){
  5.     //读出数据,放进数组里
  6. }
复制代码

评分

参与人数 1黑币 +15 收起 理由
IdeaMing + 15 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:560917 发表于 2019-6-12 14:58 | 显示全部楼层
谢谢你的分享
回复

使用道具 举报

ID:573382 发表于 2019-6-27 14:09 | 显示全部楼层
收藏!!
回复

使用道具 举报

ID:168320 发表于 2019-7-6 10:05 | 显示全部楼层
多谢分享
回复

使用道具 举报

ID:502376 发表于 2019-7-10 10:12 | 显示全部楼层
学习了。
回复

使用道具 举报

ID:486481 发表于 2019-7-24 08:44 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:605655 发表于 2019-8-31 10:20 | 显示全部楼层
感谢分享,现在准备着手项目了
回复

使用道具 举报

ID:633767 发表于 2019-11-1 11:48 | 显示全部楼层
学习了,刚好有用到
回复

使用道具 举报

ID:498530 发表于 2019-11-2 00:24 | 显示全部楼层
Similarv 发表于 2019-6-12 14:26
近期,我的某项目使用到了这款芯片,楼主你的配置没啥问题,但有个致命的风险你没注意到:
FIFO数据包的首 ...

你好,我想问下,我基本调试已经成功了,但在读取RSSI的时候遇到了些问题,手册上说6寄存器,是RSSI的原始数据,所有初始化均参照手册配置完成,但检测不到RSSI
回复

使用道具 举报

ID:655879 发表于 2019-12-4 13:26 | 显示全部楼层
好象不错
回复

使用道具 举报

ID:669348 发表于 2019-12-21 10:21 | 显示全部楼层
学习了,我的MSP430上面还没初始化调通
回复

使用道具 举报

ID:717680 发表于 2020-3-28 16:57 | 显示全部楼层
谢谢分享,正好也在做类似的项目,学习了
回复

使用道具 举报

ID:667303 发表于 2020-4-1 12:14 | 显示全部楼层
谢谢老板,资料不错!!!
回复

使用道具 举报

ID:728403 发表于 2020-4-13 17:31 | 显示全部楼层
谢谢分享,正好也在做类似的项目,学习了
回复

使用道具 举报

ID:299748 发表于 2020-4-29 11:13 | 显示全部楼层
Similarv 发表于 2019-6-12 14:26
近期,我的某项目使用到了这款芯片,楼主你的配置没啥问题,但有个致命的风险你没注意到:
FIFO数据包的首 ...

我使用时也是经常复位
回复

使用道具 举报

ID:81102 发表于 2020-5-5 22:11 | 显示全部楼层
getwch 发表于 2019-11-2 00:24
你好,我想问下,我基本调试已经成功了,但在读取RSSI的时候遇到了些问题,手册上说6寄存器,是RSSI的原 ...

你问题解决了么 我也跟你遇到同样的问题 RSSI有问题 前辈请指教下
回复

使用道具 举报

ID:81102 发表于 2020-5-5 22:50 | 显示全部楼层
getwch 发表于 2019-11-2 00:24
你好,我想问下,我基本调试已经成功了,但在读取RSSI的时候遇到了些问题,手册上说6寄存器,是RSSI的原 ...

我也遇到相同问题 你那解决了么 ?
回复

使用道具 举报

ID:115836 发表于 2020-5-6 22:00 | 显示全部楼层
楼主好,请问一下这个芯片能不能用于一对多或者多对多的通信?
回复

使用道具 举报

ID:717680 发表于 2020-5-11 15:04 | 显示全部楼层
谢谢分享,最近正在做类似的项目刚好用上!
回复

使用道具 举报

ID:379432 发表于 2020-6-3 15:41 | 显示全部楼层
lt8920很垃圾的芯片,datasheet太乱,还是用国外的好点
回复

使用道具 举报

ID:282538 发表于 2020-6-15 16:21 | 显示全部楼层
谢谢分享,学习了。
回复

使用道具 举报

ID:282538 发表于 2020-6-16 08:29 | 显示全部楼层
我以为是参考代码,下载下来看才知道是规格书
回复

使用道具 举报

ID:307544 发表于 2020-6-16 10:14 | 显示全部楼层
设计思路清晰,谢谢分享!
回复

使用道具 举报

ID:794759 发表于 2020-7-1 17:28 | 显示全部楼层
请教一下,LT8920到天线之间的滤波电路需要吗?
怎样设计效果最好?
回复

使用道具 举报

ID:282538 发表于 2020-7-28 13:39 | 显示全部楼层
JJINGER 发表于 2020-7-1 17:28
请教一下,LT8920到天线之间的滤波电路需要吗?
怎样设计效果最好?

可以找FAE 问问看,我用LT8988,应该更便宜些,SOT-23-6的原厂FAE跟我讲0.5RMB用的模拟I2C做的
回复

使用道具 举报

ID:287770 发表于 2020-10-20 18:48 | 显示全部楼层
289466080 发表于 2020-7-28 13:39
可以找FAE 问问看,我用LT8988,应该更便宜些,SOT-23-6的原厂FAE跟我讲0.5RMB用的模拟I2C做的

你好,我最近也在弄这个芯片,LT8960,,也是IC的,你有代码给我参考一下嘛?我看他们的都是SPI的。
回复

使用道具 举报

ID:230926 发表于 2020-11-11 15:42 | 显示全部楼层
@289466080 请教一下,LT8988的IIC代码是否可以提供一下,多谢多谢!
回复

使用道具 举报

ID:3666 发表于 2021-3-29 15:47 | 显示全部楼层
楼主,如果我一个单片机上接三个TL8902应该如何做
回复

使用道具 举报

ID:301968 发表于 2022-5-5 10:25 | 显示全部楼层
4.接受数据程序
初始化完毕之后就可以开始发送接收数据了,这个芯片有一个外置引脚PKT来指示芯片的FIFO缓存中是否有数据,当有数据的时候,整个外置引脚会被置1,没有的时候则会被置0。所以在编写接受数据的程序时,我只需要不停地判断这个引脚是不是高电平,如果是,那么就进入处理函数,不是就不进入。

PKT引脚作用解释错误,请查看寄存器说明
回复

使用道具 举报

ID:46971 发表于 2023-6-22 12:44 | 显示全部楼层
学习了,谢谢楼主分享,十分感谢!
回复

使用道具 举报

ID:1114440 发表于 2024-3-27 15:44 | 显示全部楼层
getwch 发表于 2019-11-2 00:24
你好,我想问下,我基本调试已经成功了,但在读取RSSI的时候遇到了些问题,手册上说6寄存器,是RSSI的原 ...

您好请问您解决了吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表