本帖主要是分享HS6230的使用笔记,由于板块的文字加图片编辑比较麻烦,所以一附件的形式提供完整的内容,这里也把文档的文字贴上,但是不贴图片 1.概述HS6230是北京昂瑞微电子技术有限公司(以下简称“昂瑞微”)2019年推出的一款2.4G单发芯片。是在原来HS6200的基础上裁减掉接收部分,另外加入了一些新的功能。本使用手册是针对HS6230如何使用做详细的介绍,尽力写详细,使没接触过HS6230的客户也能很快上手。 HS6230的调制方式是FSK,只有1M和250K的速率,没有2M速率。信道从2.4G到2.4835G。数据包格式兼容HS6200,NORDIC还有BLE标准31字节广播包。当然HS6230也兼容昂瑞微所有SOC芯片的2.4G私有协议通信。晶体使用的是16M,±60ppm,负载电容小于12pf的晶体。可以不需要外挂负载电容,通过调整内部电容来调整频偏,当然这个频偏跟板子也是有很大关系的,并不一定能通过调整寄存器来把频偏校得准。支持3线SPI和4线SPI,但是不能软件切换,需要硬件打线的时候确认好SPI是3线还是4线。可以硬件控制CE,也可以软件控制CE。可以使用HS6230内部的2个按键脚做按键检测,但是这2个脚做2X4的按键检测是有按键优先级和组合区别的,这个按键检测同样可以配置成唤醒MCU的功能。最大发射功率做到12dB,但是使用大功率的时候要有0.5pF到1pF左右的电容到地。初始化流程简单,如果是要睡眠的话,初始化的地方要写一下寄存器保证睡眠的时候校准数据不丢失。睡眠的时候电流在1~2uA左右。12dB发射的时候电流在40多mA左右。工作电压在1.9v到3.6v。内部没有LDO,所以供电电压低的时候发射功率会变小。
2.HS6230 SPI驱动编写介绍刚才前面有提到HS6230支持3线SPI和4线SPI,但是是在封装的时候就通过打线确认好了的。如果使用模块做调试的时候,是通过MOD这个脚的接高(4线)接低(3线)来选择,但是一定要注意更改后要重新给模块上电以使芯片重新正确SPI线数。使用4线SPI的时候,可以配合MCU的硬件SPI速度快,也可以使用模拟的4线SPI,速度就慢一些,但是3线SPI就只能是模拟的了。在编写3线SPI驱动的时候一定要只有,SDIO (MISO,非MOSI脚)这个脚是写的时候做为输出,读的时候做为输入,有些人写驱动的时候,再读这个操作的时候容易搞错,不知道读的是哪一个脚的电平,这个要特别注意。我们提供的SDK里面已经做好了硬件4线SPI,软件模拟4线SPI,以及软件模拟3线SPI的驱动,客户只需要修改bsp_spi.h这个文件里面的宏定义即可。SDK是基于STM32F103RBT6来写的,开发板上面有2个RF模块接口,所以客户会看到有RF端口选择这个宏,但是这个开发板已经没有了,不提供给客户,客户需自行找开发板。包括是否使用IRQ脚,是否硬件控制CE,都是宏控制的。 图表 1 HS6230的SPI驱动配置 下图是SPI操作的接口函数,最终对外使用的是SPI_SendByte和SPI_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线模拟SPI是SDIO脚的输入输出配置切换函数。 3.HS6230读写RF寄存器的操作bsp_spi_rf.c/.h这2个文件是最基本的操作RF的SPI读写寄存器和写命令的操作接口,要操作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.HS6230操作RF函数接口介绍bsp_rf.c/.h这2个文件是RF操作的接口,包括初始化RF,bank切换,切换通信地址,切换发射功率,切换通信频点,设置晶体负载电容值,开启/关闭数据白化功能,获取芯片chip ID,切换RF工作模式,清状态寄存器,清TX FIFO/RX FIFO,批量配置寄存器,发送数据包,读取数据包,进入和退出睡眠的操作,打印RF所有寄存器配置等等。详细的可以看bsp_rf.h。 图表 4 操作RF的接口函数 这里还需要注意一下的是RF初始化的函数,下图框出来的地方,软件复位初始化RF之后,如果等了35ms都没有查询到校准完成标志,则需要重新复位初始化RF避免因为SPI时序的问题导致RF初始化不成功,从而死在等校准标志的地方。另外一处是校准完成之后,要把bank1的HS6230_BANK1_DAC_RANGE和HS6230_BANK1_PLL_CTL0值读取出来,然后再写回去寄存器里面,这样RF芯片睡眠的时候校准数据就不会丢。 图表 5 HS6230初始化校准函数 5.HS6230的APP测试程序从main函数初始化完之后,所以的SDK都是按照test_app();的入口进入测试程序的。由于HS6230只是单发的芯片,所以只有发送的测试程序。发送程序里面有固定32字节的发送和动态数据1~32字节的发送。还有载波测试的程序。当然BLE的工程里面有发BLE广播包的程序。Other的测试工程里面还有像测试睡眠功耗;获取按键值;按键唤醒MCU,数据包重用等的测试例程。 5.1 HS6230载波测试载波测试可以看出RF射频信号的频偏,调制信号看不出频偏。1M速率的时候频偏在±160k范围内是可以的,当然频偏越小越好。注意做为BLE广播的时候,频偏最好控制在±30k以内。控制HS6230发送载波的位是在RF_SETUP这个寄存器的bit7,这个位设置为高,CE拉高就发载波,CE变低了就没有载波。然后频点根据客户需要去设置,可以通过调整HS6230内部寄存器来调整频偏。当然内部寄存器可调整的范围有限,不是并不是所有的板子或者说晶振都可以通过调整内部寄存器来把频偏调整回来,这个跟硬件关系很大,确实调不过来的只能在外部加晶体试试或者是换晶体试试。内部寄存器的值是从0到15可调。注意看频偏的时候频谱仪的SPAN要打到百k级,比如200k,这样看频偏才准。当然一开始测试的时候如果是打到百k级的SPAN,可能你会看不到信号可以先设置到10M,去抓到频点的peak之后再设置中心频率到peak点,然后再设置SPAN到百k级。从下图中可以看出,数值越大频率越往小走,数值越小频率越往大走,然后步进值不是等幅步进的,数值从小到大变化的时候步进幅度越来越小。下面的测试是循环修改晶体负载电容值测出来的,实际如果固定一个频点的话,是只有一个载波信号出来的。从下图中可以看出,当设置寄存器值为1的时候测的频偏最小,只偏了300hZ。 图表 6 HS6230载波测试图片 图表 7 HS6230载波测试代码 5.2 HS6230睡眠功耗测试下面是测试睡眠功耗的代码,代码里面也有注释说明,比较一目了然。 注意:在睡眠的时候如果不用按键,要记得关闭,要不然会有漏电。当然如果在睡眠的时候需要HS6230的按键唤醒MCU,那就不能关闭按键检测功能,否则就没有按键功能自然也就没办法唤醒MCU了。 图表 8 HS6230测试睡眠功耗的代码 5.3 HS6230按键值读取按键的原理图如下图所示,从下面的原理图可以看出小车的前进和后退按键再key1脚上,左转和右转在key2脚上,因为前进和后退按键不会同时按下(即使是同时按下那也是前进优先),同理左转和右转按键也不会同时按下(即使是同时按下也是左转优先)。剩下的F1,F2,和另外2个按键也都分配在不同的脚,就是避免同时按下的情况。要使用HS6230的按键检测功能,需要在程序上去打开按键检测。
图表 9 HS6230按键原理图和按键真值表 图表 10 HS6230的按键检测功能测试代码 5.4 HS6230按键唤醒MCUHS6230做按键唤醒MCU,一定要使能HS6230的按键检测功能然后设置步骤按照代码里面的注释说明操作,时序上面要满足要求,否则无法达到预定要求。
图表 11 HS6230按键唤醒MCU的操作 5.5 HS6230发送数据包的操作HS6230发送数据的操作,这里面有设置数据包长度,设置通信地址,设置通信频点,设置发射功率,写数据包内容,激活发送,查询是否发送完成等操作。 正确的发数据包的操作流程是: CE拉低,要切换频点,或者切换地址,或者切换功率等的操作都操作完成,之后清FIFO,清状态寄存器,然后写TX FIFO,然后CE脉冲(CE高电平至少20us),或者是拉高CE激活发送(发送完成之后再拉低CE),可以等待1ms时间再去查状态寄存器,或者是一直去查状态寄存器看看是否发送完成。 图表 12 HS6230发送数据包的操作 5.6 HS6230发送数据包重用功能HS6230的数据包是可以设置重用的,也就是说相同的数据包可以不用重复写入TX FIFO。只要不拉低CE,不清空FIFO,数据包就一直在发,而且是不需要重新建立射频锁定的。需要注意的是要先写FIFO,近跟着是写REUSE_TX_PL(0xE3)命令,然后拉高CE启动发送,直到拉低CE才停止发送。 图表 13 HS6230数据包重用命令 图表 14 不使用数据包重用命令 从上面两个图中可以看出使用数据包重用和不使用数据包重用,发射数据的时候的电流波形持续时间是不一样的,而且数据包重用的电流波形是一直平稳的,说明数据发完之后又继续发不停歇。然后不使用数据包重用命令发数据的时候,实际上发完数据,芯片就进入standby模式了,不管此时的CE有没有拉低下来。 图表 15 HS6230数据包重用命令的测试代码 5.7 HS6230切换地址,切换功率,切换频点,发送数据包的操作下图中的操作涉及到切换通信地址,通信频点,发射功率。是在做产品是用到的常规操作。 图表 16 HS6230切换地址,功率,频点,发数据包的操作 6.HS6230通信频点的要求昂瑞微的2.4G RF对通信频点有要求,使用的是16M的晶体,所以设置通信频点的时候16的整数倍的频点最好是避开不使用,因为会影响接收的灵敏度,有几个dB的差异。16M的整数倍频点,2400,2416,2432,2448,2464,2480这些频点接收灵敏度差一些。 7.HS6230通信地址的要求昂瑞微的2.4G RF的通信地址有要求。 1. 不能出现连续的6个bit的0或者是连续的6个bit的1,像:0xc0(1100 0000);0x58,0x17(0101 1000 0001 0111);0x4f,0xc3(0100 1111 1100 0011),这样的地址就是不对的。 2. 也不能出现连续的24bit的0101或者1010这样的地址,像:0xaa,0xaa,0xaa(1010 1010 1010 1010 1010 1010)这样的地址是不对的。 3.也不能把地址的这几个字节都设置成一样,比如5个字节都设置成0xbc,0xbc,0xbc,0xbc,0xbc这样的地址。 8.HS6230硬件设置1. HS6230硬件设计上只需要电源处的1uF~10uF +0.1uF的2个电容挂在电源脚上。 2. 16M,±60ppm,12pF以下的晶体。 3. 天线匹配处如果不考虑过认证,串一个1pf左右的电容,避免由于焊接天线的烙铁漏电导致烧坏RF芯片的天线脚。 4. 如果使用大功率发送的时候,天线处要挂一个1pf左右的电容到地。 5. 如果要过认证,需要预留π型天线匹配电路。 6. SPI接口根据RF的打线决定是3线SPI还是4线SPI。 7. 如果有条件的话,可以把IRQ脚打出来,这样可以通过IRQ脚的中断信号及时处理RF的发送完成与否的处理。 8. 如果使用HS6230的按键检测功能,一定要注意按键的接法,避免按键同时按下的时候造成电源地短路,还要注意组合按键的优先级,而且接地的按键按下的时候组合按键优先级可能会出现反转的情况,取决于电平落在哪个电压范围。 |