一、TLE9471 - SBC Mode切换 + VCC2 开关

本文详细描述了TLE9471芯片的StateMachine工作原理,特别是Mode切换寄存器M_S_CTRL在NormalUserMode、SBCDevelopmentMode和SBCInitMode之间的转换过程。还介绍了BitLockingMechanism和如何通过SPI控制不同模式,以及代码实现的示例函数Tlf9471ModeSwitch和TLF9471VCC2Switch。
摘要由CSDN通过智能技术生成

1、State Machine

在这里插入图片描述

2、Mode切换寄存器 - M_S_CTRL

在这里插入图片描述

3、Normal User Mode与SBC Development Mode

  Test Pin:

  • 连接到GND或保持开路的normal user mode操作;
  • 在设备开机时连接到VCC1以激活 SBC Development Mode见第5.1.7章)。SBC Development Mode是一组超级状态机,其中WD计时器被停止,CAN和VCC2的行为在SBC初始化模式下有所不同。否则,在行为上就没有差异了。
  • 集成式下拉电阻器。

4、SBC Init Mode -> SBC Normal Mode

在这里插入图片描述

  • Config. :设置可以在此SBC模式下进行更改;
  • Fixed :设置保持在SBC正常模式中的定义。
  • Bit Locking Mechanism(位锁定机制):某些控制位,例如电荷泵(CP)可以被锁定,并且在执行软重置命令(保持不变)后不会改变其配置
      通过在寄存器M_S_CTRL中设置各自的SBC模式位,通过SPI选择不同的SBC操作模式。当通过SBC重新启动模式时,SBC模式位将被清除,因此总是显示当前的SBC模式。
      任何SPI命令都会将SBC设置为SBC正常模式,即使它是一个非法的SPI命令.为了安全启动,建议使用第一个SPI命令来触发和配置看门狗

5、代码实现

uint8 Tlf9471ModeSwitch(SBCModeControlBit mode)
{
    if(mode > SBCReset)
    {
        return 0xFF;
    }
    else
    {
        TLE9471ES.M_S_CTRL.U = Tlf9471DataTransfer(ReadCmd, M_S_CTRL_Add, 0);
    
        if((TLE9471ES.M_S_CTRL.B.MODE == mode) && (TLE9471ES.M_S_CTRL.U != 0))
        {
            return mode;
        }
        else
        {
            TLE9471ES.M_S_CTRL.B.MODE = mode;

            Tlf9471DataTransfer(WriteCmd, M_S_CTRL_Add, TLE9471ES.M_S_CTRL.U);
            TLE9471ES.M_S_CTRL.U = Tlf9471DataTransfer(ReadCmd, M_S_CTRL_Add, 0);
            if(TLE9471ES.M_S_CTRL.B.MODE == mode)
            {
                return mode;
            }
            else
            {
                return 0xFE;
            }
        }
    }
}

boolean TLF9471VCC2Switch(VCC2ModeControlBit status)
{
    if(status > VCC2On)
    {
        return 0xFF;
    }
    else
    {
        TLE9471ES.M_S_CTRL.U = Tlf9471DataTransfer(ReadCmd, M_S_CTRL_Add, 0);

        if(TLE9471ES.M_S_CTRL.B.MODE != SBCNormalMode)
        {
            return 0xFE;
        }
        else
        {
            if(TLE9471ES.M_S_CTRL.B.VCC2_ON == status)
            {
                return status;
            }
            else
            {
                TLE9471ES.M_S_CTRL.B.VCC2_ON = status;

                Tlf9471DataTransfer(WriteCmd, M_S_CTRL_Add, TLE9471ES.M_S_CTRL.U);
                TLE9471ES.M_S_CTRL.U = Tlf9471DataTransfer(ReadCmd, M_S_CTRL_Add, 0);
                if(TLE9471ES.M_S_CTRL.B.VCC2_ON == status)
                {
                    return status;
                }
                else
                {
                    return 0xFD;
                }
            }
        } 
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值