k60的flash奇怪问题

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

k60的flash奇怪问题

1,819 Views
yangzhenshang
Contributor I

之前开发阶段时候已经出现此现象,当时不怎么留意,但是现在是小批量试产了还是暴露该问题了:

偶尔出现读flash错误,执行read()函数一致出不来,哪怕用Jlink仿真时候读取flash的内容(指令d 0x7ff00,0x7ffff),依然提示错误:

error 122: AGDI:memory read failed(0x0007FFE0),不知道为什么,出现这种情况的是偶然的,目前生产24套,有两套出现这个问题,但是通过仿真器把芯片full chip erase,

一切又正常了。

芯片:MK60FX512

环境:常温下;

生产过程中发生(本来是正常的),上电了几次后出现。

Labels (1)
Tags (1)
0 Kudos
14 Replies

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

从你反映的情况看,只有小批量芯片出现这样的问题。麻烦能否告诉故障芯片的mask set信息,最好能将故障芯片的表明信息拍照。

是否mass erase之后,故障芯片就一切正常了?


Have a great day,
Ma Hui

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,515 Views
yangzhenshang
Contributor I

您好,

芯片表面印字符如下:

MK60FX512VLQ15

3N96B

QCTAG1430L

整个芯片erase之后,一切正常。这个现象在早期开发阶段有出现过,当时没多大留意,现在试产出现这个问题,让我很担心,估计随时还会出现这个问题。请分析原因,谢谢。

0 Kudos

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

MK60FX512VLQ15 默认出厂的状态应该是unsecured,我怀疑有些芯片在出厂时没有改成unsecured状态 (如果Flash被完全擦除后,Kinetis保护地址0x40C的值是0xFF,这个值会使芯片处于secured状态, 需要重新编程0x40C为0xFE)。所以在你们试产阶段,应该会出现JTAG 无法编程部分芯片的情况。之后通过JTAG MASS ERASE可以unsecure芯片,使芯片能够被正常编程。

现阶段,你可以标注一下出过问题的板子,看看问题是否还会复现。 我个人认为这些芯片应该没有问题,问题应该不会复现。

有什么情况,你可以联系我们。谢谢。


Have a great day,
Ma Hui

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,515 Views
yangzhenshang
Contributor I

现在有一个芯片重复出现此问题,只能执行一次 write,第二次执行总是失败!!!

0 Kudos

1,515 Views
yangzhenshang
Contributor I

跟是否unsecure无关,因为JTAG 可以 section program ,现在这块芯片彻底写不进去了,但是第一次写入正常,第二次不行,执行write 失败,哪怕更换地址也不行,一旦写入失败,read 也失败。采用 Jlink 读取 flash 内容也提示失败!请帮我分析,谢谢!可提供联系电话吗?

0 Kudos

1,515 Views
yangzhenshang
Contributor I

对比了 flash 控制器相关寄存器内容,和正常执行时是一样的。

0 Kudos

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

我想问下你用的Freescale MQX软件的版本。 你可以拨打我们的咨询电话: 800-990-8188 找我即可。


Have a great day,
Ma Hui

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,515 Views
yangzhenshang
Contributor I

目前情况这样:

1、我分两次写入相邻的两块flash区域(连续地址0x7fe00-0x7ffff),每次写入29字节,第一次写入正常,第二次写入时候提示出错;但是写入字节数更改16字节,两次写入都正常;

2、考虑可能太靠近0x80000地址,我把写入地址更改为0x7f100,两次分别写入相邻的地址,每次写入29字节,第二次依然写入失败,通过JTAG看memory只写入了前5个字节;

3、把两次写入地址间隔开,即第一次写入地址0x7f100,第二次写入地址0x7f300,每次写入29字节,两次写入都正常;

MQX版本是4.1.2,如果更改MQX新版本的话改动太大,一时半会实现不了,请求继续分析,谢谢。

0 Kudos

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

因为MQX Flash操作是调用 Program Phrase Command进行Flash编程操作, 这个命令需要编程的字节数必须是8的整数倍。

所以,当你所要编程的字节数为29时,就会出错。

建议你对Flash进行write操作,使用8的整数倍字节数进行编程。

祝顺利。

Best regards,

Ma Hui

0 Kudos

1,515 Views
yangzhenshang
Contributor I

但是第一次写入正常,并且更换地址后写入也正常。

0 Kudos

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

我查看了MQX相关驱动,驱动确实会把不足8个字节的数据补成8个字节。

你能把你的Flash写入测试相关代码发给我们看一下吗?


Have a great day,
Ma Hui

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,515 Views
yangzhenshang
Contributor I

uint8 savecfg(BOARDCFG *cfg,uint16 dev)

{

  uint16 ret;

 

  flash_file = fopen(FLASH_NAME, NULL);

  if (flash_file == NULL)

  {

    printf("\nUnable to open file %s", FLASH_NAME);

    _task_block();   

  }  

 

  ioctl(flash_file, FLASH_IOCTL_ENABLE_SECTOR_CACHE, NULL);

 

  if(dev==DEV0)

  fseek(flash_file,-(sizeof(BOARDCFG)+sizeof(BOARDCFG)+FLASHOFSET1),IO_SEEK_END);//增加FLASHOFSET1 、FLASHOFSET2后正常

  else

  fseek(flash_file,-(sizeof(BOARDCFG)+FLASHOFSET2),IO_SEEK_END); //增加FLASHOFSET1 、FLASHOFSET2后正常

  

  if (write(flash_file, cfg, sizeof(BOARDCFG)) != sizeof(BOARDCFG))

  {

  if (write(flash_file, cfg, sizeof(BOARDCFG)) != sizeof(BOARDCFG))  

  {

  printf("Error writing to the cfg file\n");

  ret = VDR_RET_FAIL;

  }

  }

  else

  {

    ret = VDR_RET_OK;

  }

  fclose(flash_file);

  return ret;

}

0 Kudos

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

我用Freescale MQX V4.2版本软件提供的Flashx代码在TWR-K70F120M 板子上测试了一下,多次写入非8整数倍数量的数据,是没有出现错误的。

写入Flash地址是0x3ffe0.

我建议下载最新版本的MQX软件,比较一下你所用版本Flashx驱动与最新版本驱动有什么区别。


Have a great day,
Ma Hui

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos

1,515 Views
Hui_Ma
NXP TechSupport
NXP TechSupport

你好,

我会让MQX相关同事帮忙分析一下。 另外,我会在TWR-K60D100M 板子上测试使用非MQX 操作系统驱动,看是否会复现这个问题。


Have a great day,
Ma Hui

-----------------------------------------------------------------------------------------------------------------------
Note: If this post answers your question, please click the Correct Answer button. Thank you!
-----------------------------------------------------------------------------------------------------------------------

0 Kudos