跳转至

G-Sensor

G-Sensor部分的说明

1、Air780Exx系列模组中,Air780EGP/Air780EGG两款中内置了加速度传感器G-Sensor,型号是苏州明皜相对基础的DA221,其I2C地址为0x27;

DA221.pdf

2、虽然G-Sensor理论上可以支持非常多的算法,比如计步、跌倒检测等,但是在Air780EGP/Air780EGG这两款模组中,我们仅支持振动检测,不支持其它算法;

  1. 关于振动检测,我们提供了扩展库exvib供大家使用;

  2. https://docs.openluat.com/osapi/ext/exvib/

3、你是不是会问,我要的是GNSS定位,为什么给我安排一个G-Sensor做振动检测呢?

  • 主要原因两个,一个是静态漂移滤除,一个是低功耗控制算法;
  • GNSS定位中的静态漂移是什么现象? 简单来说就是GNSS在静止时的定位会东飘西飘,无法固定在一个点,无法像运动状态时可以比较准确;

从地图上来看的话,会看到无数个漂移的点在实际位置飘来飘去,我们通常把这种现象叫做GNSS静态漂移;

GNSS静态漂移无法根除,原因是:

卫星信号相关因素:

GPS卫星在发射信号后传播过程中会遇到多种干扰因素,包括大气层电离层变化、云层遮挡等天气影响; 卫星信号受到干扰或遮挡会导致定位不准确,特别是在高楼林立的城市环境或山区、森林地带;

环境干扰因素:

周边高大建筑物的多径反射造成信号误差; 网络传输不稳定可能导致定位数据丢失,造成设备在地图上显示"飞跃"现象; - 那么,静态漂移有办法处理吗? 有,办法就是,滤除;

你静止时可以飘,我不记录你飘的数据,不在地图上显示不就行了吗?

那么,怎么判断静止状态呢?G-Sensor啊;

通过G-Sensor的加速度值,做相应的振动状态判断,进而将静态漂移滤除,这就是G-Sensor在GNSS定位系统中存在的意义;

https://docs.openluat.com/osapi/ext/exvib/

  • 除了静态漂移滤除,系统还可以在终端静止时关闭GNSS达到省电的目的,这也是G-Sensor在GNSS定位中一个常见的应用场景;
  • 所以,这也是我们通常推荐Air780EGP/Air780EGG两款型号优先于Air780EGH的原因,很多客户系统中没有加入G-Sensor,导致静态偏移和功耗都没办法很好的控制;

4、Air780EGP和Air780EGG这两个型号,内置G-Sensor后,必然会暂用系统的资源,比如G-Sensor的供电控制,比如G-Sensor判断振动后的中断输入,比如I2C1的占用等;

对于Air780EGP和Air780EGG这两个型号,I2C1内部挂载了G-Sensor,如果还需要在模组外部挂载其它外设时,比如摄像头,此时务必要保持GPIO23为默认的输出高状态,不可将GPIO23改为输出低的状态,否则会影响该I2C1总线的正常初始化;

以下是Air780EGP/Air780EGG两款模组中内部占用的信号管脚,以及对应的详细说明;

管脚 信号 Air780EGH Air780EGPAir780EGG
PIN107 GPIO21 内部用于主控芯片打开和关闭GNSS芯片
PIN28/29 UART2 内部用于主控芯片与GNSS芯片通信用
PIN99 GPIO23(Vref) Air780EGH内部用于GNSS芯片的后备供电,以便星历保持,在需要时热启动Air780EGP/Air780EGG除给GNSS芯片后备供电外,还给G-Sensor供电
PIN66/67 I2C1 未被占用 Air780EGH内部没有占用,可作为I2C1供外部自由使用,也可复用为其它功能Air780EGP/EGG内部将此管脚作为I2C1挂载了G-Sensor,因此外部只可作为I2C1使用,且不能与内部G-Sensor的I2C地址0x27冲突,且外部使用I2C1时需保持GPIO23为默认输出高的状态,不可将GPIO23改为输出低的状态,否则会影响该I2C1总线的正常初始化;
PIN79 WAKEUP2(USIM_DET) 未被占用 Air780EGH与Air780EPM/EHV等一样,供外部用作SIM卡热插拔检测Air780EGP/EGG内部将此管脚用作了G-Sensor振动时的中断输入,外部不可再用

5、一般来说,虽然合宙4G模组以功耗控制的比较好而被认可,但是,G-Sensor在大多数的应用场景下都是要一直开启的,这在一定程度上会增加一些功耗,尤其是在低功耗模式下,这是正常现象,请大家注意;

G-Sensor搭配I2C可能遇到的问题

一,背景说明;

a. 合宙4G模组,包括Air780Exx系列、Air8000系列、Air700Exx系列,大部分型号都可以支持2路I2C,一路为I2C0,一路为I2C1;

b. I2C0和I2C1,分别会复用在不同的多处管脚,但只要一处复用为I2C0,其它地方便不可再复用为I2C0,I2C1也一样;

c. 部分型号,比如内置Audio Codec ES8311的Air780EHV,内置G-Sensor的Air8000A/D/AB/DB/U/N和Air780EGP/EGG,在模组内部都占用了一路I2C,这就意味着,该路I2C总线在模组内部已有上拉电阻;

d. Air780Exx系列模组I2C信号管脚及复用信息如下;

e. Air700Exx系列模组I2C信号管脚及复用信息如下;

f. Air8000系列模组I2C信号管脚及复用信息如下;

二,常见的坑;

a. 两路I2C,如果每路I2C只挂载一个外设,在实际应用中都没有发现什么问题,注意做好I2C_SCL和I2C_SDA两个信号的上拉即可;

b. 大家开发的很多产品中,由于IO有限,导致不得不在很多情况下都要一路I2C挂载多个外设;

当一路I2C挂载多个外设时,又分为四种情况,分别以Air780EHM、Air780EHV、Air780EGG和Air8000A为例进行说明;

第一种情况;

模组内部没有占用I2C,即没有挂载G-Sensor或Audio Codec ES8311,以Air780EHM为例;

假设使用PIN56/57复用为I2C0,只挂载一个LCD触摸屏外设,没有问题;

使用PIN66/67复用为I2C1,同时挂载G-Sensor、Audio Codec ES8311和摄像头三个外设,需要特别注意如下几点,否则会出现I2C1通信不正常的问题;

第1

如果三个外设分别由三个独立LDO供电,且每个外设的I2C1_SCL和I2C1_SDA都独立上拉到了各自的电源,这个时候:

当要打开其中一个外设时,另外两个外设的电源也必须要打开,否则会造成I2C通信不正常;

原因是,给每个外设供电的LDO,以LP5907MFX为例,其在关闭时,LDO电源输出管脚会有下拉电阻到地,进而造成I2C电平拉低,比如Air780EHM电平设置为3.3V时,会被拉低到2.2V甚至2V以下,造成I2C通信不正常;

LP5907MFX.pdf

第2

如果三个外设分别由三个独立LDO供电,但I2C1_SCL和I2C1_SDA都只拉到了其中一个外设的电源,这个时候:

当要打开其中一个外设时,必须要保证"I2C1上拉的电源是打开的"和"Audio Codec ES8311的电源是打开的",否则会造成I2C通信不正常;

"I2C1上拉的电源是打开的"非常好理解,不再赘述;

"Audio Codec ES8311的电源是打开的"的原因是,ES8311在没有供电时,其SCL和SDA管脚为芯片内部下拉,也会造成I2C电平被拉低到2.2V甚至2V以下,进而造成I2C通信不正常;

第3

如果三个外设分别由三个独立LDO供电,但I2C1_SCL和I2C1_SDA都只拉到了模组自带的VDD_EXT或Vref,这个时候:

当要打开其中一个外设时,不需要做其它动作,只需确保给外设的供电正常即可;

不同的是,在低功耗模式 pm.WORK_MODE,1 下,Audio Codec ES8311由于在未供电的情况下I2C管脚芯片内部下拉会造成功耗浪费,Vref一直消耗,VDD_EXT由于间歇性输出所以功耗浪费相对Vref较小;

说明!关于VDD_EXT和Vref的描述,详见硬件管脚详细说明文档中的相应章节;

结论

以上三种情况各有优劣势,大家根据自己产品的需要灵活选择即可;

相对而言,我们认为第2种情形更好一些,比如:

I2C1同时挂载G-Sensor、摄像头和ES8311,I2C1只上拉到给ES8311供电的电源上,当打开摄像头或G-Sensor时,确保给"ES8311供电的电源是打开的"可以给I2C1提供上拉且"保证ES8311在供电"即可;

或者,I2C1同时挂载G-Sensor、摄像头和ES8311,I2C1只上拉到给摄像头供电的电源上,当打开ES8311或G-Sensor时,这时不但要确保给"摄像头供电的电源是打开的"可以给I2C1提供上拉,也需要保证"打开ES8311供电",这种方式就不推荐了;

或者,如果I2C1同时挂载G-Sensor、摄像头和ES8311,I2C1只上拉到给G-Sensor供电的电源上,当打开摄像头或ES8311时,这时不但要确保给"G-Sensor供电的电源是打开的"可以给I2C1提供上拉,也需要保证"打开ES8311供电",这种方式就不推荐了;

第二种情况:

模组内部占用了一路I2C0挂载Audio Codec ES8311,同时将I2C0上拉到了给ES8311供电的LDO上,以Air780EHV为例:

(说明!虽然该路I2C0被内部使用,但同时也引出到了模组管脚PIN56/57,可用作挂载外部外设;)

假设使用PIN66/67复用为I2C1,只挂载一个LCD触摸屏外设,没有问题;

使用PIN56/57复用为I2C0,在模组内部挂载ES8311的情况下,外部再同时挂载G-Sensor和摄像头两个外设,也同样需要注意跟第一种情况相同的第1、第2和第3点,不同点只是Audio Codec ES8311挂载到了内部;

第三种情况:

模组内部占用了一路I2C1挂载G-Sensor,同时将I2C1上拉到了给G-Sensor供电的LDO上,以Air780EGG为例:

(说明!Air780EGG内部使用的是GPIO18/19复用的I2C1,且引到了模组管脚PIN66/67可供外部外设使用;)

假设使用PIN56/57复用为I2C0,只挂载一个LCD触摸屏外设,没有问题;

使用PIN66/67复用为I2C1,在模组内部挂载G-Sensor的情况下,外部再同时挂载ES8311和摄像头两个外设,也同样需要注意跟第一种情况相同的第1、第2和第3点,不同点只是G-Sensor挂载到了内部;

第四种情况:

模组内部占用了一路I2C0挂载G-Sensor,同时将I2C0上拉到了给G-Sensor供电的LDO上,以Air8000A为例:

(说明!Air8000A内部使用的是GPIO18/19复用的I2C0,且引到了模组管脚PIN80/81可供外部外设使用;)

假设使用PIN80/81复用为I2C0,在模组内部挂载G-Sensor的情况下,外部再同时挂载ES8311、触摸屏和摄像头三个外设,也同样需要注意跟第一种情况相同的第1、第2和第3点,不同点只是G-Sensor挂载到了内部;

c. 核心"槽点",记住两点:

  • LDO在关闭的情况下,其输出内部下拉到地,如果I2C在其它地方上拉供电的前提下也接到了这里,会影响I2C电平,进而影响I2C通信;

  • Audio Codec ES8311由于芯片设计原因,其在未供电的情况下I2C两个管脚内部下拉到地,如果I2C在其它地方上拉供电的前提下也接到了这里,会影响I2C电平,进而影响I2C通信;

  • 不知道怎么做的情况下,当一路I2C挂载多路外设时,如果遇到I2C通信异常时,请把这几路外设的供电全部打开进行尝试,然后再根据前面的描述去排查原因;

三,对开发板的影响;

a. 这里说的开发板,主要是指合宙4G模组开发板,包括Air780Exx、Air700Exx、Air8000系列;

b. 由于管脚有限,开发板在设计时都是一路I2C挂载了多个外设,且几乎每个外设都加了独立上拉,因此:

如果遇到I2C通信异常时,请把这几路外设的供电全部打开进行尝试,然后再根据前面的描述去排查原因;