飞思卡尔Kinetis KE-写闪存


12

多年来,我一直在使用各种微控制器和微处理器,但Kinetis KE系列(特别是S9KEAZN64AMLC)似乎使我感到困惑。

2015年1月17日,TL; DR:

飞思卡尔确认其Kinetis Design Studio软件v2.0.0不适用于该设备(包括其自己的TRK-KEA64评估板)。他们建议暂时使用CodeWarrior MCU V10.6。

Segger已发布v4.96a(“ a”很重要,我使用的是v4.96),此问题已得到纠正,并允许您将Segger J-Link Lite CortexM调试器板与KDS一起使用,并具有完整的程序/调试功能。

之前发布的套件含有Segger我v4.96a管理,以能够通过重刷OpenSDA重新编程飞思卡尔的便宜($ 15)FRDM-KL25Z评估板的OpenSDA调试器闪存芯片固件谈到与USBDM(使用v4.10.6.240)。然后,我使用了USBDM的独立“ ARM编程器”软件。我没有花太多时间尝试调试工作,因为我足够精通“老式”调试,因此不需要调试。请确保将“良性”程序刷新到板载目标KL25中,否则可能会干扰编程,因为即使通过J11剪切,板载目标KL25的复位线仍仍连接到OpenSDA调试器(请参见Keith Wakeham的博客文章) ,在下面链接)。

非常感谢Erich Styger非常慷慨地帮助我确定问题并通过电子邮件确认我的发现。

现在回到我们定期安排的问题:

我建立了一个愚蠢的简单3.3V接线板。PTA上有一些LED,PTC上有UART连接,而SWD线在其专用线上。字面上没有什么幻想或有趣的董事会。

我正在使用针对Cortex-M的J-Link Lite(J-Link LITE CortexM-9,请参阅https://www.segger.com/jlink-lite-cortexm.html),在OSX和Windows下我都可以同样的结果:J-Link Commander实用程序可以识别芯片,我可以读写SRAM,并通过手动读写正确的内存映射I / O地址来处理外设。但是,当我尝试刷新设备时,它会失败。

$ JLinkExe
SEGGER J-Link Commander V4.94c ('?' for help)
Compiled Oct 31 2014 20:08:55
DLL version V4.94c, compiled Oct 31 2014 20:08:48
Firmware: J-Link Lite-Cortex-M V8 compiled Jul 17 2014 11:40:12
Hardware: V8.00
S/N: 518107921
Feature(s): GDB
VTarget = 3.332V
Info: Could not measure total IR len. TDO is constant high.
Info: Could not measure total IR len. TDO is constant high.
No devices found on JTAG chain. Trying to find device on SWD.
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots
Cortex-M0 identified.
Target interface speed: 100 kHz

J-Link>device skeazn64xxx2
Info: Device "SKEAZN64XXX2" selected (64 KB flash, 4 KB RAM).
Reconnecting to target...
Info: Found SWD-DP with ID 0x0BC11477
Info: Found SWD-DP with ID 0x0BC11477
Info: Found Cortex-M0 r0p0, Little endian.
Info: FPUnit: 2 code (BP) slots and 0 literal slots

J-Link>r
Reset delay: 0 ms
Reset type NORMAL: Resets core & peripherals via SYSRESETREQ & VECTRESET bit.

J-Link>erase
Erasing device (SKEAZN64xxx2)...

(...several second pause while it communicates with the MCU...)



****** Error: PC of target system has unexpected value after erasing sector. (PC = 0xFFFFFFFE)!
---------------------------------------------------------------------- Registers -------------------------------------------------------------------------------------
    PC   = FFFFFFFE
Current: R0   = 00F3E3BE, R1   = 00000001, R2   = 4004801C, R3   = 00000001
    R4   = 00000000, R5   = 00000000, R6   = 000000F4, R7   = 1FFFFD61
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------


Info: J-Link: Flash download: Total time needed: 2.174s (Prepare: 0.894s, Compare: 0.000s, Erase: 0.736s, Program: 0.000s, Verify: 0.000s, Restore: 0.542s)
ERROR: Erase returned with error code -5.

J-Link Lite非常完美(我可以用它来读写另一台Cortex-M0处理器nRF58122 SoC),并且该设备似乎可以正常工作。我知道Kinetis已解锁,因为它们是DigiKey的出厂新鲜库存,但即使这样,JLinkExe中的“ kinetis unlock”命令仍会超时,而不会出现任何错误或有用的信息。

在这一点上,我确定我正在做一些愚蠢的事情,但是我可能会茫然。

以前有人使用过这些设备吗?您如何编程?

编辑以添加演练:

一些更多的信息:

我读到NMI#引脚已使能,而无需复位(并通过读取SIM_SOPT对此进行了验证),但是启用时它具有内部上拉电阻。在该特定部分上,PTB4位于引脚10上,这在我的设计中是无连接的。禁用NMI引脚没有区别。RST#是类似的;它连接到使引脚接地的按钮,并且也连接到J-Link Lite,但是没有外部上拉电阻。这无关紧要,因为与NMI#一样,RST#引脚具有内部上拉功能,当PTA5配置为复位时,内部上拉功能将启用。

现在看时钟...处于重置状态,ICS是FLL的时钟源,ICS_C2中的BDIV设置为001(重置默认值)。如果我理解正确,这意味着32kHz内部振荡器将FLL乘以1024,然后再除以2,从而使ICSOUTCLK为32kHz * 1024/2或16.8MHz。我可以通过阅读ICS_S,通过J-Link CLI验证FLL是否被锁定:

J-Link>mem8 40064004 1
40064004 = 50

(设置了LOCK和IREFST,这是正确的。)

然后,我继续进行操作,以通过读取SIM_SCGC来验证SIM是否为闪存控制器启用了时钟。我还可以快速检查以确保SIM_BUSDIV中的BUSDIV设置为零,这意味着BUSCLK与ICSOUTCLK的频率相同(即未分频):

J-Link>mem32 4004800c 1
4004800C = 00003000
J-Link>mem32 40048018 1
40048018 = 00000000

到目前为止,一切看起来都很好。BUSCLK为16.8MHz,闪存控制器时钟未设门。

现在,让我们进入闪存控制器。复位后FCLKDIV为零,我们需要一个1MHz的时钟。KEA64RM中的表18-2显示FDIV应该设置为0x10。

重置:

J-Link>mem8 40020000 1
40020000 = 00

设置分隔线并验证情况是否良好:

J-Link>w1 40020000 10
Writing 10 -> 40020000
J-Link>mem8 40020000 1
40020000 = 90

设置FDIVLD,并显示FDIV中的正确值。

在继续进行之前,请确保未对闪光灯进行保护:

J-Link>mem8 40020001 1
40020001 = FE

KEYEN = 11(禁用)且SEC = 10(不安全)。好。让我们尝试验证设备为空:

J-Link>mem8 40020006 1
40020006 = 80
J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>mem8 40020006
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 83

在这里,我们看到FSTAT中的MGSTAT位指示空白检查失败,并且还发现了不可纠正的错误。奇。让我们尝试自己删除它:

J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 8
Writing 08 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80

擦除所有命令成功。现在让我们尝试空白支票:

J-Link>w1 40020002 0
Writing 00 -> 40020002
J-Link>w1 4002000a 1
Writing 01 -> 4002000A
J-Link>w1 40020006 80
Writing 80 -> 40020006
J-Link>mem8 40020006 1
40020006 = 80

现在空白支票还好吗?

在这一点上,我准备放弃,吃掉这些原型所造成的损失,并选择ST以前从未遇到过此类问题的处理器。Kinetis文档足够详尽,但是非常密集,我发现入门非常困难。我可以通过读取内存来摆动I / O并访问其他外围设备,但是我一生都无法弄清楚闪存控制器的问题所在。我从事micros工作已有20多年了,这种困难是我以前从未遇到过的。

20150102编辑:

所以仍然不去这里。实际上,我已经购买了FRDM-KL25Z评估板(DigiKey售价15美元),并通过将通用CMSIS-DAP软件放在OpenSDA调试器上并按照Keith Wakeham的博客上的内容切割J11进行了修改。我已经在板载目标(KL25Z)上运行了一个简单的程序,因此它不会干扰复位线,并且我可以看到带有OpenOCD的SKEAZN64并对其进行操作,但不幸的是,它也无法对其进行编程。Kinetis Design Studio(KDS)软件不会刷新我的Kinetis,因为它说它已经受到保护并且我需要进行批量擦除,但是OpenOCD(作为KDS的一部分)似乎不知道该怎么做。我在Mac上构建的OpenOCD的git master版本可以理解Kinetis,但不能理解特定的KEA系列,因此我回到了第一点。

回到J-Link ...

@AdamHaun有一个非常好的线索,如果我将J-Link重置类型(rsettype命令)设置为类型'6'(Kinetis),则J-Link应该在重置内核后禁用看门狗。查看WDOG_CS1寄存器(0x40052000),看来确实是这种情况,但仍然没有骰子。擦除操作似乎在PC的0xfffffffe和错误代码-5上脱颖而出,并且仅当我使用SIM_SOPT禁用复位引脚(通过将32位值0x00000008写入0x40048004)时,“解锁运动”命令才有效。不幸的是,如果我这样做,CPU再也无法停止运行,这大概是因为SWD接口无法使用复位线将SWDAP强制进入已知状态。

20150103编辑:

我有闪烁的LED

重复

我有闪烁的LED

TL; DR版本:将USBDM映像放置在FRDM-KL25Z板上(本身就是一个故事),使用ARM Programmer独立应用程序将测试.elf发送到板上。关机后再开机。

长版将在以后发布。现在,我有不到48小时的时间为此KEAZN64板编写和调试软件,完成对它附带的其他软件的修改/测试,并为另一个客户端编写一些文档。我保证我用详细的答案更新这个问题。我只是想分享我的成功。谢谢大家的帮助。我可能必须与mods交流,因为我真的很想特别感谢你们中的几个。


愚蠢的问题,但是您确定使用的是正确的J-Link Lite?它们仅限于一个平台。我自己并没有使用错人,但这是我期望它会失败的方式。
斯科特·塞德曼

鉴于这里的j-link和kinetis标签实际上没有内容(只是另一个问题),您可能应该尝试找到一些制造商的支持论坛或电子邮件,电话支持等。forum.segger.com也许?
Fizz

community.freescale.com/community/kinetis出现在另一个场所,您可能会在这里找到熟悉此事的人。community.freescale.com/thread/337779似乎非常相似,即使不是您确切的问题……
Fizz 2014年

1
@RespawnedFluff我在Kinetis论坛上实际上有一个几乎相同的问题:community.freescale.com/message/466015。e.se的FAR覆盖面更广,我更喜欢这个社区/站点,因此我认为在这里提问也不会受到伤害。
akohlsmith 2014年

1
@RespawnedFluff更新了问题,以包括特定的J-Link版本。它不是特定于OEM的,而是直接声明“支持任何Cortex-M0 / M0 + / M1 / M3 / M4 / M7内核”。
akohlsmith 2014年

Answers:


3

我实际上在您的过程中找不到任何逻辑错误,但是这里有一些建议:

  • 还有一个FTMRH_FERSTAT寄存器(位于4002_0007h)。它应该告诉您出了什么问题...但是仅在奇偶校验(或双重奇偶校验错误)的情况下。我不认为这会记录任何情况,以防万一或擦除错误,但可能值得一试。

  • KEA文档还提到,闪存错误可能会触发中断(“ 18.3.5闪存和EEPROM中断”一节)。我不知道SEGGER擦除时是否会发生这种情况,但这是对PC为什么也进行更改的合理解释,因为您确实看到了FSTAT寄存器中标记的错误。不幸的是,有关中断控制器的KEA文档部分(“ 3.3.2嵌套矢量中断控制器(NVIC)配置”)含糊地指向ARM网站的完整文档。我无法弄清楚是否在闪存启动时(启动时)设置了默认的中断处理程序。

  • 您仅手动完成了扇区级别的擦除,因此请尝试手动(如自行编写相应的寄存器)发出完整的Flash擦除命令。单个命令中执行此操作的唯一方法似乎是手册第18.3.9.10节(第246页)中记录的“不安全的闪存命令”。这将使设备“不安全”,并进行完整的闪存和EEPROM擦除。您可以轮询FSTAT位(CCIF)以查看它应该何时完成,然后再检查错误标志。编辑:在手册中,还有一个“ 18.3.9.7擦除所有块命令”部分。

  • 尝试降低总线时钟频率。根据文档,任何高于0.8 Mhz的工作原理。我之所以建议这样做,是因为飞思卡尔论坛上有一个线程,外部闪存可以正常工作,但不能超过仍在正常记录范围内的某个频率。因此,芯片中的闪存控制器很可能是易碎品,无法在规定的频率范围内运行。

  • 同样,您的芯片也不同。鉴于这些成本多少(约3美元),您有一个糟糕的价格并不是不可想象的。我确实记得有一块嵌入式x86芯片在大多数情况下都可以正常工作,但是在某些保护模式指令上却出现了奇怪的错误。我的问题因使用相同品牌的其他设备而消失了。对于我来说,尚不清楚飞思卡尔是否有(公开声明)这些设备的步进和勘误。

就调试建议而言,这就是我能想到的,其他人在此页面上都没有说过。

20150103编辑:

(在此处删除了我的评论中的内容,并进行了扩展)

似乎并不是所有的Kinetis系列(至少在官方上)都经过了所有闪光灯的测试。您实际上使用的相当新的EA系列似乎仅由飞思卡尔自己的OEM OEM Cyclone MAX闪光灯支持。这是飞思卡尔页面上针对EA系列产品列出的唯一产品。现在,对于像KL0这样较老的Kinetis来说,列表更长了,包括SEGGER。我不知道这仅仅是因为缺乏对EA系列其他闪光灯的测试,还是因为实际上只有Cyclone MAX知道一些编程怪癖。我希望这可能只是飞思卡尔在列出其他闪光器时很慢,但是在查看了J-link手册后 (希望是正确的),也没有经过测试的Kinetis E或EA系列(第249页),只有Kinetis K10至K60设备(以及一些较旧的MAC7)。

值得注意的是Cyclone MAX的PExDrv软件/固件具有日期为2014年3月20日的Service Pack(v10.3),其中“增加了对MKE04Z64,MKE04Z128,MKE06Z64,MKE06Z128,SKEAZ64和SKEAZ128衍生物的支持”。另一个线索是飞思卡尔针对Kinetis自己的开源Bootloader / Flashloader软件尽管在12/2014中进行了更新,但并未列出受支持的任何E或EA [sub]系列设备。因此,我认为E / EA系列和其他Kinetis(如K10)在闪光方面有足够的区别,尽管我不知道到底有什么区别。因此,我认为,目前,除了Cyclone MAX以外,期望EA闪存能够自动与任何其他设备一起工作是不现实的。您也许可以从EA系列文档中最终了解如何在“裸机”级别(直接寄存器命令)执行此操作,但是我同意该文档太过时了;它当然缺少任何分步说明,仅是参考手册。如果飞思卡尔的开源引导加载程序/闪存加载程序支持E / EA系列,

FRDM-KL25Z(Kinetis L系列随附)的实验指向相同的方向,即,您不能将L系列与EA系列互换,也不能使用相同的闪光灯(在这种情况下为OpenSDA)。

而且,如果您像Keith(博客作者)一样“认为程序员的100美元是荒谬的”,那么对于在那个Cyclone上降价900美元以上的观点,您可能会不满意。我不知道飞思卡尔是否故意这样做是为了骗取他们的汽车客户,还是……...对于大多数Kinetis系列的工具都不能在E / EA上使用,这确实很奇怪。

还要注意,显然,OpenSDA的闪烁功能只能在MS Windows下运行

如果您愿意尝试(破解)更多的开发板,那么配备E系列Kinetis的开发板可能是一个更好的主意,例如FRDM-KE02Z(在Digi-Key售价13美元)。还使用OpenSDA,因此可能会被黑客入侵。据我所知,他们不使用EA系列来生产/销售电路板。但是,似乎您不能使用一个OpenSDA处理器/板来编程与其自己板上的Kinetis类型不同的Kinetis类型,即使两个处理器的序列相同(例如L),但编号也不同。不幸的是,OpenSDA中的“开放”仅表示SDA规范是开放的,并不表示它们以开放源代码的形式给出源代码。因此我什至找不到编程E系列闪光灯的源代码。显然,我对此只保留一半的权利。OpenSDA v1不是开源的,而v2是

因此,这是OpenSDAv2的优势。它基本上只是一个CMSIS-DAP / mbed引导加载程序和更新程序。因此它可能不具有与v1相同的功能或支持相同的芯片...而事实证明确实如此,因为flash_features.h没有列出任何MKE(Kinetis E系列),更不用说SKE(EA系列)了。设备。总而言之,飞思卡尔对于EA系列的主张似乎是:购买我们900美元的Cyclone闪光灯,或者从我们发布的任何不完整的开源代码中自行编写自己的好运。

但是事实证明,有一个开源项目至少可以对E系列Kinetis进行编程,即USBDM它的变更日志的相关位是:

V4.1.6.140(2014年4月)

其他Kinetis设备(MKE04,MKE06,MK64F)

  • MKE设备的修复程序(除Mass Erase之后无法编程)

根据该日志条目,E系列肯定显得古怪。目前尚无对EA系列(SKE)的直接支持,但是如果您想破解自己的Flasher,那么该代码库可能是最好的选择。或者也许您可以说服USBDM的作者添加EA系列(SKE)支持。事实证明,作为USBDM的硬件,您可以使用已经购买的FRDM-KL25Z。但是您仍然必须破解USBDM软件以支持SKE芯片。

USBDM主配置文件看起来相当艰巨。在USDBM中,不同的Flasher(代码库)用于不同的MKE系列设备:MKE04和MKE06使用“ FTMRE”,而MKE02使用“ FTMRH”。在简要介绍了这两个代码库之后,您几乎肯定会想要FTRMH代码库而不是FTRME代码库。后者的FTMRH结构与SKEA64器件不同,例如,时钟分频器不是第一个字段,而是第四个字段。FTRME还将总线FIDV设置为0x17 = 24Mhz,这似乎超出了芯片的范围(KEA64手册中的第224页建议最大20Mhz)。FTMRH将其设置为0x0F = 16Mhz(就像您一样),这似乎还可以。

此时,(除非您想购买Cyclone MAX),最好的办法是与Podonoghue联系,使您的芯片与他的代码库一起工作。他似乎很活跃,并且非常乐意为新设备提供帮助(在飞思卡尔论坛上)

同样从该USDBM源代码中,我可以预言,除非SEGGER首先获得自己的固件更新,否则它无法自行正确地刷新SKEA。我为什么这么说?由于USDBM的FTMRH代码库仅被那里的一台设备使用,因此您的SEGGER似乎对这两个设备一无所知(根据其手册)。其他更常见的设备,例如Kinetis L和K系列,则使用基于“ FTFA”代码库的其他USDBM闪光器。如果您看FTFA的代码,则Flash控制器的寄存器结构(也从0x40020000开始)与此不同。第一个字段甚至不是时钟分频器,而是统计寄存器等。对于Freescale来说,制造不兼容设备的“好方法”……无疑是对闪光灯制造商的福音。


1
FERSTAT并未显示您所怀疑的任何有用信息;在整个崩溃中,我尽早尝试过。默认情况下,所有的闪存中断都是禁用的,但是我确实检查了这是否可能是问题的一部分。那里也没有骰子。我确实有两个电路板,它们的作用方式相同,但是多年来我了解到,硅实际上应归咎于的时间很少,这就是为什么我要在这里扯头发。:-)
akohlsmith

我会尝试降低频率;重置后的默认值似乎是针对16.78MHz总线时钟(32kHz * 1024/2),这就是为什么我选择了0x10的闪存时钟分频器(32kHz * 1024/2/16为1.048MHz,这在规格范围内,但也许靠近边缘一点)
akohlsmith,2015年

1
关于取消保护命令(0xb)而不是全部擦除(0x8)的其他建议...它成功了,但是此后我无法停止CPU,而且似乎也无法将任何内容编程到闪存中。
akohlsmith

我非常感谢您为帮助这个互联网陌生人所做的所有努力。我正在努力理解为什么即使使用受支持的编程器(J-Link和CMSIS-DAP)以及飞思卡尔自己的开发环境和工具,也很难使用这种芯片。真是令人震惊
akohlsmith,2015年

感谢您的详细研究和持续的帮助。实际上,这正是我最终要做的:将FRDM-KL25Z与USBDM固件和独立的ARM闪存配合使用。这就是我闪烁的LED测试进入设备的原因。奇怪的是,Segger支持的CPU列表中明确提到了SKEAZN64xxx2,但它不起作用。
akohlsmith

2

您是否尝试过此步骤:使用Segger J-Link解锁和擦除FLASH

据说您必须:

为了使用Segger J-Link重新编程受保护的FLASH扇区,我需要首先解锁并大规模擦除该设备。为此,有J-Link Commander实用程序,该实用程序具有命令行界面以取消保护和擦除设备。仅用于擦除,J-Flash(和Lite)是一个非常有用的工具,尤其是获得“干净”的设备内存时。

我发现有趣的是,如果您希望永久地进行解锁,则必须将其解锁并在下一步中将其擦除:

但似乎我需要先进行解锁,然后再进行擦除以使其永久化。要擦除设备,我可以使用相同的命令行实用程序。但是我需要先指定设备名称,然后再将其删除(例如KL25Z):

EDIT1:添加了错误的数据。

EDIT2:您也许可以读取Flash Security(FSEC)寄存器?你试过了吗?

EDIT3:来自使用Kinetis安全和闪存保护功能,修订1,6/2012

通过调试器/ JTAG进行批量擦除在保护处理器的情况下,调试器和JTAG工具对设备的访问非常有限。只能通过JTAG访问的寄存器是MDM-AP状态和控制寄存器。为了使调试工具能够使部件不安全,可以将MDM-AP控制寄存器的位0设置为请求对处理器进行大规模擦除。为了使用此方法禁用安全性,必须将FSEC [MEEN]设置为10以外的值,以允许批量擦除功能。如果禁用了批量擦除,FSEC [MEEN] = 10,则闪存将忽略批量擦除请求,并且使用此方法无法解除对设备的保护。许多调试器会在尝试建立连接时自动使用MDM-AP状态寄存器的位2来确定设备是否受保护。调试器弹出窗口可用于警告设备已固定,并询问是否需要进行大规模擦除才能取消设备的安全性。一旦完成批量擦除并通过验证,安全性将被禁用。一些调试器可能会自动编程闪存配置字段,以在批量擦除完成后将闪存置于不安全状态,即FSEC = 0xFE。

我还偶然发现了一篇文章,提到尝试读取/写入MDM-AP寄存器时,不同的kinetis系列需要不同的RESET信号操作。

EDIT4:您是否尝试在SWD_DIO上添加强上拉?这是在黑暗中拍摄的镜头,但飞思卡尔推荐它。


感谢您抽出宝贵时间来帮助进行交叉检查和提出建议。FTMRH_FSEC(0x40020001)返回值0xfe,该值与您获得的解锁/不安全一样。如果我在0x0000400c处读取闪存,则还可以看到安全位显示相同的值(FSEC在上电复位时获取值):J-Link> mem8 400 10 00000400 = FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FE FF
akohlsmith

J-Link有一个带有特定Kinetis值(6)的“ rsettype”命令,该值在复位时禁用看门狗定时器。它不会停止处理器,但是我可以使用“ h”命令来完成。我还可以看到,如果不使用rsettype 6,看门狗注册就会报告看门狗已启用,这与文档一致。
akohlsmith

我会尝试上拉,您尝试的两块板上都没有,如果不起作用,那么Jlink是NOK。
iggy 2015年

我尝试了上拉(4.7k,不确定应该有多“强”),但是没有任何区别。
akohlsmith

4k7很好。你已经尽力了。从这一点开始,使用FRDM-KL25Z验证行为,然后将100万张票发送给Jlink家伙。
iggy 2015年

1

您必须先暂停处理器。很明显,您会看到正在运行的处理器的症状。我使用openocd;在刷新设备之前,我使用“重置暂停”命令。“ halt”是“ reset”的子命令,用于在重置后立即停止,同时也有一个独立的halt命令。

因此,寻找“重置暂停”命令,仅仅暂停是不够的,因为您必须进入向量的预初始化状态。


感谢您的评论,但隔离器确实会先停止CPU。在发出这些命令之前,我也尝试过手动停止cpu,而无需进行任何更改。我应该在我的问题中清楚地表明这一点。
akohlsmith 2014年

我没有注意到您是在说初始化向量之前必须暂停。调查一下,但是我很难理解为什么这样做是必要的。谢谢您的提示,对您
有所

1

我还没有看到它的提法,所以我继续推测问题在于该部分具有一个在重置时启用的缓存。这与您用空白支票观察到的“怪异”行为一致。基础Flash已更新,但缓存未更新。要解决此问题,请通过写入MCM_PLACRat 来关闭数据和指令高速缓存,F000_300Ch并同时清除高速缓存。同样的怪异行为也可能使Segger感到困惑。


这是一个很好的建议。复位时,MCM_PLACR读为0x00000850,这有点奇怪(数据高速缓存已禁用,但文档中保留了位6和4)。我试图禁用所有内容(推测,控制器缓存,指令缓存),然后通过写入0x0000bc00清除缓存;它读回0x0000b850,但行为没有变化。
akohlsmith

当您最终解决此问题时,我会非常感兴趣。同时,该芯片肯定不会很快出现在我的任何设计中。对不起,您很痛苦,但感谢您分享有趣的问题。
爱德华

0

由于错误消息与PC值有关,因此听起来CPU不在某个地方。这是一个很大的尝试,但是您是否尝试禁用看门狗定时器?


那是一个很好的建议。在阅读了您的答案后,我花了一些时间来检验这一理论。但是,似乎在运行“ device skeazn64xxx2”时,J-Link已将其考虑在内,并在重置后禁用了看门狗。我通过检查WDOG_CS1寄存器(无论是否在重启后指定设备)来验证这一点。:-(
akohlsmith 2014年

嗯...好吧,我注意到的另一件事是您在进行空白检查时遇到了可纠正的错误。您的J-Link是否禁用闪存ECC?如果不是这样,可能会导致回读验证出现问题,甚至可能触发意外中断。(我对Freescale MCU并不特别熟悉,但我认为这种行为非常普遍。)
Adam Haun 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.