Michael_STM 发表于 2015-9-17 09:32:36

【求助】关于KL25的FTFA问题

本帖最后由 Michael_STM 于 2015-9-17 13:43 编辑

最近需要用到将一个大数组存放到Flash中去,想用KL25的FTFA功能实现。
我用的是官方提供的C90TFS_FTFX的库函数,在KL25的FLASH中跑程序,现在遇到如下问题:
1. 调用用FlashEraseSector的时候程序运行到pFlashCommandSequence(pSSDConfig)就死了,据我所知,FlashCommandSequence函数被搬移到了ram中,所以应该是执行的时候出错了,如果在FlashCommandSequence的函数入口处加一个延时,可以跑起来,不知道是啥原因?
2. 在FlashProgram函数中第91行temp = WORD2BYTE(pSSDConfig->PFlashBlockBase);然后用dest -= temp;将dest的值放入FTFL_FCCOB123中,如果BlockBase的值不为0,是否会出问题?

附件是我的工程,在FRDM-KL25Z的板子上可以跑。

Henjay724 发表于 2015-9-17 13:19:14

FSL_TICS_ZJJ 发表于 2015-9-17 15:59:09

楼主你好!
你说代码死了,会出现怎样的问题?进hardfault还是怎样?
另外,你操作flash的时候,是否关闭了芯片中断?

Michael_STM 发表于 2015-9-18 10:26:35

FSL_TICS_ZJJ 发表于 2015-9-17 15:59
楼主你好!
你说代码死了,会出现怎样的问题?进hardfault还是怎样?
另外,你操作flash的时候,是否关闭了 ...

果然是中断的问题,在commandsequence执行函数中加入开关中断就行了。
还有一个问题,在初始化flashSSDConfig这个全局变量时如果我使用的PFLASH_BLOCK_BASE不是0x00000000,这个时候在FlashEraseSector和FlashProgram的时候就会出错,原因是在FlashEraseSector.c和FlashProgram.c中最后放入FTFL_FCCOB1,2,3的地址都是相对于PFLASH_BLOCK_BASE的相对地址,而不是绝对地址,我把它改成绝对地址以后就可以了,这个请版主解释一下。

FSL_TICS_ZJJ 发表于 2015-9-18 12:58:26

Michael_STM 发表于 2015-9-18 10:26
果然是中断的问题,在commandsequence执行函数中加入开关中断就行了。
还有一个问题,在初始化flashSSDCo ...

1,的确,目前遇到很多网友关于flash遇到的问题,通常就是两个原因导致,1)flash命令没放RAM;2)没关闭中断 , 后者占多数。
2,这个楼主可能没有仔细去读这个驱动的文档, 这里说明下:
PFlashBlockBaseuint32_t The base address of P-Flash memory
它是芯片Pflash的基地址,而对于KL25来讲,只有一个block,并且这个基地址一定是0,所以,你不能随便修改基地址。
这样要严格按照FSL_eNVM_FTFx_UM.pdf的文档操作。

Michael_STM 发表于 2015-9-18 14:32:22

FSL_TICS_ZJJ 发表于 2015-9-18 12:58
1,的确,目前遇到很多网友关于flash遇到的问题,通常就是两个原因导致,1)flash命令没放RAM;2)没关闭 ...

感谢版主的回复。
我重新看了一下FSL_eNVM_FTFx_UM这个文档,确实有说明PFlashBlockBase是P-Flash基地址,PFlashBlockSize是P-Flash的大小,如果用C90TFS下的驱动文件就必须这么设置。
实际上FTFL_FCCOB1,2,3中还是对应的是Flash的绝对地址。

FSL_TICS_ZJJ 发表于 2015-9-21 10:02:52

Michael_STM 发表于 2015-9-18 14:32
感谢版主的回复。
我重新看了一下FSL_eNVM_FTFx_UM这个文档,确实有说明PFlashBlockBase是P-Flash基地址 ...

对的。
驱动一定要严格按照要求去做,毕竟打包好的代码,不如自己直接控制寄存器命令那么灵活。
页: [1]
查看完整版本: 【求助】关于KL25的FTFA问题