基于S32DS实现CAN、LIN基础结合芯片UJA1075的功耗模式切换设置(Standby、Normal、Sleep)

经过较长时间的调试,UJA1075实现进入到Sleep模式了,目标就是实现V1和V2电源的关闭,但目前这个V1的硬件电压没有实现完全关断(已经实现关断),借着查看手册的机会,整理一下UJA1075的芯片手册,写一篇较高规格的开发笔记【憨笑】

一、首先、UJA1075与微控制的通信是SPI全双工通信

1)SPI的片选SCSN低有效;关于片选SCSN连续或不连续(亲测,不影响正常读数据);时钟极性,在高电平有效(读数据)

2)根据UJA1075的时序图、可以了解到SPI的数据方向是高位在前;因为寄存器为16位,所以SPI发送为两个Buffer十六字节;时钟相位为在第二边沿开始

3)关于总线时钟,UJA1075手册没有严格要求、所以S32DS的SPI配置如下

4)简单介绍一下UJA1075的寄存器、通过寄存器的高三位选择要设置的寄存器,第四位用来设置属性(可读可写\只读)

5)首先实现简单的SPI通信、见如下波形图,信号线1和信号线2分别为SPI输入和输出

二、实现SPI通讯后下来我们来设置UJA1075的通讯模式、以下为主要的三种模式切换图

1)要实现V2的关断,最简单的方式是将MC=10,并且保证UJA1075没有产生复位事件、并且MC没有设置为MC=00(这个寄存器具体在Mode_Control register)

第一次调试就被UJA1075的复位事件搞得头晕,现在整理一下复位事件所有来源(注意:复位事件不会导致寄存器设置重置、复位事件会触发寄存器LHWC=1、只有重新上电才会重置寄存器,并且POSI位会触发):

可以看到系统复位的主要来源为外部复位,看门狗溢出、和不正当操作寄存器,还有一个当UJA1075刚刚上电进入待机模式时、此时也会产生系统复位。并且UJA1075芯片复位的输出信号为LIMP跛脚功能输出低电平。

2)为关闭V2电源、目前外部复位引脚RSTN为悬空(引脚断开),并且不进行寄存器的其他操作;我们来看看门狗,看门狗有三种模式分别为(窗口、超时和关闭模式),并且看门狗的默认时钟周期为128ms(当看门狗产生复位的时候,周期将被重置到128ms)。

看门狗的模式切换依据为:通过UJA1075寄存器的WMC位来设置

看门狗的喂狗方式为通过对WD_and_Status Register的写操作,喂狗后看门狗立即复位,内部定时器开始重新计数

1、在启用看门狗超时模式时,同时会唤醒CI(循环中断),超时模式的看门狗喂狗周期为理论NWP周期内

2、看门狗在窗口模式的喂狗周期为NWP理论周期的后半部分

注意:触发在前半部分则触发或溢出会产生系统复位(具体的触发时间在Ttrig(wd)1和Ttrig(wd)2之间)

窗口模式下看门狗在正常模式喂狗将产生新的复位事件,同时进入窗口模式的条件是(当引脚WDOFF为低电平,SBC处于正常模式且看门狗模式控制位(WMC)设置为0时,看门狗处于窗口模式。)

3、当看门狗可以通过两种方式进入OFF模式

第一种通过寄存器设置WMC=1设置,但UJA1075的模式必须处于Standby待机模式,且这种关闭方式可以被任何挂起未决中断事件(Pending)将唤醒它;

第二种通过强制给WDOFF引脚高电平,则会完全关闭看门狗,此时中断事件将不能唤醒它,但在正常\待机模式(Normal\Standby)模式更改WDOFF状态也会产生系统复位

4、通常S32K喂狗使用为看门狗量身定做的LPIT定时器。但关闭V2较简单的方式目前是将RSTN引脚断开、关闭WDOFF=1、清除在待机模式下LHWC位因上电等其他原因产生的复位事件,然后写寄存器进入Mode_Control register的MC=10正常(Normal)模式。

三、在实现对V2电源的关闭下,我们就已经掌握了看门狗的操作和寄存器的读写。下来我们来实现V1的关闭:

1、从正常模式(Normal)或待机模式(Standby)进入睡眠模式(Sleep)的条件基本一样(此处推荐大家用谷歌)

  • 进入睡眠模式(Sleep)的条件:通过将Mode_Control寄存器(表5)中的MC位设置为01,可以从待机模式或正常模式中选择睡眠模式。只要没有待处理的中(引脚INTN =高电平)或唤醒事件,并且至少有 一觉醒信号源已启用(CAN,LIN或WAKE)。 在不满足这些条件之一的情况下进行任何尝试进入休眠模式的操作都会导致短暂的复位(最小脉冲宽度为3.6 ms;请参见第6.5.1节和表11)。

2、先来看一下UJA1075的中断事件:V1和V2欠压中断(V1UI、V2UI)V1欠压阈值可设置90%或70%;CAN、LIN唤醒中断(CWI、LWI);看门狗超时模式启用的循环中断(CI);芯片上电中断(POSI);和Wake1和Wake2外部硬件唤醒中断(WI1、WI2检测边沿方式可以设置),同时这些中断事件可以通过给相应位写1来清除。

3.下来介绍一下唤醒事件:CAN、LIN唤醒事件(CWI、LWI),Wake1和Wake2唤醒事件(WI1、WI2),唤醒后UJA1075将进入待机模式

LIN硬线唤醒条件:为LIN总线上持续(Twake(busdom)=28~104us(微妙))低电平即可唤醒(亲测可用)

CAN唤醒条件:总线上在规定时间内实现隐性显性序列信号

Wake1和Wake2本地唤醒事件:唤醒边沿触发,具体唤醒边沿可设置(在Int_Control register寄存器)

4、现在我们进入(Sleep)睡眠模式、从待机或者正常模式都可以。首先确保没有中断事件,像POSI(上电中断)、循环中断(CI)和LHWC(复位中断),一般在初次设置寄存器时就会产生,因此需要上电后就将这些中断关闭。像LIN和外部唤醒中断Wake1和Wake2只要硬件不去使能就不会产生中断事件(通常LIN悬空、Wake1和Wake2拉低就可以);然后将看门狗关闭,防止看门狗溢出,产生不必要的系统复位事件对UJA1075的模式进行影响;开启至少一个唤醒源(CAN、LIN、Wake1或者Wake2),我选择全部开启;然后写寄存器MC=01进入Sleep模式。

下图是使用RTT进行打印的时候,产生的POSI、LHWC、CI中断,通过清除中断事件,和向相应寄存器写1来清除中断事件。

这个是当寄存器中断和复位事件被清除后,结合芯片手册可以从masterDataSendReg1寄存器清晰地读到此时看门狗被硬件强制关闭(此时寄存器操作的看门狗将无效);masterDataSendReg2读到当前模式处于MC=10,V2已经是关闭了;masterDataSendReg3读到当前寄存器没有开V1、V2欠压中断,LIN和CAN处于低功耗随时可以总线唤醒,Wake1和Wake2同时被设置为下降沿唤醒检测;masterDataSendReg4读到当前没有任何的中断被唤醒。(注意:RTT打印的寄存器左边为高八位,右边为低八位)

5、当从正常模式进入睡眠模式后,SPI通讯处于关闭状态,RSTN引脚为低,INTN引脚为高(没有待处理的中断)

通过外部按键操作UJA1075寄存器进入Sleep,如下图所示,SPI通讯数据为00。(此时测得的V1电压为3.95V,关掉单片机电源后,芯片电压降到0.5V,然后缓慢下降)

四、唤醒Sleep,通过上面的模式切换图可知,三种唤醒事件可以将Sleep模式唤醒(CAN、LIN、本地唤醒事件WAKE)

Wake1本地唤醒事件:通过外部给WAKE1引脚一个下降沿信号唤醒

1、首先使用Wake1本地唤醒事件,从寄存器可以读出唤醒后,masterDataSendReg1可以读到V2产生了低于检测电压事件(低于2.7V);masterDataSendReg2的MC=00,处于待机模式,并产生LHWC复位事件,masterDataSendReg4中读到Wake1中断标志位产生。(此时V1的电压为5V)

2,此时只需要清除WI1中断标志位,便可重新写寄存器到进入(Sleep)睡眠模式

LIN总线唤醒事件:通过给LIN总线一个持续的低电平信号

1、首先使用LIN总线唤醒事件,从寄存器可以读出唤醒后,masterDataSendReg1可以读到V2产生了低于检测电压事件(低于2.7V);masterDataSendReg2的MC=00,处于待机模式,并产生LHWC复位事件,masterDataSendReg4中读到LIN中断标志位产生。(此时V1的电压为5V)

2、当使用CAN或者LIN进入睡眠模式时,对寄存器写1只能清除中断标志,不能清除挂起的事件,需要对正常模式下对STBCC和STBCL写0,(如需下次唤醒源还是CAN和LIN,则需要将STBCC和STBCL重新置1)然后才可以再次进入Sleep模式

 

  • 9
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值