文章目录
- 1. 前言
- 2. 烧录数据准备
- 2.1 OTP Wizard的下载与安装
- 2.2 OTP Wizard的配置
- 2.3 OTP寄存器烧录数据提取
- 3. OTP烧录和仿真的流程
- 3.1 OTP烧录流程
- 3.2 OTP仿真流程
- 4. 验证测试
- 4.1 测试代码
- 4.2 测试环境
- 4.3 测试情况
- 5. 参考资料
1. 前言
本篇文章是TLD7002学习笔记的第三篇,主要是介绍如何使用S32K144EVB烧录TLD7002-16ES。主要分为三部分,第一部分介绍OTP寄存器的烧录数据准备,第二部分介绍烧录和仿真OTP寄存器的流程,第三部分介绍烧录环境的搭建和测试情况。
在前面的学习笔记中有提到,想要正常控制TLD7002-16ES,需要预先对TLD7002-16ES进行OTP烧录。英飞凌官网是有针对TLD7002-16ES的OTP烧录板进行售卖的(如下图所示),但是价格比较昂贵。如果只是前期简单评估下,并不确定后续是否使用TLD7002-16ES,中小型客户很难进行购买。
因此,笔者基于NXP的S32K144EVB-Q100官方评估板(如下图)实现了对TLD7002-16ES的OTP寄存器的在线烧录。读者如有需要,可以基于笔者文末提供的程序进行移植。
2. 烧录数据准备
有关烧录数据的准备,笔者借用Infenion官方的上位机OTP Wizard,该工具可以在配置完相应的参数之后导出需要填入寄存器的数据。具体操作方式如下文。
2.1 OTP Wizard的下载与安装
OTP Wizard可以在Infenion官网获取,将下面的链接复制到浏览器打开:
- OTP Wizard - Infineon Developer Center
选择最新的1.2.0版本进行下载安装。
2.2 OTP Wizard的配置
- 安装完OTP Wizard之后,打开该软件,点击
OTP Read/Write
选项卡,出现OTP Management
子选项卡,填写待烧录的器件地址和OTP配置组的名字(自定义),如下图所示。
- 切换到
PWM_DC GPIO0/1
子选项卡,配置如下图所示,
- 左边一列用于设置GPIN1直接控制时,16个通道各自的PWM占空比;
- 右边-列用于设置进入fail-safe模式或者GPIN0直接控制时,16个通道各自的PWM占空比
- 切换到
SAFE_ST-ISET-PWM-PHASE
子选项卡,配置如下图所示,
- 左边一列用于设置16通道各自的电流;
- 右边第一行用于设置进入fail-safe模式时,16个通道是否打开;
- 右边第二行用于设置每个通道的移相功能是否开启;
- 右边第三行用于设置出现故障时去抖循环次数(Diag.Debounce Config.)以及是否使能低功耗初始化模式。
- 切换到
CFG0 to CFG7
子选项卡,配置如下图所示,
- CFG0部分用于配置PWM的频率、移相时间以及GPIN0,GPIN1的相关配置;
- CFG1部分用于配置诊断开启的阈值(VDEN)、诊断采用的延时以及故障引脚的使能;
- CFG2部分用于配置是否使能相邻管脚之间的短路诊断;
- CFG3部分用于配置单颗LED短路阈值,该电压需要高于最大单颗LED正向电压,低于最小LED串正向电压。
- CFG4部分配置LED的阳极连接到VLED还是VS;
- CFG5和CFG6部分配置GPIN0、GPIN0直接控制时,16个通道是否打开;
- CFG7部分配置看门狗超时时间,输出通道的电源短路阈值,错误管理配置等功能
- 切换到
CFG8 to CFG11
子选项卡,配置如下图所示,
- CFG8部分配置热降额以及负载分流功能
- CFG9部分配置HSLI总线的参数
- CFG10部分配置热降额的参考源以及相关的GPIN0引脚电压,用于外接NTC时使用
- CFG11部分用于存放用户自定义的数据
- 切换到
Read-only registers
子选项卡,使用保存快捷建(crtl+s),关闭弹出的选择保存路径,可以看到上位机计算出的CRC值。
- 该CRC值由地址为0x83到地址为0xA5的OTP寄存器值通过CRC算法计算而来,用于保护这部分OTP寄存器数据的完整性,CRC值会存放到地址为0xA6的寄存器中。
- 该CRC算法的初始值为0xFFFF,多项式为0x1021。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IpY8qHwq-1687997858172)(https://files.mdnice.com/user/23173/0ac05524-cfef-4545-873b-524a937164b5.png)]
- 保存配置文件到自己选定的位置。
上文展示的配置参数用于对着笔者自己做的demo板情况,读者需要根据自己实际应用的情况选择合适自己的参数。如果想要对参数有更进一步的了解,可以详细阅读文末的参考资料。
2.3 OTP寄存器烧录数据提取
用记事本打开刚才保存的配置文件,拉倒最下方,如下图所示,在HEX_DATA_16BIT
后面有40组数据,对应着地址从0x83到0xAA的40个OTP寄存器的值(16bit),将这部分数据摘取出来,后面的程序需要用到。
3. OTP烧录和仿真的流程
TLD7002-16ES的OTP寄存器也支持仿真。如果芯片紧张的情况下,可以使用仿真对OTP寄存器进行配置。仿真的情况下,芯片掉电之后对OTP寄存器的配置就会丢失。
OTP烧录和仿真的硬件电路基本一致。给VS供电,使用MCU的io口控制GPIN0,通过HSLI总线接口发送命令进行OTP烧录或者OTP仿真;区别主要是VS的供电范围不一样,OTP烧录需要VS电压在15.5V到20V,而OTP仿真只需要VS电压在6V到20V即可。
OTP烧录和仿真的软件流程也非常类似。下面分别介绍OTP烧录和仿真流程。
3.1 OTP烧录流程
OTP烧录流程如下图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ao2Oek3x-1687997858173)(https://files.mdnice.com/user/23173/104293d3-ab0e-4695-8c07-5daaf33b7aee.png)]
- 首先发两次进行INIT模式的命令,用于同步滚动计数器;
- 然后修改帧间隔为50us,减少烧录流程的时间;
- 然后发送进入OTP模式的命令,等待1ms之后然后拉高GPIN0;
- 接着写入OTP烧录秘钥0xA47B到地址为0x81寄存器
OTP_WRITE
中,此时芯片进入OTP编程模式; - 接着将之前保存的烧录数据按顺序写入0x83到0xAA的寄存器中,因为OTP烧录需要一些时间,建议发送命令之后多等待一些时间(间隔时间参考流程图)。
- 等烧录完成后,拉低GPIN0,并让芯片进入INIT模式;
- 清除芯片的故障,读取
OTP_STATUS
寄存器,确认OTP烧录的情况; - 如果OTP烧录OK,切换芯片进入OTP模式,然后读取0x83到0xAA的OTP寄存器数据,和需要写入的数据对比是否一致;
- 最后再读取下
OTP_STATUS
寄存器。
3.2 OTP仿真流程
OTP仿真流程如下图:
OTP仿真流程和烧录流程类似,主要是进入OTP仿真模式需要写入的值和写入的寄存器不一样,相应流程就不赘述了。
4. 验证测试
4.1 测试代码
测试代码已上传到gitee,链接如下:
- https://gitee.com/Yingming_Cai/s32-k144_-tld7002_-otp_-programming
4.2 测试环境
整个测试环境的框图如下所示:
- S32K144EVB的供电和TLD7002-16ES的供电来源于统一路经;
- S32K144的PTD4控制TLD7002-16ES的GPIN0;
- S32K144的PTB0、PTB1通过CAN SBC(UJA1169)连接到TLD7002-16ES的HSLI总线
因为S32K144EVB板子上原本是PTE4、PTE5连接到UJA1169,这两个引脚没法复用为LPUART,所以需要将PTB0,PTB1连接到PTE4、PTE5。
4.3 测试情况
整个程序的功能为:
- 按下SW2会进行OTP烧录或者OTP仿真(通过开关宏定义
USE_EMULATE
实现); - 按下SW3会进行OTP读取。
- 通过OPENSDA连接电脑打印OTP烧录、仿真以及读取的信息。
OTP仿真时的串口打印情况如下:
OTP烧录时的串口打印情况如下:
通过打印的信息可知,烧录是成功的,并且多次读取OTP寄存器的值,和预期写入的值是一致的。
5. 参考资料
-
Application Note: Infineon-TLD7002-16ES OTP (Chinese)
-
User Manual: Infineon-TLD7002-16ES-UM-v01_20-EN