SX126x-数字接口SPI和控制功能

目录

1 前言

2 Reset

3 SPI接口

3.1 属性要求

3.2 时序参数要求

1)离开Sleep模式时的时序

4 BUSY引脚

4.1 Tsw

4.2 TswMode

5 DIO

5.1 DIO1

5.2 DIO2

5.3 DIO3

6 IRQ

7 各模式下引脚状态


1 前言

        本文主要介绍SX126x系列芯片的数字接口和控制引脚。主要包括如下几个部分:

  • Reset引脚
  • SPI接口
  • Busy引脚
  • IRQ
  • DIO引脚

2 Reset

        该引脚用于芯片内部逻辑复位,需要注意的是,至少保证引脚拉低100us

3 SPI接口

3.1 属性要求

  • 芯片作为Slave设备端
  • 满足CPOL = 0; CPHA = 0
  • 最大速率支持16M

3.2 时钟来源

        内部的13M Hz RC

3.3 时序参数要求

1)离开Sleep模式时的时序

        退出Sleep模式的方法之一就是NSS的下降沿,通俗点理解就是会存在Sleep模式对某些寄存器进行操作,此时处于Sleep模式下的芯片接收到NSS下降沿后,会自动开启唤醒序列以及内部硬件初始化,在此阶段BUSY引脚会一直处于高电平。所以此时使用SPI通信时,需注意NSS下降沿到SCK的第一个上升沿之间需预留足够的时间,即时间t10,需要满足大于100us

  • 这点在移植驱动时需要尤为注意,Semetch官方代码中在所有会操作SPI接口的函数中先执行SX126xCheckDeviceReady()
void SX126xCheckDeviceReady( void )
{
    //通过全局变量判断是否在Sleep模式,如果是的则执行SX126xWakeup()
    //这里的MODE_RX_DC模式其实是receive duty cycle mode,该模式执行完后会自动进入Sleep模式,所以也默认做为Sleep模式处理
    if( ( SX126xGetOperatingMode( ) == MODE_SLEEP ) || ( SX126xGetOperatingMode( ) == MODE_RX_DC ) )
    {
        SX126xWakeup( );
    }
    SX126xWaitOnBusy( );
}

void SX126xWakeup( void )
{
    //执行一次获取状态的命令(本质还是NSS的下拉沿)来使芯片唤醒。
    GpioWrite( &SX126x.Spi.Nss, 0 );
    SpiInOut( &SX126x.Spi, RADIO_GET_STATUS );
    SpiInOut( &SX126x.Spi, 0x00 );
    GpioWrite( &SX126x.Spi.Nss, 1 );

    //等待BUSY引脚拉低
    SX126xWaitOnBusy( );

    //全局变量记录当前处于的工作模式
    SX126xSetOperatingMode( MODE_STDBY_RC );

    CRITICAL_SECTION_END( );
}

4 BUSY引脚

        表示芯片内部的状态,低电平表示内部空闲允许接收命令;拉高表示内部已占用不能接受SPI命令。

4.1 Tsw

  • 写命令操作过程中,当NSS上升沿,表示一个完整命令的结束。芯片接收到命令后,内部状态机需环境并开始处理命令,这个时间就是Tsw。即NSS上升沿到BUSY拉高的时间
  • 读命令不影响内部状态机,因此命令发送完后,BUSY会一直低电平
  • Tsw最大值600ns
  • 虽然Tsw过程中,BUSY引脚是低电平,但该阶段是无法接收命令的

4.2 TswMode

  • CS上拉到BUSY下拉的时间,即转换时间
  • 写命令会导致模式之间的切换,该切换对应时间如下

5 DIO

  • 用于中断输出引脚或者特殊功能引脚,总共有3个:DIO1,DIO2,DIO3。
  • 如果映射到DIOx上的中断出发,DIOx会输出上升沿

5.1 DIO1

  • 通用中断引脚,任何芯片内部的中断源都能映射到该引脚

  • 可以通过命令SetDioIrqParams来配置

        Irq Mask - 中断源使能,对应bit置1即使能

        DIO1 Mask - 映射到DIO1的中断源使能,对应BIT置1即使能

        DIO2 Mask - 映射到DIO2的中断源使能,对应BIT置1即使能

        DIO3 Mask - 映射到DIO3的中断源使能,对应BIT置1即使能

5.2 DIO2

  • 两个功能2选一:1)和DIO1一样,通用中断引脚; 2)可以配置成RF开关控制引脚

  • RF开关控制引脚是通过命令 SetDIO2AsRfSwitchCtrl来使能的。在这种模式下,DIO2将在Tx期间输出高电平,在任何其他模式下输出低电平。

5.3 DIO3

  • 两个功能2选一:1)和DIO1一样,通用中断引脚; 2)可以配置成TCXO(温度补偿晶振)的电源

  • 电源功能是通过命令 SetDio3AsTCXOCtrl来使能的。

        tcxoVoltage - 输出电源电压值

        delay - 等待TCXO起振的超时时间

6 IRQ

  • 总共有10各中断源
  • 每个中断源都能映射到引脚DIO1,DIO2,DIO3上

7 各模式下引脚状态

  • PU = 50kΩ上拉
  • PD = 50KΩ下拉
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个使用Semtech公司sx126x芯片驱动库中的sx126x-cad驱动函数代码示例,用于执行CAD操作并检测信道是否可用: ``` #include "sx126x.h" // 初始化sx126x芯片 sx126x_init(&sx1268); // 设置CAD参数 sx126x_set_cad_params(&sx1268, 0, SX126X_CAD_ON_BOTH_EDGES, SX126X_CAD_SYMBOL_DURATION_8); // 执行CAD操作 int cad_result = sx126x_cad(&sx1268); // 检查CAD结果 if (cad_result == SX126X_CAD_OK) { // 信道空闲,可以发送数据 send_data(); } else if (cad_result == SX126X_CAD_DETECTED) { // 信道有信号干扰,等待一段时间后重试 delay(1000); sx126x_cad(&sx1268); } else { // CAD操作失败,检查硬件或者软件配置 handle_error(); } ``` 在这个示例中,我们首先使用sx126x_init()函数初始化了sx126x芯片,并将其指针传递给sx126x-cad驱动函数。然后,我们使用sx126x_set_cad_params()函数设置CAD参数,比如CAD检测模式和检测时长。接着,我们使用sx126x_cad()函数执行CAD操作,并检查返回结果。如果返回结果是SX126X_CAD_OK,则说明信道空闲,可以发送数据。如果返回结果是SX126X_CAD_DETECTED,则说明信道有信号干扰,我们等待一段时间后重新执行CAD操作。如果返回结果是其他值,则说明CAD操作失败,需要检查硬件或者软件配置。需要注意的是,在使用sx126x-cad驱动函数之前,需要包含sx126x.h头文件,并在应用程序中实现sx126x_init()和sx126x_set_cad_params()函数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值