不要忽略默认的MCU设置
调试是嵌入式设计的一个重要组成部分,它需要弥合硬件/软件之间的鸿沟。在系统级,嵌入式系统的功能越来越多地由固件定义,因此避免bug需要具有不同学科的工程师在开发过程中密切合作。
嵌入式组件(如mcu)提供的功能和可配置特性的水平正在不断提高,但它们提供了许多并非每个设计都需要的特性。通常,这些额外的功能可以被忽略,很少引起问题
这些特性通常由可以通过软件修改的寄存器控制。它们在通电时有一个默认设置,如果保持不变,将继续在这些默认设置下运行。在许多情况下,这可能不存在问题。
但是,如果这些特性仍然未被使用或未经测试,则有可能以某种无法预见的方式感受到它们的影响。系统中可能会出现错误,这些错误是由完全合法的功能引起的,而这些功能可能被忽略了。
即使在理想条件下,查找故障也可能是困难、耗时和昂贵的。如果故障的原因是低级功能没有正确初始化,那么查找它可能会变得更具挑战性。了解硬件平台的初始状态如何影响整个设计需要对整个系统有更高的认识。
例如,考虑MCU上的SPI总线访问串行闪存,这是许多嵌入式系统中使用的相对简单的功能。如果在存储值中检测到错误,则表明内存(而不是MCU)发生了故障。这是一位客户的经验,当从闪存的状态寄存器连续读取时,显示它正在检测读/写错误。
工程师们相信这些症状表明串行存储器出现了故障,尽管它仍然在规定的续航极限内,只完成了大约60K的写入周期。当串行闪存设备返回对话框进行进一步测试时,即使执行了超过300K的写入周期,也没有发现任何故障。
为了追踪真正的故障,Dialog工程师调查了客户的应用程序并探测了SPI信号。看起来是内存设备的故障实际上是系统噪音问题,而且很容易纠正。
尽管这看起来是PCB或电路设计问题,但噪声实际上是SPI信号上的过冲和欠冲,这是由与闪存接口的MCU GPIO信号的驱动强度过大引起的。
人们发现,这种设计基于一种相对较新的MCU,它允许在固件中修改I/O引脚的驱动强度,并且默认设置为最大驱动级别。降低信号的驱动强度足以消除SPI信号线上的过冲和欠冲;有效地消除了系统级噪声源。
这里的一个重要点是,尽管闪存设备正在尽最大努力应对大量的系统噪声,但MCU上的一个可配置功能引入了一些影响,这些影响很容易被解释为设计的一个单独部分中的故障。
在这种情况下,通过稳健的设计方法检测到故障,并通过与客户设计团队合作的Dialog工程师的努力解决。即使默认设置是有帮助的,也应该进行验证。
硬件和软件工程师以及客户和供应商之间的工作关系非常紧密,足以应对使用最新技术进行设计所带来的挑战。
阅读完整的案例研究”数字接口中的系统级噪声如何导致串行闪存中的虚假错误"