公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob

【专注于电机控制的嵌入式功率芯片,这个不难!】TL9869芯片BootRom启动分析

【专注于电机控制的嵌入式功率芯片,这个不难!】TL9869芯片BootRom启动分析

Jason3
Level 2
Level 2
25 comments on blog 10 comments on blog 5 comments on blog

TLE9869芯片内置了32Kb大小的BootRom用于内置芯片固件。BootRom在内存中的映射地址为0X00000000-0X00007FFF。

1       BootRom Startup

由于BootRom Startup代码存储在0X00000000开始的地址空间内。0X00000000是Cotex-M0内核默认复位中断向量存储地址,因此BootRom Startup是芯片复位后执行的第一段程序。

1.1    功能

BootRom Startup的主要功能如下:

l  SRAM初始化

l  NVM初始化

l  PLL初始化

l  模拟模块修正

l  芯片运行模式选择(依赖于芯片外部引脚状态)

 

1.2    User Mode

即用户模式,在此模式下芯片运行在正常模式执行用户代码。User Mode代码起始地址为0X11000000。其中0X1100 0000-0X1100 0003地址中存储了User Mode模式下SP堆栈指针的默认值,0X1100 0004-0X1100 007地址中保存了用户代码中的复位向量(由于Cotex-M0内核指令集为Thumb指令集,因此0X1100 0004-0X1100 007地址中保存的复位向量第0位始终为1以标识内核运行在Thumb模式下)。在跳转到User Mode模式前,BootRom会检查0X1100 0000-0X1100 0003地址中保存的复位向量有效性,若复位向量为0XFFFF FFFF则表示复位向量无效且NVM未处于保护模式,此时芯片会进入休眠模式。

1.3    名词解释

1.3.1   Boot Strap Loader

芯片内置BootLoader程序,当芯片处于BSL(Boot Strap Loader)时,可以通过LIN总线对用户代码进行更新。芯片在BSL停留的时间取决于NAC的值。

 

1.3.2   Debug Suport Mode

即调试模式,在BootRom Startup执行完毕后,根据芯片外部引脚(TMS,P0.0)的状态判断是否进入调试模式。在调试模式下看门狗默认关闭,当Debug模式下芯片陷入错误循环时看门狗启动。

1.3.3   NAC

No Activity Code,用于定义芯片在BSL模式下的等待时间。NAC存储在NVM的0X10FF FFFC-0X10FF FFFF地址字空间的第16位-23位的1Byte空间中。其中BSL模式下的等待时间与NAC值的换算公式如下:

    BSL_WaitTime=NAC*5    (ms)                                         

BSL的最大等待时间为140ms即当NAC为28时。

l  NAC = 0时,芯片跳过BSL直接进入User Mode

l  NAD = 0XFF时,芯片永远停留在BSL模式下等待LIN总线请求进行用户代码更新。(看门狗关闭)

初始情况下,NAC默认值为0XFF(保存在NVM CS中)[1]

1.1.4   NAD

Node Address For Diagnostic,用于定义芯片在BSL模式下,接收LIN总线数据时的NAD地址。NAD储存在存储在NVM的0X10FF FFFC-0X10FF FFFF地址字空间的第24位-31位的1Byte空间中。

初始情况下,NAD默认值为0XFF(保存在NVM CS中)


1.4    BootRom Startup结构

    

Startup中主要包含以下模块:

草图 (1).png


1.4.1   Watchdog Disable

芯片复位后,BootRom Startup将看门狗设置为常开窗模式(200ms)。

l  在BSL阶段,上位机与下位机成功同步后关闭看门狗

l  在跳转到User Mode前,看门狗使能。在User Mode下看门狗无法关闭

 

1.4.2   RAM Init

向RAM区域写入0值,以将RAM区域ECC值更新到正确值。这是由于POR等复位后,RAM区域内存储的数据可能为随机值此时该区域ECC值可能不正确,在这种情况下用户代码直接对RAM进行操作可能引起ECC错误。

 

1.4.3   MapRAM Init

由于MapRAM所在存储介质为断电易失储存器,因此在复位后需要重新对NVM区域进行内存映射以确保对Data Flash的正常访问。根据各Data Flash Page中MapBlock中保存的信息重新建立内存映射表来完成对MapRAM的初始化。

在MapRAM Init过程中,若MapBlock中存在ECC错误或者出现两个Page指向同一映射入口的Double Map问题。BootRom Startup执行SA服务尝试对错误进行修复。

l  SA尝试对MapBlock中的ECC错误进行修复。

l  对于Double Map,SA会删除其中一个Page的映射来进行。SA最多能够修复一个Double Map故障。

通过SCU_MEMSTAT[1]寄存器可以检查SA服务的执行结果,当SA修复执行失败时需要用户手动对Data Flash Sector进行擦除来修复。若SCU_MEMSTAT寄存器中反应的映射完整性状态[J1] 为失败,则不应当对Data Flash进行写操作或者擦除操作。复位进入用户程序后,应当对SCU_MEMSTAT寄存器状态进行检查。

 

1.4.4   Analog Module Trimming

当复位类型为Cold Reset或Warm Reset时Startup程序将保存在Page0、Page1 100TP中的模拟模块修正值赋值到PMU、电压调节器、LIN模块、温度传感器、电子振荡器、PLL等其他模拟模块的SFR寄存器中。

在从100TP NVM中获取修正值时,Startup会对存储在100TP NVM中的数据进行CRC校验。若CRC校验失败则Startup将备份修正值赋值到对应的SFR寄存器中。

 

1.4.5   PLL Init

除了Hot Reset以外复位类型引起的复位在跳转到User Mode之前会将系统时钟的时钟源设置为PLL输出,并且将系统时钟频率设置到最大值。

若在切换PLL输出作为系统时钟源时,超过1ms PLL未能锁定,则使用内部振荡器f INTOSC/4 = 20Mhz作为系统时钟。


1.5   BootRom Startup运行机制

1.5.1   Startup流程图

1.png

2.png



0 点赞
2388 次查看
8 评论