大家好、
电路板:F28032
该程序正在闪存中运行、并在运行一段时间后定期复位、 您能否为该解决方案提供参考设计?
当连接到仿真器进行单步调试时、发现 Flash 程序进入了一个非法中断。
图1显示了正常运行、图2显示了实际代码运行。
图1.
3F39FB 的下一行代码已从正常代码更改为非法中断代码。
图2.
INT5在程序中未启用、但在 非法中断代码期间调用 INT5、这会导致未知现象和风险。
那么、专家、您以前是否遇到过这种情况? 从软件中,可以找到原因 ?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
大家好、
电路板:F28032
该程序正在闪存中运行、并在运行一段时间后定期复位、 您能否为该解决方案提供参考设计?
当连接到仿真器进行单步调试时、发现 Flash 程序进入了一个非法中断。
图1显示了正常运行、图2显示了实际代码运行。
图1.
3F39FB 的下一行代码已从正常代码更改为非法中断代码。
图2.
INT5在程序中未启用、但在 非法中断代码期间调用 INT5、这会导致未知现象和风险。
那么、专家、您以前是否遇到过这种情况? 从软件中,可以找到原因 ?
您是否启用了看门狗或缺少时钟? 最好检查 WDCR、PLLSTS 和 NMIFLG 中的标志、以查看是否有任何故障检测电路断言复位。
您能否监控电源以确保它们经过良好调节? 如果电压电平超出规格、BOR 可以将一个复位置为有效。
[引用 userid="493195" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms "] 3F39FB 的下一行代码已从正常代码更改为非法中断代码。这是一个闪存位置、所以有可能发生了一个错误的 Flash_Program()执行。 闪存内容可能被电气干扰破坏、但这种可能性要小得多。
您好、被叫方、
非常感谢您的回复、也就是说 、您能提供更详细的解释吗?
这种现象可能是因为芯片通电一段时间后是正常的、运行到3F39FB 的下一行代码再次从正常代码变为未启用的 INT5。 客户检查上电是否正常、然后确认复位是由看门狗引起的。 看门狗的复位是因为程序已进入循环程序、而没有启用中断。
如红色 框下方所示、它将周期性执行、然后 INT5未启用。 因此 、如何查找进入未知状态的程序段、以及在执行过程中、具有相同源地址的程序代码将发生变化。
您好、被叫方、
每次客户的故障产品运行时、上述故障均可100%重现。
您好、被叫方、
是的、 代码正在闪存中运行、但每次发生故障时、代码都会更改。
您好、被叫方、
这种情况不太可能发生、因为在擦除闪存然后重新编程代码后、芯片可以正常工作。
使用示波器监控 VDD 和 VDDIO 电源、确保其保持在数据表建议的工作条件内。
[引用 userid="493195" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms/3844713 #3844713"] 这种现象可能是因为芯片通电一段时间后正常,运行到3F39FB 的下一行代码再次从正常代码更改为未启用的 INT5。 客户检查上电是否正常、然后确认复位是由看门狗引起的。 看门狗的复位是因为程序已进入循环程序、而没有启用中断。我建议专注于闪存中的代码损坏问题。 INT5的不需要分支是由闪存损坏引起的。
您能否确认在运行期间有人调用闪存 API 来对闪存内容进行编程? 如果是、是否观察到闪存 API UG 中的此注意事项?
您好:被叫方,
我以前也怀疑过这个问题。 客户读取正常产品和故障产品的闪存内容、并且比较结果一致。 当故障产品再次断电并加载到闪存中时、它可以在之后正常工作。
您是否意味着故障器件在不重新编程的情况下返回与正常工作器件相同的闪存映像? 或者、您是否意味着故障器件上的闪存映像始终损坏。
[引用 userid="493195" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms/3845386 #3845386] 当故障产品再次断电并加载到闪存中时,它可以在之后正常工作。这一观察是帮助支持或争议根源理论的良好证据、但它本身并不是根本原因失败的有力指标。
您好、被叫方、
代码未更改。 检查闪存中两个产品(作为故障产品和正常产品)的内容是否相同。
您能否澄清您的原始问题陈述? 您已经附加了一个图像、显示了地址范围为0x3F39FB - 0x3F39FD 的不同闪存内容。
在什么条件下会存在差异。 在什么条件下(或事件序列)、内容将恢复为原始状态?
已编程闪存映像的0x3F39FB - 0x3F39FC 存储器部分吗?
如果是、故障设备上的错误内容会在什么时间点恢复为与正常设备相同的内容?
您好、被叫方、
是的、 0x3F39FB - 0x3F39FC 是 已编程闪存映像的存储器部分。
我再次澄清我的问题:
下图的左侧是正常产品上运行的代码、下图的右侧是图1中故障产品上运行的代码。 它进入 INT5、 然后 INT5没有被启用。(不是非法指令陷阱)。
图1.
然后输入 INT5 (即 EQEP1_INT_ISR)、运行到3F2E43行、更改为 图2中的3F2E43 SUBU ACC、@0、 然后进入 INT5、这样 它 将反复执行图3中的代码。
图2.
图3.
对于上述问题、如果要查找故障、应如何开始? 因为当程序重新烧写闪存时、芯片可以正常工作。
在什么情况下、将输入未启用的中断? 例如 INT5
期待您的回复。
通过根据观察到的因果事件组织故障行为并描述可重复性、构建知识库。
[引用 userid="493195" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms/3849340 #3849340"] 下图左侧是正常产品上运行的代码,下图右侧是图1中故障产品上运行的代码。 它进入 INT5、 然后 INT5未被启用。(不是非法指令陷阱)。[/quot]CPU 进入 INT5是因为它正在执行 INTR"Emulate Hardware Interrupt"运算代码。 您可以在《C28x 指令集参考指南:
模拟中断。 INTR 指令将程序控制传递给中断
与指令指定的矢量相对应的服务例程。 INTR
状态寄存器 ST1中的 INTM 位不会影响指令。 它也不受影响
中断使能寄存器(IER)或调试中断使能寄存器中的使能位
(DBGIER)。
问题的关键在于某件事情正在破坏闪存图像。
[引用 userid="493195" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms/3849340 #3849340"]因为当程序重新刻录闪存时,芯片可以正常工作。在更好地了解损坏的性质之前、请勿对闪存重新编程。 闪存映像是否在断电和上电之间保留相同的损坏映像? 这在多个器件上是否可见? 如果是、它们是否具有相同的损坏图像?
您好、被叫方、
根据客户之前的描述,
他们使用 CCS/Memory 提取闪存的内容、并将加电后在闪存中烧录的代码与发生故障时烧录的代码进行比较、结果是一致的。
二、对其他正常产品和故障产品的 Flash 进行比较,结果是一样的。
因此 、我对结果有点怀疑、是否有更可靠的方法来验证 闪存映像?
您好、被叫方、
是的、可能会看到多个器件、 可能性更大。
您好、被叫方、
电源正常。 我还在现场测量并确认了这一点。
根据客户之前的描述,
他们使用 CCS/Memory 提取闪存的内容、并将加电后在闪存中烧录的代码与发生故障时烧录的代码进行比较、结果是一致的。
二、对其他正常产品和故障产品的 Flash 进行比较,结果是一样的。
因此 、我对结果有点怀疑、是否有更可靠的方法来验证 闪存映像?
[/报价]必须解决这种不一致性才能找出根本原因。
从屏幕截图中、他们可以从"Disassembly"视图中清楚地看到闪存损坏。 当 CPU 暂停时处于此故障状态时:
您好、被叫方、
再次加载闪 存以恢复正常、 您现在能理解这个问题吗?
您好、被叫方、
很抱歉,我不理解这一评论。
我们似乎遇到了一些沟通困难。 是否有任何当地同事能够帮助进行此讨论?
绍兴
根据所提供的信息、我认为以下内容是正确的:
您能否确认应用程序是否在运行期间尝试对闪存进行编程? 如果是、请在进行编程时重点关注 API 调用和功率稳定性。
Tommy
绍兴
请说明....
根据我之前的理解、这听起来像是损坏序列:
您能确认我的理解吗?
当您说"故障出现在客户的主要功能之前"时、您是否描述了(5)处的情况? 如果是、请确认损坏的固件映像在断电和上电之间的(5)处保持静态。 另请检查其他设备在到达(5)时是否共享相同的损坏固件映像。
对 API 调用和电源稳定性的审核仅在固件损坏之前有效(2)。
Tommy
您描述的此行为处于损坏序列的哪个状态?
要重新强调:
[引用 userid="2198" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms/3856498 #3856498"]只有在固件损坏之前,API 调用和电源稳定性的审核才有效(2)。您是否与他们分享了以下评论?
[引用 userid="2198" URL"~/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1039471/tms320f28032-while-running-program-there-is-a-periodic-reset-signal-the-reset-period-is-about-24ms/3849680 #3849680"]CPU 进入 INT5是因为它正在执行 INTR"Emulate Hardware Interrupt"运算代码。 您可以在《C28x 指令集参考指南:
模拟中断。 INTR 指令将程序控制传递给中断
与指令指定的矢量相对应的服务例程。 INTR
状态寄存器 ST1中的 INTM 位不会影响指令。 它也不受影响
中断使能寄存器(IER)或调试中断使能寄存器中的使能位
(DBGIER)。
他们是否同意或不同意?