背景介绍
在项目开发中,使用了TI MSPM0L系列芯片作为主MCU,实现与另一款从机MCU通过LIN收发器进行通信。
主MCU是低压环境下,从机MCU处于高压工作环境下。所以需要一款隔离芯片将高低压进行电气隔离,以及电平转换(高低压芯片的电平不一样)。
问题现象:更换了隔离芯片后,主MCU不工作了。而更换的隔离芯片的区别只是初始电平不一样。原芯片是默认低电平输出,新芯片默认是高电平输出。
问题排查
根据目前隔离芯片的电平区别,做以下的验证:
- 去掉隔离芯片,尝试在PCB的隔离芯片的焊盘上手动分别在TX和RX接高电平。发现没有影响
- 尝试断电后先给TX(RX)短接高电平,然后再上电。发现TX没影响,RX接高电平后会导致主MCU不工作。
- 隔离芯片的RX与主MCU的RX直接相连,所以确认到是TI的RX脚拉了高电平导致芯片不运行。
1 查找TI Datasheet
通过查找手册对应的管脚发现,RX管脚除了作为UART0_RX外还有一个复用功能是BSL调用
该管脚的BSL复用功能如下,其中有说明,如果该管脚置高,则可以使能BSL的功能,使得在芯片启动后的引导期间进入BSL
通过查阅相关说明也有提到,如果在shutdown模式下,BSL的管脚必须保持低电平,如果在此期间拉高则会导致芯片进入BSL。
2 BSL(Bootstrao Loader)功能
通过手册可以知道,BSL的工作如下:
- 在 芯片上电(复位)之后, 芯片会先进入BSL(引导例程),该操作是在我们自己的应用程序运行前就执行的,作用是将芯片配置为运行模式。
- BSL在主应用程序启动之前从只读存储器 (ROM) 中执行。
- 在启动例程成功完成执行后, CPU 被复位, 并且通过无条件地从闪存的 0x0000.0000 和 0x0000.0004 中提取栈。指针 (SP) 和复位矢量来一直启动应用程序。为了启用安全启动, 此应用程序代码的单点入口由引导序列强制执行。无法引导至不同的存储器位置。
所以我们可以知道,芯片上电会进boot固件,完成了初始化配置后,才去运行我们的应用程序。
结论
TI MSPM0L 芯片的GPIO使用上特别要注意,BSL复用功能。因为该管脚在应用程序之前运行的,不受软件控制,所以一旦外围电路的不稳定导致该管脚上电时处于激活电平状态的话,就会使用程序烧录不进或者程序不运行,以及别的异常情况。
最后求个关注、点赞和转发。