请选择 进入手机版 | 继续访问电脑版
查看: 1348|回复: 0

[资料发布] LLCC86模块的实际应用关于IO的问题

[复制链接]

67

主题

100

帖子

570

积分

利尔达员工

Rank: 9Rank: 9Rank: 9

积分
570
发表于 2021-4-30 14:54:49 | 显示全部楼层 |阅读模式
  1、典型常规应用电路
  2、关于模块IO的说明

  应用电路A针对使用者的MCU的IO非常充足的情况先对各个Pin做个说明:   
  (1)NSS,SCK,MOSI和MISO是SPI通信口,LLCC68不支持3线SPI所以这4个Pin是一定要接到MCU上的是省不掉的。

  (2)NREST用来复位模块,有的使用者想这把NREST接一个稳定的上电复位电路,从而实现NREST不用接到MCU的IO上,上电时是可以实现的,但是在使用过程中如果想复位那就只能断电在上电,因为LLCC68是没有SPI的复位命令的要实现自由复位就要给模块电源口上加个控制开关经用MCU的一个IO控制该开关。所以MCU要么用一个IO直接接到NREST上,要么NRSET接个上电复位电路,然后MCU用一个IO控制一个开关来控制模块的供电,所以这个控制模硬件复位MCU的IO是省不掉的。
  (3)DIO1,DIO2和DIO3:LLCC68总共有10个可能的中断源每个都可以启用或者禁用,并且每个中断源都可以映射到DIO1、DIO2或DIO3上。也就是说DIO1、DIO2或DIO3三个IO的功能是可以完全相互替换的,如果使用者的MCU的带中断功能的IO资源充足,就3个都接上,如果使用者的MCU的带中断功能的IO资源紧张只能接一个那就3个DIO随便选一个接上即可。如果3个DIO想都不接也可以通过SPI加定时器轮询标志寄存器的方式实现,但是会损失一定的实时性,使用者能够接受这种实时性的损失的话,3个DIO是可以都不接的。DIO映射和中断标志开启的命令和代码如下
  (4)BUSY:模块的BUSY引脚其实可以理解为模块的当前状态是的空闲提示的一个数字信号的输出引脚。我们模块的手册把它叫做“占线指示器”,芯片手册里把它叫做“Busy indicator”(忙碌指示器)。不管把它叫做什么,其实他的作用就是提示使用者的MCU当前是否可以通过SPI对模块进行操作来让模块干点事情,使用也很简单就是这个BUSY如果是低电平就说明模块空闲着呢,可以对模块进行操作让模块做事,如果输出高电平就说明模块正忙着做事呢,那先不要给模块下达新的任务去干。
  看下上图这部分代码你就可以完全理解,模块代码的每个操做命令后都有这个检测BUSY收否变高电平后又变低电平的操作。

  这个BUSY存在的意义在于可以让使用者更加安全稳定的操作模块,避免出现让模块做的上一个事情还没有做完,就又去让模块做下一个事情。这个BUSY只要条件允许就一定要接到MCU的IO上,操作便捷,安全又稳定,实时性也好。

  但是如果使用者的MCU就是没有多余的IO来接这个BUSY怎么办呢,那就只能损失一定的实时性,因为LLCC68在做执行一个命令去做一个事情的过程中,通过SPI读取一些标志的话是不会打断LLCC68正在做的事情的,那个就可以利用这点来省掉MCU用来连接模块这个BUSY引脚的IO,但是还说要说清楚的就是这样会损失一定的实时性,如果使用这可以接受的话那么这个BUSY是可以省掉的,随之而来的除了丧失一定的实时性意外就是软件的开销增大了,因为软件会增加很多的反复读取各种标志的操作,来判断是可以给模块发下一个指令让模块去做另外的事情。
  (5)SW_CTL1 和SW_CTL2:模块的这两个Pin 并不神秘,他们就是控制模块内部的双通道高频开关的。控制逻辑在模块手册里有写到。使用者的MCU如果IO资源够的话这两个IO最好还是不要省。如果一定要省掉的话,可以优先考虑MCU不接SW_CTL2,这时WS_CTL2要接到DIO2上,同时还要配合一定的软件设置。可以按照下边应用电路,能够节省 MCU 的一个接SW_CTL2的IO。提醒下,的DIO1是可以实现所有的中断映射功能的, 同时需要调用函数SetDIO2AsRfSwitchCtrl 配置成发射开关控制功能,控制内部开关的 SW_CTL2 控制引脚, 通过该配置可以使DIO2在发射状态时自动输出高电平, 接收及休眠状态时自动都为输出低; 内部开关另外控制引脚SW_CTL1使用MCU的IO进行控制,需要注意的是当休眠状态时,为了降低功耗, SW_CTL1控制引脚应该输出低, 使模块内部的高频开关不工作。
  如果使用者的资源特别紧张,MCU就连接SW_CTL1的IO也没有了,那么就只能用管子做一个反向器,反向器的输入端接到模块的DIO2上,输出端接到SW_CTL1上,同时DIO2直接接到SW_CTL2上,但是一定要注意这样做的话当使用者想让模块在RX状态和TX状态时功耗的差异不大,但是如果使用者想让模块进入SLEEP模式的话,反向器上的功耗和模块内部高频开关无法完全关闭所消耗的功耗,和常规应用下模块SLEEP状态下不到uA的功耗相比,可能要增加近20uA。所以这种增加反向器省掉一个IO的做法强烈的不推荐,特别是电池供电的设备特别不做推荐。但是如果市电供电的设备而且不介意SLEEP状态下可能增加近20uA的情况下,MCU的IO又非常匮乏的情况下才可以考虑尝试这种增加反向器来省掉接SW_CTL1和SW_CTL2的两个MCU的IO的方法。

  3、模块各个IO的状态

  使用者可能还会比较关心模块的各个Pin在各个工作状态下的IO的电器状态,可以参考下图。
  4、总结
  (1)最好模块所有的Pin都接上保留如下:
  NSS,SCK,MOSI,MISO,NREST,SW_CTL1,BUSY, DIO1,SW_CTL2,DIO2,DIO3(功能齐全,啥也不耽误)

  (2)想稍微节约点MCU的IO的话可以保留如下:
  NSS,SCK,MOSI,MISO,NREST,SW_CTL1,BUSY, DIO1,SW_CTL2(软件会稍微复杂一丢丢,实时性没啥影响)

  (3)想更节约点MCU的IO的话可以保留如下:
  NSS,SCK,MOSI,MISO,NREST,SW_CTL1,BUSY, DIO1(软件会稍微复杂一丢丢,多配个DIO2功能,实时性没啥影响)

  (4)还想更节约点MCU的IO的话可以保留如下:
  NSS,SCK,MOSI,MISO,NREST,SW_CTL1,BUSY(软件复杂了,多配个DIO2功能,实时性会有影响)

  (5)还想更节约点MCU的IO的话可以保留如下:
  NSS,SCK,MOSI,MISO,NREST,SW_CTL1(软件更复杂了,多配个DIO2功能,实时性会有更多影响)

  (6)还想更节约点MCU的IO的话可以保留如下:
  NSS,SCK,MOSI,MISO,NREST(软件更复杂了,多配个DIO2功能,实时性会有更多影响,SLEEP时功耗有较大影响)

  (7)还想更节约点MCU的IO的话可以保留如下:
  恭喜你,你已经达到了巅峰,想法很美好,现实很残忍,你已经没法再节约了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表