搜索
bottom↓
回复: 49

[求助]PE生成FLASH操作函数擦除不了FLASH(已解决)

[复制链接]

出0入0汤圆

发表于 2014-10-16 16:48:08 | 显示全部楼层 |阅读模式
本帖最后由 FSL_TICS_Robin 于 2014-11-27 11:01 编辑

前几天刚用KL25官方板子实现IAP,也是用PE生成的FLASH函数,FLASH所有扇区都能擦除。现在把程序移植到KL16的工程板子上,用JLINK调试。我的FLASH分成三部分,1部分正常程序,2部分IAP程序,3部分做EEPROM,1和2由链接文件分配,3由FLASH函数直接操作,结果FLASH擦除函数只能擦除3,不能擦除1和2。搞了一天了,2个工程的配置都一样啊。是KL25和KL16的区别么?

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2014-10-16 18:58:25 来自手机 | 显示全部楼层
这个要移植吗?直接用PE新建一个KL16的工程不就好啦

出100入101汤圆

发表于 2014-10-16 19:39:43 | 显示全部楼层
没看懂。IAP程序能擦除IAP程序所在扇区么?IAP程序拷贝到ram中运行么?

出0入0汤圆

 楼主| 发表于 2014-10-16 20:13:25 | 显示全部楼层
地主阿山 发表于 2014-10-16 18:58
这个要移植吗?直接用PE新建一个KL16的工程不就好啦

是啊,没什么修改的东西啊,就是不行啊

出0入0汤圆

 楼主| 发表于 2014-10-16 20:15:27 | 显示全部楼层
fengyunyu 发表于 2014-10-16 19:39
没看懂。IAP程序能擦除IAP程序所在扇区么?IAP程序拷贝到ram中运行么?

只要擦除的不是当前正在执行的那几条程序,有何不可?况且真正执行擦除的那几行代码就是在RAM里的。

出0入0汤圆

发表于 2014-10-17 08:10:04 | 显示全部楼层
同意二楼,最好pe新建工程。

出0入0汤圆

 楼主| 发表于 2014-10-17 09:45:43 | 显示全部楼层
发现个很奇葩的现象,我把IAP程序区分配为0x4c00-0x5c00(实际程序生成的代码大概分配到0x5200多,也就是0x5400-0x5c00都是未使用的),在主程序里做了2件事(1,将2个数写到0x5400。2,擦除0x5000-0x5800)执行的代码全部在0x4c00以内,运行结果是0x5000-0x5400的内容擦不掉(这部分是JLINK烧写的),0x5400-0x5800的内容就擦掉了(这部分是程序操作的),由此得出的猜想:是不是JLINK对部分代码存储空间做了保护?

出0入0汤圆

 楼主| 发表于 2014-10-17 09:46:22 | 显示全部楼层
jiang887786 发表于 2014-10-17 08:10
同意二楼,最好pe新建工程。

我这个就是新建的

出0入0汤圆

 楼主| 发表于 2014-10-17 09:53:11 | 显示全部楼层
为了进一步验证猜想,我把主程序的写操作定为写到0x5300,IAP的代码到0x5230为止,0x5000-0x5400是一个扇区,运行结果是写操作也无法实现。

出0入0汤圆

 楼主| 发表于 2014-10-17 10:57:17 | 显示全部楼层
来个版主冒个泡好么……

出0入0汤圆

发表于 2014-10-17 11:00:25 | 显示全部楼层
是不是你存储空间太大了?  改小一点试试看  

出0入0汤圆

 楼主| 发表于 2014-10-17 11:01:58 | 显示全部楼层
luckner 发表于 2014-10-17 11:00
是不是你存储空间太大了?  改小一点试试看

太大?我128K的芯片,工程是32K的

出0入0汤圆

发表于 2014-10-17 11:04:44 | 显示全部楼层
lbblsws 发表于 2014-10-17 11:01
太大?我128K的芯片,工程是32K的

额  试试看吧 有次我分配的存储空间大了就有问题

出0入0汤圆

 楼主| 发表于 2014-10-17 11:05:56 | 显示全部楼层
luckner 发表于 2014-10-17 11:04
额  试试看吧 有次我分配的存储空间大了就有问题

试什么啊?

出0入0汤圆

发表于 2014-10-17 11:08:02 | 显示全部楼层
楼主你好。请问你使用的KL16的芯片全称是什么?另外,你使用KL25,用PE生成的flash函数都是正常的是吗?只是使用KL16的时候擦除不了?请给出你说的3块地址范围。

出0入0汤圆

发表于 2014-10-17 11:09:00 | 显示全部楼层

扇区大小

出0入0汤圆

 楼主| 发表于 2014-10-17 11:12:00 | 显示全部楼层
KL16Z128VFM4;KL25全部能正常擦写(openSDA调的);在工程板子上是用JLINK调的,擦除不了已写程序的空间(详细见7,9楼)3块地址不是问题所在,我更改了3次的3块地址,3都是能顺利擦写的。

出0入0汤圆

 楼主| 发表于 2014-10-17 11:15:13 | 显示全部楼层

FLASH的一个扇区大小是固定的,我怎么调?目前我实际只用了20K不到。工程建立的最大许可就是32K,实际量产要用的也是32K,你要调什么?

出0入0汤圆

 楼主| 发表于 2014-10-17 11:19:46 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 11:08
楼主你好。请问你使用的KL16的芯片全称是什么?另外,你使用KL25,用PE生成的flash函数都是正常的是吗?只 ...

KL16Z128VFM4;KL25全部能正常擦写(openSDA调的);在工程板子上是用JLINK调的,擦除不了已写程序的空间(详细见7,9楼)3块地址不是问题所在,我更改了3次的3块地址,3都是能顺利擦写的。

出0入0汤圆

发表于 2014-10-17 11:20:51 | 显示全部楼层
lbblsws 发表于 2014-10-17 11:12
KL16Z128VFM4;KL25全部能正常擦写(openSDA调的);在工程板子上是用JLINK调的,擦除不了已写程序的空间( ...

把你代码上传,我这边用KL26的试试,这个是兼容KL16的芯片的。

出0入0汤圆

发表于 2014-10-17 11:21:50 | 显示全部楼层
lbblsws 发表于 2014-10-17 11:19
KL16Z128VFM4;KL25全部能正常擦写(openSDA调的);在工程板子上是用JLINK调的,擦除不了已写程序的空间 ...

你也可以用opensda接过去调试看看,是不是JLINK导致的。
还有,你现在用的是什么IDE?

出0入0汤圆

 楼主| 发表于 2014-10-17 11:23:49 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 11:21
你也可以用opensda接过去调试看看,是不是JLINK导致的。
还有,你现在用的是什么IDE? ...

我用的KDS,openSDA怎么接过去啊?

出0入0汤圆

 楼主| 发表于 2014-10-17 11:24:45 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 11:20
把你代码上传,我这边用KL26的试试,这个是兼容KL16的芯片的。

我的电脑加密的,工程给你没有用,我只能贴代码

出0入0汤圆

 楼主| 发表于 2014-10-17 11:29:43 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 11:20
把你代码上传,我这边用KL26的试试,这个是兼容KL16的芯片的。

int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
  /* Write your local variable definition here */
        LDD_TError Error;
        uint8 xxx[2] ={0x00,0x00};
  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
  /* For example: for(;;) { } */


        InitEeprom();

        Error = Flash_Write(Flash_DeviceData, xxx, 0x5300, 2);

        do{
                Flash_Main(Flash_DeviceData);
        }
        while(Flash_GetOperationStatus(Flash_DeviceData) != LDD_FLASH_IDLE);
        Error = Flash_Erase(Flash_DeviceData, 0x5000, 0x400);
        do{
                Flash_Main(Flash_DeviceData);
        }
        while(Flash_GetOperationStatus(Flash_DeviceData) != LDD_FLASH_IDLE);

7楼9楼所说都是在这段程序里观察到的,FLASH函数都是PE生成的,现在存储在普通程序段

出0入0汤圆

发表于 2014-10-17 11:46:03 | 显示全部楼层
直接用PE新建一个KL16的工程

出0入0汤圆

 楼主| 发表于 2014-10-17 12:54:38 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 11:20
把你代码上传,我这边用KL26的试试,这个是兼容KL16的芯片的。

我重新新建了一个16的工程,代码如下,部分省略:
/* User includes (#include below this line is not maintained by Processor Expert) */
__attribute__((section (".iapsymbols")))void IAP_Main(void);

void IAP_Main(void)
{
        uint16 i;
        for (i=0; i<10000; i++);
}

/*lint -save  -e970 Disable MISRA rule (6.3) checking. */
int main(void)
/*lint -restore Enable MISRA rule (6.3) checking. */
{
  /* Write your local variable definition here */
        uint8 xxx[2] ={0x00,0x00};
  /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
  PE_low_level_init();
  /*** End of Processor Expert internal initialization.                    ***/

  /* Write your code here */
  /* For example: for(;;) { } */

        Flash_Write(Flash_DeviceData, xxx, 0x5ff0, 2);
          do{
                  Flash_Main(Flash_DeviceData);
          }
          while(Flash_GetOperationStatus(Flash_DeviceData) != LDD_FLASH_IDLE);
          Flash_Erase(Flash_DeviceData, 0x5c00, 0x800);
          do{
                  Flash_Main(Flash_DeviceData);
          }
          while(Flash_GetOperationStatus(Flash_DeviceData) != LDD_FLASH_IDLE);

          for (;;)
          {

          }

再附上调试界面截图

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-10-17 13:04:41 | 显示全部楼层
lbblsws 发表于 2014-10-17 12:54
我重新新建了一个16的工程,代码如下,部分省略:
/* User includes (#include below this line is not m ...

好的,我试下,待会给你回复!

出0入0汤圆

 楼主| 发表于 2014-10-17 14:08:28 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 13:04
好的,我试下,待会给你回复!

完全一样的代码,我在CW上也试了一下,在KL25上也试了一下,基本排除编译器的问题,只有两种可能,一个是16和25的区别,另一个就是调试器的区别,我板载的那个opensda如果外接出来是不是要把PCB上线割了引出来?然后板子就没用了吧?

出0入0汤圆

发表于 2014-10-17 14:37:11 | 显示全部楼层
lbblsws 发表于 2014-10-17 14:08
完全一样的代码,我在CW上也试了一下,在KL25上也试了一下,基本排除编译器的问题,只有两种可能,一个是 ...

那不需要, KL25上不是有个J11吗?
只要跳线就可以了。

主要就是跳掉SWD_CLK,其余直接接到你KL16板子就行。
不用了,可以找个跳帽,把J11接上就行。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-10-17 14:47:21 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 14:37
那不需要, KL25上不是有个J11吗?
只要跳线就可以了。

你哪里实验了能擦写么?

出0入0汤圆

发表于 2014-10-17 15:49:50 | 显示全部楼层
lbblsws 发表于 2014-10-17 14:47
你哪里实验了能擦写么?

你好,目前我是这样的。

在0X00006000开始的256个字节,定义了常量。
然后,对0x5ff0写入11个字节的数据,成功。

擦除从0x5c00开始的2个sector,成功。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-10-17 15:53:24 | 显示全部楼层
我把我的代码给你, 你可以跑下看看结果是否和我一样。
我建立的工程就是KL16 128M的,
直接编译,下载,不要重新生成代码,否则会刷掉一些代码。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-10-17 16:21:42 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 15:53
我把我的代码给你, 你可以跑下看看结果是否和我一样。
我建立的工程就是KL16 128M的,
直接编译,下载,不 ...

你给的工程里没有JLINK的调试文件,不知道怎么加啊……经验贴里只介绍如何加OPENSDA,我这里OPENSDA又调不了……还有NMI的功能要禁止掉,否则我PCB板上的CPU不能工作,修改的话又要生成代码……

出0入0汤圆

发表于 2014-10-17 16:29:49 | 显示全部楼层
lbblsws 发表于 2014-10-17 16:21
你给的工程里没有JLINK的调试文件,不知道怎么加啊……经验贴里只介绍如何加OPENSDA,我这里OPENSDA又调 ...

我重配置下再给你啊。

出0入0汤圆

发表于 2014-10-17 16:48:54 | 显示全部楼层
lbblsws 发表于 2014-10-17 16:21
你给的工程里没有JLINK的调试文件,不知道怎么加啊……经验贴里只介绍如何加OPENSDA,我这里OPENSDA又调 ...


去掉了NMI引脚功能,并且配置了JLINK, 我自己把OPENSDA模拟成JLINK了,仿真之后结果也是正确的。
你测试下试试哦,
然后把结果贴出来我看看。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-10-17 16:50:23 | 显示全部楼层
lbblsws 发表于 2014-10-17 16:21
你给的工程里没有JLINK的调试文件,不知道怎么加啊……经验贴里只介绍如何加OPENSDA,我这里OPENSDA又调 ...


再加句,添加JLINK和那个opensda就是一样的。
只不过最后选择端口的时候,你选择JLINK,然后SWD就可以了。
我写opensda那个就是为了给个参考,大家自己发挥其他的,方法一样。

出100入101汤圆

发表于 2014-10-17 17:26:48 | 显示全部楼层
可能是一些小地方没有注意到!版主很敬业!

出0入0汤圆

 楼主| 发表于 2014-10-18 08:49:36 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 16:50
再加句,添加JLINK和那个opensda就是一样的。
只不过最后选择端口的时候,你选择JLINK,然后SWD就可以了 ...

我点击编译的时候弹出这个什么意思?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-10-18 08:57:43 | 显示全部楼层
本帖最后由 lbblsws 于 2014-10-18 09:47 编辑
FSL_TICS_ZJJ 发表于 2014-10-17 16:50
再加句,添加JLINK和那个opensda就是一样的。
只不过最后选择端口的时候,你选择JLINK,然后SWD就可以了 ...


忽略此楼……

出0入0汤圆

 楼主| 发表于 2014-10-18 09:43:25 | 显示全部楼层
结果出来,还是不行。见截图,擦除不了JLINK烧写的那部分。你那边试验用的是实际的JLINK仿真器还是用openSDA模拟的?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-10-20 16:53:38 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-17 16:48
去掉了NMI引脚功能,并且配置了JLINK, 我自己把OPENSDA模拟成JLINK了,仿真之后结果也是正确的。
你测 ...

版主……截图看到了么?

出0入0汤圆

发表于 2014-10-20 17:30:36 | 显示全部楼层
lbblsws 发表于 2014-10-18 09:43
结果出来,还是不行。见截图,擦除不了JLINK烧写的那部分。你那边试验用的是实际的JLINK仿真器还是用openSD ...

楼主,不好意思,最近不在阿莫论坛,刚看到你的问题。
我是用opensda模拟的JLINK, 你用我代码,用实际的JLINK是擦除不了吗?
这样,我明天把我板子焊上SWD接口,然后用真的JLINK 烧下。

出0入0汤圆

发表于 2014-10-20 17:32:16 | 显示全部楼层
lbblsws 发表于 2014-10-18 09:43
结果出来,还是不行。见截图,擦除不了JLINK烧写的那部分。你那边试验用的是实际的JLINK仿真器还是用openSD ...

另外你那边寄存器窗口,跑完刷新下看看。

出0入0汤圆

 楼主| 发表于 2014-10-21 09:43:01 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-20 17:30
楼主,不好意思,最近不在阿莫论坛,刚看到你的问题。
我是用opensda模拟的JLINK, 你用我代码,用实际的 ...

是啊,擦不了

出0入0汤圆

 楼主| 发表于 2014-10-21 09:52:00 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-20 17:32
另外你那边寄存器窗口,跑完刷新下看看。

是这个寄存器么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-10-21 10:01:27 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-20 17:32
另外你那边寄存器窗口,跑完刷新下看看。

执行完擦除函数后的寄存器

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2014-10-27 10:20:21 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-20 17:32
另外你那边寄存器窗口,跑完刷新下看看。

这是在FRDM-KL25Z板子上跑的程序,分别用openSDA和Jlink固件调试的,完全一样的硬件和程序,得到2个结果……求解。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2014-10-27 17:18:49 | 显示全部楼层
本帖最后由 FSL_TICS_ZJJ 于 2014-10-27 17:42 编辑
lbblsws 发表于 2014-10-27 10:20
这是在FRDM-KL25Z板子上跑的程序,分别用openSDA和Jlink固件调试的,完全一样的硬件和程序,得到2个结果 ...


我试了下,的确,我试了我的JLINK也不行,擦不掉,但是用opensda就能擦掉。
应该和仿真器有关系。

出0入0汤圆

 楼主| 发表于 2014-10-27 20:37:55 | 显示全部楼层
FSL_TICS_ZJJ 发表于 2014-10-27 17:18
我试了下,的确,我试了我的JLINK也不行,擦不掉,但是用opensda就能擦掉。
应该和仿真器有关系。 ...

JLINK仿真不行,脱机运行可以,验证过了。

出0入0汤圆

发表于 2014-10-28 08:58:35 | 显示全部楼层
lbblsws 发表于 2014-10-27 20:37
JLINK仿真不行,脱机运行可以,验证过了。

嗯,应该是Jlink仿真器禁止了仿真擦除有数据区域。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 09:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表