调试是嵌入式设计的重要组成部分;必须跨越硬件/软件鸿沟的一种。在系统级别,嵌入式设计的功能越来越多地由固件定义,因此避免错误需要具有特定学科的工程师在项目的设计阶段密切合作。这也可能意味着在不可避免地出现错误时抵制指责的冲动。
或许正是软件定义硬件的本质使现代嵌入式设计成为一个如此有趣的职业。每个新的微控制器 (MCU) 似乎都提供了更高的集成度和更高级的功能,但在它被编程之前它完全没有意义。虽然这种级别的集成和配置显然是一个促成因素,并且正在为产品设计带来巨大的进步,但它有时会给工程师带来无法预料的问题。
MCU 等嵌入式组件提供的功能级别和可配置特性也在不断提高,这些组件提供了许多并非所有设计都需要的特性。这些额外的功能可能会被忽略,很少会引起问题。
正如大多数工程师所理解的那样,这些功能通常由可以通过软件修改的寄存器控制。因此,它们在上电时将具有默认设置,如果保持不变,将继续在这些默认设置下运行。在许多情况下,这可能不会造成问题,但如果这些功能仍未使用并且可能未经测试,那么它们的影响可能会以某种无法预料的方式感受到。系统中可能会出现错误,这是由可能被忽略的完全合法的功能引起的。
即使在理想条件下,查找故障也可能很困难、耗时且成本高昂。通常,故障将通过其影响来识别,这将提供足够的证据让工程师能够追踪原因。这个原因是硬件还是软件相关在很大程度上无关紧要,但也许仍然存在争议;重要的是它被找到并纠正了。
如果故障的原因是未正确初始化的低级功能,那么找到它可能会变得更具挑战性。了解硬件平台的初始状态如何影响整个设计需要对整个系统有更高的了解,并且追踪这些难以捉摸的条件确实会消耗资源。
例如,考虑访问串行闪存的 MCU 上的 SPI 总线,这是在许多嵌入式系统中使用的相对简单的功能。如果在存储的值中检测到错误,则表明内存而不是 MCU 出现了故障。当从闪存的状态寄存器连续读取显示它正在检测读/写错误时,这是一位客户的经验。可以理解的是,假设存储设备出现故障,这一理论得到了证实,即如果在状态寄存器读取之间引入短暂的延迟,检测到的故障数量似乎会减少。此外,电源循环似乎可以暂时清除故障。
工程师们认为这些症状表明串行存储器出现故障,尽管它仍然在其指定的周期限制内,仅完成了大约 60k 的写入周期。当串行闪存设备返回 Adesto 进行进一步测试时,即使执行了超过 300k 的写入周期,也没有发现故障。
为了追查真正的故障,Adesto 工程师调查了客户的应用并探测了 SPI 信号。看起来是内存设备的故障,实际上是系统噪音问题,而且很容易纠正。虽然部分原因是 MCU 和闪存之间的 PCB 走线阻抗不匹配,但噪声并不完全是 PCB 设计不良或信号完整性问题的结果。
尽管看起来是 PCB 或电路设计问题,但噪声实际上是 SPI 信号上的过冲和下冲,这是由信号驱动强度过大引起的。过冲足以破坏闪存设备的电荷泵并导致读写错误。在某些情况下,SPI 信号上的过冲和下冲也可以解释为信号转换,这也可能导致读取或写入错误。
显示 SPI 线上存在的过冲和下冲的跟踪图像
一种可能的解决方案是在信号迹线上放置一个 RC 电路,以减慢转换速度。然而,人们发现该设计基于一个相对较新的 MCU,它允许在固件中修改 I/O 引脚的驱动强度。降低信号的驱动强度足以消除 SPI 信号线上的过冲和下冲,有效消除系统级噪声源。
这里最重要的一点并不是闪存设备正在尽最大努力应对大量系统噪声,而是 MCU 上的可配置功能可能会引入很容易被解释为单独部件中的故障的影响的设计。在这种情况下,通过稳健的设计方法检测到故障,并通过 Adesto 工程师的勤奋解决。
也许这里真正的教训是,看似硬件故障的问题可以通过软件轻松修复。一个组件中看似故障的情况可以追溯到另一个组件中的错误配置。硬件和软件工程师以及客户和供应商之间的工作关系应该足够牢固,以承受最新技术设计可能带来的挑战。即使默认设置旨在提供帮助,也应该对其进行验证。优化这些设置可以显着提高系统性能和可靠性。
作者:Paul Hill Gordon MacNee
审核编辑:郭婷
-
mcu
+关注
关注
146文章
17141浏览量
351091 -
嵌入式
+关注
关注
5082文章
19116浏览量
304957 -
SPI
+关注
关注
17文章
1706浏览量
91546
发布评论请先 登录
相关推荐
评论