目录
一、电源选择
二、接收模式选择
三、速率配置
四、设置前道、CRC、报文格式等
五、设置频点、接收发送地址、发送功率
六、DIO配置
七、收发控制逻辑
八、SPI时序和BUSY
通过上一篇博客:SX1281驱动学习笔记一:Lora驱动移植_无痕幽雨的博客-CSDN博客,能够实现简单的收和发了,下面继续学习。
一、电源选择
SX128X内部集成了电源,有DC/DC和LDO。


1、如果想使用DC/DC,则在12和14引脚连接15uH电感;
2、使用DC/DC比LDO效率高,省电。
3、控制函数为:
/*! * \brief Declares the power regulation used to power the device * * This command allows the user to specify if DC-DC or LDO is used for power regulation. * Using only LDO implies that the Rx or Tx current is doubled */ typedef enum { USE_LDO = 0x00, //! Use LDO (default value) USE_DCDC = 0x01, //! Use DCDC }RadioRegulatorModes_t; Radio.SetRegulatorMode( USE_DCDC );
讯享网
二、接收模式选择
接收增益默认是使能自动增益控制,也可配置为手动增益控制,我个人感觉自动增益控制就好。
接收模式有低功耗模式和高灵敏度模式:

1、 默认是接收低功耗模式;
2、低功耗模式比高灵敏模式节省700uA电流;
3、使能高灵敏度模式:
讯享网chReadRegister = Radio.ReadRegister(0x0891) Radio.WriteRegister(0x0891,chReadRegister | 0xC0);
三、速率配置
速率配置有扩频因子、带宽、纠错编码决定。
1、扩频因子:

typedef enum { LORA_SF5 = 0x50, LORA_SF6 = 0x60, LORA_SF7 = 0x70, LORA_SF8 = 0x80, LORA_SF9 = 0x90, LORA_SF10 = 0xA0, LORA_SF11 = 0xB0, LORA_SF12 = 0xC0, }RadioLoRaSpreadingFactors_t;

初始化增加:
讯享网 switch(modulationParams.Params.LoRa.SpreadingFactor){ case LORA_SF5: case LORA_SF6: Radio.WriteRegister(0x0925,0x1E); break; case LORA_SF7: case LORA_SF8: Radio.WriteRegister(0x0925,0x37); break; case LORA_SF9: case LORA_SF10: case LORA_SF11: case LORA_SF12: Radio.WriteRegister(0x0925,0x32); break; } Radio.WriteRegister(0x093C,0x01);
2、带宽

3、纠错编码


其中画红框为长交织算法。
4、操作
modulationParams.PacketType = PACKET_TYPE_LORA; modulationParams.Params.LoRa.SpreadingFactor = LORA_SF8; modulationParams.Params.LoRa.Bandwidth = LORA_BW_0800; modulationParams.Params.LoRa.CodingRate = LORA_CR_4_5; Radio.SetPacketType( modulationParams.PacketType ); Radio.SetModulationParams( &modulationParams );
四、设置前道、CRC、报文格式等
packetParams.PacketType = PACKET_TYPE_LORA; packetParams.Params.LoRa.PreambleLength = 6; packetParams.Params.LoRa.HeaderType = LORA_PACKET_VARIABLE_LENGTH; packetParams.Params.LoRa.PayloadLength = BUFFER_SIZE; packetParams.Params.LoRa.CrcMode = LORA_CRC_ON; packetParams.Params.LoRa.InvertIQ = LORA_IQ_NORMAL; Radio.SetPacketParams( &packetParams );
五、设置频点、接收发送地址、发送功率
Radio.SetRfFrequency( RF_FREQUENCY ); Radio.SetBufferBaseAddresses( 0x00, 0x00 ); Radio.SetTxParams( TX_OUTPUT_POWER, RADIO_RAMP_02_US );
六、DIO配置
有三个DIO(DIO1~DIO3),有16个IRQ。


1、SX1281有11个中断源
/*! * \brief Represents the interruption masks available for the radio * * \remark Note that not all these interruptions are available for all packet types */ typedef enum { IRQ_RADIO_NONE = 0x0000, IRQ_TX_DONE = 0x0001, IRQ_RX_DONE = 0x0002, IRQ_SYNCWORD_VALID = 0x0004, IRQ_SYNCWORD_ERROR = 0x0008, IRQ_HEADER_VALID = 0x0010, IRQ_HEADER_ERROR = 0x0020, IRQ_CRC_ERROR = 0x0040, IRQ_CAD_DONE = 0x1000, IRQ_CAD_ACTIVITY_DETECTED = 0x2000, IRQ_RX_TX_TIMEOUT = 0x4000, IRQ_PREAMBLE_DETECTED = 0x8000, IRQ_RADIO_ALL = 0xFFFF, }RadioIrqMasks_t;
2、任意的中断源都可以映射到三个DIO中的任意一个。
/*! * \brief Sets the IRQ mask and DIO masks * * \param [in] irqMask General IRQ mask * \param [in] dio1Mask DIO1 mask * \param [in] dio2Mask DIO2 mask * \param [in] dio3Mask DIO3 mask */ void ( *SetDioIrqParams )( uint16_t irqMask, uint16_t dio1Mask, uint16_t dio2Mask, uint16_t dio3Mask );
对应位为1就是打开,对应位0,则屏蔽。
把RX接收完成映射到DIO1,TX接收完成映射到DIO2,接收超时和发送超时映射到DIO3,代码如下:
Radio.SetDioIrqParams( IRQ_RX_DONE | IRQ_TX_DONE | IRQ_RX_TX_TIMEOUT | IRQ_RX_TX_TIMEOUT, IRQ_RX_DONE, IRQ_TX_DONE, IRQ_RX_TX_TIMEOUT | IRQ_RX_TX_TIMEOUT );
默认:平时低电平,事件来了,高电平,清除标志位后,变低;也支持单**转。
3、清除标志位:可以全清,也可以只清除某一位或几位,Radio.ClearIrqStatus(IRQ_RX_DONE);
4、读取标志位:Radio.GetIrqStatus()
七、收发控制逻辑
1、通过标位置操作
程序通过Radio.GetIrqStatus()读取标志位,然后根据标志位进行逻辑判定:是否接收到数据,是否发送完成,是否超时等等;这种方案不能操作RF太快,要间隔一段时间再查询,否则容易死机。
2、通过DIO查询
把RX接收完成映射到DIO1,TX接收完成映射到DIO2,接收超时和发送超时映射到DIO3,然后查询IO口是否置位来判定芯片状态;这种模式在程序规模不大可以使用,实时性很高。
3、开始DIO中断
同样把RX接收完成映射到DIO1,TX接收完成映射到DIO2,接收超时和发送超时映射到DIO3,同时开启MCU对应IO口中断,在中断函数里面进行操作;这种模式在程序规模比较大,或着低功耗操作下使用,实时性高,又能降低MCU功耗。
八、SPI时序和BUSY

通过这个描述,我原来认为BUSY在1的时候是忙,那么逻辑就应该是:NSS拉低,然后查询BUSY,但是测试发现,NSS拉低后,BUSY一直为高电平,看到手册有如下说明:

翻一下:

就是说BUSY在芯片处理事务或者接收命令时候置位。也就是说,应该先查询BUSY,为底,则拉低NSS,在NSS下降沿217ns后,BUSY至高,表示现在正准备接收命令。
下面看下SPI时序和配置





版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/54349.html