ASLx507(ASL1507、ASL2507)初始化流程设计

ASLx507初始化流程设计

背景介绍

ASLx507简介

ASLx507是NXP的boost芯片ASL1507和ASL2507的总称,主要用于汽车灯光控制,常与NXP的buck芯片ASL241x同时使用。

ASLx507状态机

/ASLx507状态机

开始工作的两个条件

  1. VBAT引脚电压高于上电检测阈值电压Vth(det)on(4.5V)
  2. EN引脚拉高

寄存器访问

ASLx507寄存器访问

特殊寄存器

ASLx507NVM寄存器00H

初始化流程设计

V1.0初始化流程

  1. 拉低EN引脚,防止调用ASLx507初始化函数之前EN引脚被拉高,进入不正常状态(limp-home, fail silent),无法进行初始化
  2. 拉高EN引脚,使ASLx507由reset状态进入configuration状态(VBAT正常供电的情况下)
  3. 检测芯片状态,确认ASLx507已进入configuration状态
  4. 执行 NVM mode entry 流程,进入NVM access模式
  5. 读取NVM寄存器00H的值,并根据每个field的值为相应的全局变量赋值以待备用(初始化寄存器时VGG电压配置范围的判断、mainfunction函数中是否要刷新limp-home寄存器的判断)
  6. 执行 NVM mode exit 流程,退出NVM access模式,重新进入configuration模式
  7. 进行寄存器的配置
  8. 转换状态至operation模式
  9. 确认ASLx507成功进入opreation模式之后结束初始化流程

V2.0初始化流程

修改初始化流程原因:
  出于功能安全角度考虑,要求MCU挂掉之后ASLx507仍有输出(保持车灯不会因MCU挂掉而突然熄灭)。因此,要求ASLx507的EN引脚不能直接由MCU的IO引脚控制。


初始化流程修改项:
  由于此时产品线硬件设计并未想出更好的方案操控EN引脚,只要求驱动中不存在对EN引脚的控制。因此,相对上一版本的初始化流程并未做出太大改动,只是删除了对EN引脚的控制。但同时对ASLx507的初始化函数的调用有了一定的要求。


初始化流程修改后注意事项:
  必须在初始化之前设法将EN引脚拉高,且EN引脚拉高时间不能过早,最好在调用ASLx507初始化函数的前一个步骤进行EN引脚的拉高。

V3.0初始化流程

修改初始化流程原因:
  产品硬件修改,ASLx507的EN引脚通过上拉电阻直接于电源相连,且产品软件需使能limp-home模式,导致ASLx507提前开始工作,且未在一定时间内执行mainfunction函数进行limp-home寄存器的刷新。从而导致ASLx507在执行初始化函数之前就进入limp-home状态,无法正常进行初始化流程。


修改初始化流程注意事项:
1. 需加入对ASLx507是否处于limp-home模式的判断,若处于limp-home模式,需执行退出该模式的流程
2. 需在EB界面增加配置项:①是否在初始化流程中读取NVM寄存器00H的值 ②NVM寄存器00H的值(此配置项仅在上一个配置项为"否"时生效)
3. 由于ASLx507的状态机转换流程可能存在:
  reset —> configuration —> limp-home(未及时刷新limp-home寄存器) —> operation(NVM寄存器组配置退出limp-home模式后进入operation模式) —> standby(NVM寄存器00H的AUTO位置0,无法从operation转换置configuration模式)
  因此,需允许在standby模式下进行寄存器的配置


修改后的初始化流程:

  1. 判断需要在初始化流程中读取NVM寄存器00H的值
  2. 若需要在初始化流程中读取NVM寄存器的值,则执行"NVM mode entry"流程,进入"NVM access"模式,读取NVM寄存器00H的值后,执行"NVM mode exit"流程,退出"NVM access"模式
  3. 检测ASLx507是否处于limp-home状态,若处于limp-home状态,则执行退出limp-home的流程
  4. 读取ASLx507的当前状态
  5. 若当前处于"operation"模式,则将CFG_DN位置0
  6. 若当前处于"configuration"或"standby"模式,则进行一步,否则跳转至"流程4"(等待状态转换的过程应该设置读取次数的限制)
  7. 进行配置寄存器的配置
  8. 转换状态至operation模式
  9. 确认ASLx507成功进入opreation模式之后结束初始化流程

举一反三

对于设计有NVM寄存器的芯片,在进行驱动软件设计时,需要考虑其在功能安全领域的应用。对于该类芯片的驱动,需考虑好如何在控制输出或状态转换的引脚不受MCU的IO控制的情况下,如何进行软件设计。

  • 26
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用MATLAB编程时,如果遇到未保存的代码意外丢失,可以尝试以下方法来恢复未保存的代码: 1. 查找剪贴板:在MATLAB编辑器中,查找剪贴板中是否有您最近复制或剪切的代码片段。可以通过使用CTRL+V快捷键将剪贴板的内容粘贴到编辑器中。 2. 寻找临时文件:MATLAB会在特定目录中保存临时文件,例如: - Windows系统:在"C:\Users\<用户名>\AppData\Local\Temp"目录下 - macOS系统:在"/Users/<用户名>/Library/Caches/MathWorks/MATLAB"目录下 - Linux系统:在"/tmp"目录下 在这些目录中找到以".asv"或".aslx"为扩展名的文件,这些文件可能包含未保存的代码。将找到的文件复制到新的位置,并用MATLAB编辑器打开以查看其中的代码。 3. 使用回滚功能:MATLAB提供了回滚功能,可以在编辑器中查看文件的历史更改并还原到以前的版本。通过在编辑器中选择"File" -> "Manage Files" -> "Revisions",然后选择最近的版本来恢复未保存的代码。 4. 使用版本控制工具:如果您使用了版本控制工具(如Git),您可以检查工作目录中尚未提交的更改,以找回未保存的代码。通过在命令行中使用版本控制工具的相关命令,如"git status"查看未提交的更改,并使用"git checkout"命令还原到以前的版本。 5. 检查内存中的变量:在MATLAB中,代码保存后,变量的值会保留在内存中。如果您在运行代码之前遇到了意外丢失,尝试使用MATLAB的"whos"命令来查看内存中的变量,然后将这些变量重新赋值给新的MATLAB脚本文件中。 总之,这些方法可能有助于恢复未保存的代码。然而,为了避免代码丢失,建议定期保存并使用版本控制工具跟踪代码的更改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值