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