OM6220长包255字节通信程序

zhongke · 362次点击 · 2023-06-13

本帖提供OM6220,长包通信的SDK

文字描述还是贴上来,图片就不贴上来了,需要看的就下载压缩包,里面有文档描述,也有时序图


1.概述

OM6220是北京昂瑞微电子技术有限公司(以下简称“昂瑞微”)2020年推出的一款2.4G收发芯片。是HS6200的增强版本,另外加入了很多新的功能。本使用手册是针对OM6220如何做长数据包通信,数据包内容最长可以到255个字节。需要注意的是,OM6220有改版过,第一版的时候有些功能不是很好用,后面改版的时候修正了,旧版本的chip id小于0x0624,新版本的chip id0x0624或者以上。所以程序里面初始化完成RF之后,先读取chip id,在根据chip id的情况分别走不通的流程,不过初始化都是一样的流程,只是后面使用的时候不太一样。

OM6220不管是旧版本还是新版本,做为长包通信的时候几乎是一样的。OM6220TX FIFORX FIFO都是只有一级,都是32字节长度。所以做长包通信应用的时候对SPI有要求,要使用4线硬件SPI,速率在2M或者以上,效率要高。因为要及时补充FIFO的数据,如果SPI速度跟不上那FIFO里面的数据接不上就不能完成发送,接收端读取也是一样的,如果未能及时取走数据,数据就会被覆盖掉。

做为发送的时候都是初始化配置完成之后,使能边写边发和半空中断。然后首包数据是填写32字节,后面的时候可以通过查询STATUS_EXT状态寄存器及时补充数据,也可以通过中断的方式及时补充数据。查询到半空中断的时候就补充16个字节的数据到FIFO,直到所有的内容都填完到FIFO去发送。新版本的芯片可以查询到发送完成标志,就版本的芯片不一定查询到发送完成标志,所有旧版本的芯片最后一包数据填写完成之后等待250us就可以发送完成。

做为接收端初始化完成并配置好RF之后,使能半空中断边收边读。如果是就版本的芯片要使用中断的方式去接收,否则查询的方式查询STATUS_EXT寄存器有可能最后一包查询不到接收完成标志。新版本的芯片可以使用查询的方式完成接收。

OM6220长包通信时,使用1M通信速率,发255字节的数据从激活发送数据包开始到发送完成,大概需要2.3ms左右。


 

2.OM6220 SPI驱动编写介绍

   刚才前面有提到OM6220支持3线SPI4线SPI,是可以通过软件配置来实现切换的。使用4线SPI的时候,可以配合MCU的硬件SPI速度快,也可以使用模拟的4线SPI,速度就慢一些,但是3线SPI就只能是模拟的了。在编写3线SPI驱动的时候一定要注意,SDIO (MOSI)这个脚是写的时候做为输出,读的时候做为输入,有些人写驱动的时候,再读这个操作的时候容易搞错,不知道读的是哪一个脚的电平,这个要特别注意。我们提供的SDK里面已经做好了硬件4线SPI,软件模拟4线SPI,以及软件模拟3线SPI的驱动,客户只需要修改bsp_spi.h这个文件里面的宏定义即可。SDK是基于STM32F103RBT6来写的,开发板上面有2RF模块接口,所以客户会看到有RF端口选择这个宏,但是这个开发板已经没有了,不提供给客户,客户需自行找开发板。包括是否使用IRQ脚,是否硬件控制CE,都是宏控制的。


图表 1 OM6220SPI驱动配置

下图是SPI操作的接口函数,最终对外使用的是SPI_SendByteSPI_ReadByte函数,这两个函数里面就区分了硬件SPI还是软件SPI,是3线还是4线。


图表 2 SPI操作的接口函数


图表 3 封装起来后的对外SPI读写函数

客户移植的时候主要是针对下面这些函数进行移植,这些函数也是真正跟底层有关的。

1.SPI_Configuration()初始化配置SPI,不管是硬件还是模拟的IO口的初始化配置。

2. SPI_ce_write()操作CE拉高拉低的函数,不管是硬件控制还是寄存器控制。

3. SPI_csn_write()操作CSN拉高拉低的函数。

4. SPI_sck_write()操作SCK拉高拉低的函数。

5. SPI_mosi_write()模拟SPI的时候MOSI拉高拉低的操作。

6. SPI_mosi_read()SPI_miso_read()模拟4线和3线SPI的时候数据输入脚的信号读取函数。

7. hw_4wire_spi_wrd()硬件SPI时的SPI读写操作函数。

8. sw_4wire_spi_wrd()软件模拟4线SPI时的读写操作。

9. sw_3wire_sendbyte()3线模拟SPI时的写函数。

10. sw_3wire_readbyte()3线模拟SPI时的读函数。

11. sw_3wire_gpio_Switch_Dir()3线模拟SPISDIO脚的输入输出配置切换函数。

3.OM6220读写RF寄存器的操作

bsp_spi_rf.c/.h2个文件是最基本的操作RFSPI读写寄存器和写命令的操作接口,要操作RF,都是要基于这些函数的基础上去实现的。下面是接口函数的介绍。

1.SPI_Operation()这个函数是写命令的函数,像清fifo这样的操作,就是在CSN拉低拉高的过程中值王里面写一个字节。

2. SPI_wr_cmd()这个函数是在切换bank的时候用的,主要是这个函数的操作不用或上0x20这个写寄存器的命令。

3. SPI_write_byte()SPI_wr_buffer()2个函数是写1个字节和写多个字节操作的函数。

4. SPI_read_byte()SPI_read_buffer()2个函数是读1个字节和读多个字节操作的函数。

4.OM6220操作RF函数接口介绍

bsp_rf.c/.h2个文件是RF操作的接口,包括初始化RFbank切换,切换通信地址,切换发射功率,切换通信频点,设置晶体负载电容值,开启/关闭数据白化功能,获取芯片chip ID,切换RF工作模式,清状态寄存器,清TX FIFO/RX FIFO,批量配置寄存器,发送数据包,读取数据包,进入和退出睡眠的操作,打印RF所有寄存器配置等等。详细的可以看bsp_rf.h


图表 4 操作RF的接口函数

这里还需要注意一下的是RF初始化的函数,下图框出来的地方,软件复位初始化RF之后,如果等了35ms都没有查询到校准完成标志,则需要重新复位初始化RF避免因为SPI时序的问题导致RF初始化不成功,从而死在等校准标志的地方。


图表 5 OM6220初始化校准配置成2.4  G模式函数

5.OM6220的测试程序

main函数初始化完之后,所以的SDK都是按照test_app();的入口进入测试程序的。进来之后再选择是发载波,还是长包发送,还是长包接收。

5.1 OM6220载波测试

载波测试可以看出RF射频信号的频偏,调制信号看不出频偏。1M速率的时候频偏在±160k范围内是可以的,当然频偏越小越好。控制OM6220发送载波的位是在RF_SETUP这个寄存器的bit7,这个位设置为高,CE拉高就发载波,CE变低了就没有载波。然后频点根据客户需要去设置,可以通过调整OM6220内部寄存器来调整频偏。当然内部寄存器可调整的范围有限,不是并不是所有的板子或者说晶振都可以通过调整内部寄存器来把频偏调整回来,这个跟硬件关系很大,确实调不过来的只能在外部加晶体试试或者是换晶体试试。内部寄存器的值是从015可调。注意看频偏的时候频谱仪的SPAN要打到百k级,比如200k,这样看频偏才准。当然一开始测试的时候如果是打到百k级的SPAN,可能你会看不到信号可以先设置到10M,去抓到频点的peak之后再设置中心频率到peak点,然后再设置SPAN到百k级。从下图中可以看出,数值越大频率越往小走,数值越小频率越往大走,然后步进值不是等幅步进的,数值从小到大变化的时候步进幅度越来越小。下面的测试是循环修改晶体负载电容值测出来的,实际如果固定一个频点的话,是只有一个载波信号出来的。从下图中可以看出,当设置寄存器值为1的时候测的频偏最小,只偏了300hZ


图表 6 OM6220载波测试图片


图表 7 OM6220载波测试代码

5.2 OM6220长包发送测试程序

OM6220可以做长数据包发送,最长可以发255个字节,但是由于OM6220只有一级FIFO,而且FIFO的深度只有32字节,所以需要在启动发送/接收之后需要及时王FIFO里面补充数据/取走数据。所以做长包通信的时候对SPI的速度有要求,要使用硬件4线SPI,速度至少是2M或者以上。如果SPI的速度不够快那就不能及时补充数据/取走数据,就会导致通信失败。最好是使用IRQ脚的中断来处理补充数据/取走数据的操作,要不然旧的芯片可能会有通信不成功的问题,新的芯片目前没有发现查询方式有问题。代码里面要LONG_PACKET_DATA_LEGHT这个宏是定义要发送/接收的数据的长度。


图表 8 OM6220长包收发的宏定义和数组



图表 9 OM6220长包发送测试程序

5.3 OM6220长包接收测试程序

OM6220做为长包接收的时候,就版本的芯片如果使用查询的方式,有可能会接收不完全,新版本的芯片使用查询的方式没有发现接收不成功的情况。为了兼容就版本的芯片,测试程序里面使用了IRQ脚中断信号来处理接收数据,在产生了IRQ中断标志之后就去读取STATUS_EXT状态寄存器,看是产生哪一个标志,如果没有查到产生标志,则会认为误产生的,需要做清理动作,这个不可少的动作。当然,如果客户的芯片没有IRQ脚,且是新版本的芯片,则可以使用查询的方式来接收数据,但是一定要能及时查询到第一包数据的到来,然后接下来的数据就死循环在那里等待接收完成,切不可去做其他事情,否则通信就可能会失败。



图表 10 OM6220长包接收的测试代码

5.4 OM6220长包通信的时序图

下图展示了OM6220座长包通信的时候的时序图,详细的时序图也会提供在资料包里面,客户只需要下载安装” Kingst VIS”这个逻辑分析仪工具即可查看细节。


图表 11 OM6220长包通信的时序图

 



OM6220_Long_Packet-202306136834.rar
被收藏 0  ∙  0 赞  
加入收藏
点赞
0 回复  
善言善语 (您需要 登录 后才能回复 没有账号 ?)

请先登录网站