|
我在几个项目中一直使用恩智浦FRDM-K64F板:价格合理,有USB,以太网,微型SD卡插座、用于蓝牙经典的接口和Nordic半导体nRF24L01 + 2.4 GHz收发器。
但是我有好几次遇到了这样一个问题,在调试过程中,同时连接并且由主机供电时,该板工作正常,但如果是电池供电或者没有连接调试器,该板没有启动。我发现微控制器上的EzPort会导致启动问题。 EzPort是存在于一些NXP / Freescale Kinetis(例如K64F)、ColdFire +和ColdFire V2器件上的特殊串行接口。通过该端口,我可以用SPI兼容接口对器件编程:一种用法是使用该接口而不是正常的调试接口来编程微控制器,比如从另一个微控制器(见这个链接)。我没有为我的项目使用EzPort,但我发现,如果不正确处理,此功能可能会导致问题。 问题是,如果EzPort芯片选择(EZP_CS)在微控制器复位期间为低电平,它会进入特殊EzPort模式。问题是,EZP_CS线上的上拉可能由于线上的电容不能被足够快地拉起:
黄色信号是复位线,紫色信号是EZP_CS:它不能足够快地上升,因此微控制器在上电期间将进入EzPort特殊模式。 禁用EzPort 和其他功能一样:如果没有使用它,那么禁用它! 所以解决方案是禁用EzPort功能。 该设置是FOPT(闪存选项寄存器)的一部分。
在Processor Expert项目中,CPU组件属性中有一项该功能的设置(EzPort operation at boot)):
该操作将配置NV_FOPT寄存器: - #define CPU_FLASH_CONFIG_FIELD \
- /* NV_BACKKEY3: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY2: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY1: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY0: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY7: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY6: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY5: KEY=0xFF */ \
- 0xFFU, \
- /* NV_BACKKEY4: KEY=0xFF */ \
- 0xFFU, \
- /* NV_FPROT3: PROT=0xFF */ \
- 0xFFU, \
- /* NV_FPROT2: PROT=0xFF */ \
- 0xFFU, \
- /* NV_FPROT1: PROT=0xFF */ \
- 0xFFU, \
- /* NV_FPROT0: PROT=0xFF */ \
- 0xFFU, \
- /* NV_FSEC: KEYEN=1,MEEN=3,FSLACC=3,SEC=2 */ \
- 0x7EU, \
- /* NV_FOPT: ??=1,??=1,??=1,??=1,??=1,??=1,EZPORT_DIS=0,LPBOOT=1 */ \
- 0xFDU, \
- /* NV_FEPROT: EPROT=0xFF */ \
- 0xFFU, \
- /* NV_FDPROT: DPROT=0xFF */ \
- 0xFFU
-
- __attribute__ ((section (".cfmconfig"))) const uint8_t _cfm[0x10] = {CPU_FLASH_CONFIG_FIELD};
复制代码如果使用的是Kinetis SDK,请查找类似以下的内容(通常在startup* .S中): - /* Flash Configuration */
- .section .FlashConfig, "a"
- .long 0xFFFFFFFF
- .long 0xFFFFFFFF
- .long 0xFFFFFFFF
- .long 0xFFFFFD7E
复制代码总结 通常的项目已启用EzPort。 这可能会导致微控制器的上电顺序问题:如果复位期间EzPort芯片选择引脚为低电平,则微处理器将进入EzPort模式,这可能不是预期的。 解决方法是禁止将闪存配置寄存器中的EZPORT_DIS位置1。
参考连接: ■ 基于KwikStik的EzPort编程器:http://cache.freescale.com/files ... e/AN4406.pdf?fpsp=1
|