LoRa节点开发:3、SDK整体设计思路

1、硬件连接

从sx1276的参考设计https://os.mbed.com/media/uploads/GregCr/sx1276mb1las_e311v02a_sch.pdf中我们可以看出:

sx1276与mcu需要连接的io口,SPI(SCK、MISO、MOSI、NSS)、DIO0~DIO5;SPI口用于通讯,DIO~DIO5用于产生外部中断。其实,DIO0~DIO5可以根据软件设计取舍,SDK里面只用到了DIO0,查看sx1276的数据手册,可以看到DIO0~DIO5分别对应不同的功能:

2、外部中断

从上面的图,我们可以看出,DIOx Mapping被设置为不同的值,DIOx产生的中断(电平跳变)对应不同的状态。

基本的思路:将DIOx连接到MCU--->对应的mcu口设置为外部中断模式--->设置DIOx Mapping的模式--->事件发生(RxDone接受完成、TxDone发送完成)--->产生外部中断--->回调事件函数。

以DIO0为例说明:

DIO0连接到了PA10,我们知道PA10对应的外部中断函数是

void EXTI15_10_IRQHandler( void )

注册过程,依次调用函数如下:

SX1276IoInit( )
GpioInit( &SX1276.DIO0, RADIO_DIO_0, PIN_INPUT, PIN_PUSH_PULL, PIN_PULL_UP, 0 );
SX1276IoIrqInit( DioIrq );
//DioIrq是函数指针数组, SX1276OnDio0Irq、 SX1276OnDio1Irq等是成员,分别是DIO0、DIO1等的外部中断回调函数
GpioSetInterrupt( &SX1276.DIO0, IRQ_RISING_EDGE, IRQ_HIGH_PRIORITY, irqHandlers[0] );

//设置DIO0为上升沿触发,高优先级,中断回调函数为irqHandlers[0];
GpioMcuSetInterrupt( obj, irqMode, irqPriority, irqHandler );
GpioIrq[( obj->pin ) & 0x0F] = obj; //注册回调函数

中断发生后,依次调用顺序如下:

void EXTI15_10_IRQHandler( void )//外部中断的中断函数
void HAL_GPIO_EXTI_Callback( uint16_t gpioPin ) //HAL库回调函数
GpioIrq[callbackIndex]->IrqHandler( GpioIrq[callbackIndex]->Context );//最终在这里调用上面注册的函数

 3、定时器链表

SDK中用RTC作为定时器,调度MAC的运行。

基本的思路:初始化RTC定时器,定义一个时间事件定时器、设置定时时长、启动时间事件定时器、设置RTC闹钟时间、RTC闹钟时间到、调用对应的事件回调函数。

看一下结构体时间事件定时器的结构体,其中struct TimerEvent_s *Next;指向下一个时间事件。

/*!
 * \brief Timer object description
 */
typedef struct TimerEvent_s
{
    uint32_t Timestamp;                 //! Current timer value
    uint32_t ReloadValue;                //! Timer delay value
    bool IsStarted;                      //! Is the timer currently running
    bool IsNext2Expire;                  //! Is the next timer to expire
    void ( *Callback )( void* context );       //! Timer IRQ callback function
    void *Context;                      //! User defined data object pointer to pass back
    struct TimerEvent_s *Next;            //! Pointer to the next Timer object.
}TimerEvent_t;

时间事件定时器链表:SDK中以静态的方式创建了多个时间事件定时器,每个时间事件定时器作为链表的一个节点。

多个时间事件定时器处理:遍历定时器链表,设置定时时长最小的事件为当前RTC的闹钟时间,RTC闹钟时间到,处理当前事件,遍历定时器链表、再设置定时时长最小的事件为当前RTC的闹钟时间。

一个典型的时间事件定时器使用方法:

static TimerEvent_t LedRedTimer; //定义时间事件定时器节点

void LED_TipInit(void )  
{
    TimerInit( &LedRedTimer, LedRedTimerEvent ); //初始化时间事件

    TimerSetValue( &LedRedTimer, 4000);//设置定时时长
}

static void LedRedTimerEvent(void)
{
   TimerStop( &LedRedTimer );

   LED_RED_OFF();
}

void LedRedTipOn(void) //启动定时器
{
  TimerStart( &LedRedTipTimer );

  LED_RED_ON();
}

上面示例了一个简单的LED灯闪烁的时间事件。

4、休眠

SDK中使用的stop模式,只能通过外部中断,或者RTC闹钟唤醒。

外部中断:SX1276的DIOx、用户应用的外部中断;

RTC闹钟:进入休眠后射频是关闭的,因此进入休眠之前至少要确保有一个时间事件在跑,负责进入休眠之后,将没法唤醒。通常情况下进入休眠之后,会有一个周期发送的时间事件定时器在跑的,SDK中的周期发送数据的时间事件定时器是TxNextPacketTimer。

 

总结如果需要移植到其他的平台,主要的工作就是修改spi驱动、定时器、外部中断、休眠这几个部分。

 

更多精彩分享,请关注微信公众号:物联网思考

 

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: SX1262是一种用于无线通信的集成电路,常用于LoRa无线传输系统中。以下是SX1262电路原理图的基本构成和功能说明。 1. 射频收发电路:SX1262的关键部分是射频收发电路,它由射频接收器和射频发射器组成。射频接收器负责将接收到的无线信号进行放大和解调,然后传递给后续的数字处理电路。射频发射器负责将数字信号经过调制后以无线形式发送出去。 2. MCU控制器:SX1262内部集成了一个微控制单元(MCU),负责控制整个电路的工作。MCU与射频收发电路紧密配合,负责控制信号的发送和接收,以及与外部设备的通讯。 3. 低噪声放大器(LNA):SX1262的射频接收器部分采用了低噪声放大器(LNA),用于放大接收到的微弱无线信号,以提高接收灵敏度和传输距离。 4. PA功率放大器:SX1262的射频发射器部分配备有功率放大器(PA),用于将数字信号放大后发射出去,以增加发送功率和传输距离。 5. 外部天线:SX1262需要连接一个外部天线,用于无线信号的发送和接收。天线的选用和设计对于整个系统的性能具有重要影响。 总之,SX1262电路原理图主要包含了射频收发电路、MCU控制器、低噪声放大器、功率放大器和外部天线等关键部分,它们相互配合,实现无线通信功能。 ### 回答2: sx1262电路原理图是指Semtech公司推出的一种低功耗、长距离的无线通信芯片sx1262的电路连接图。该原理图主要包含了sx1262芯片的各个引脚和其他外部电路组件之间的连接关系。 首先,sx1262芯片是一款基于LoRa技术的无线通信芯片,内部集成了LoRa调制解调器、射频前端、控制逻辑等功能模块。它可以广泛应用于物联网、远程监控、智能家居等领域。 在sx1262电路原理图中,主要包含以下几部分内容: 1. 电源电路:包括电源输入和滤波电路,用于提供工作电压和滤除噪声。 2. 控制电路:包括微控制器或外部控制器与sx1262之间的连接线路,用于控制芯片的工作模式、通信参数等。 3. 射频部分:包括天线、射频开关和射频滤波器等,用于实现与外部环境的无线信号的收发功能。 4. 外设接口:包括SPI接口、GPIO口、中断引脚等,用于与外部设备的数据交互和控制。 此外,sx1262电路原理图还可能包含一些外部电容、电阻、电感等组件,用于稳定电路工作和提高通信质量。 需要注意的是,sx1262电路原理图只是一个框架,实际使用时还需要进行具体的硬件设计和布局,以及相应的软件编程才能实现完整的功能。 总之,sx1262电路原理图是sx1262芯片与其他外部电路组件之间的连接图,它是实现sx1262无线通信功能的基础,通过对该原理图的设计和实现,可以搭建出低功耗、长距离的无线通信系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

freemote

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值