楼主: yangganglone

[其他] 版主,麻烦进来帮我看下flash为什么写入不成功

[复制链接]

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24879
最后登录
2025-7-20
发表于 2017-8-16 15:28:35 | 显示全部楼层
yangganglone 发表于 2017-8-16 11:51
我就是采用  4L 附件的KEA128_Demos文件夹的flashdemo; 但是我实际测试的时候发现数据只能写入2个long ...

debug看下,你正真准备写的数据在代码中送的时候是否正确?
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

64

帖子

0

注册会员

Rank: 2

积分
189
最后登录
2019-5-21
 楼主| 发表于 2017-8-16 18:51:28 | 显示全部楼层
小恩GG 发表于 2017-8-16 15:28
debug看下,你正真准备写的数据在代码中送的时候是否正确?


  1. /******************************************************************************
  2. *
  3. * Freescale Semiconductor Inc.
  4. * (c) Copyright 2013 Freescale Semiconductor, Inc.
  5. * ALL RIGHTS RESERVED.
  6. *
  7. ***************************************************************************
  8. *
  9. * THIS SOFTWARE IS PROVIDED BY FREESCALE "AS IS" AND ANY EXPRESSED OR
  10. * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  11. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  12. * IN NO EVENT SHALL FREESCALE OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
  13. * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  14. * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  15. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  16. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  17. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
  18. * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  19. * THE POSSIBILITY OF SUCH DAMAGE.
  20. *
  21. ***************************************************************************//*!
  22. *
  23. * @file Flash_demo.c
  24. *
  25. * @author Freescale
  26. *
  27. * @version 0.0.1
  28. *
  29. * @date Jun. 25, 2013
  30. *
  31. * @brief providing framework of demo cases for MCU.
  32. *
  33. *******************************************************************************/

  34. #include "common.h"
  35. #include "rtc.h"
  36. #include "Flash.h"
  37. #include "sysinit.h"
  38. /******************************************************************************
  39. * Global variables
  40. ******************************************************************************/

  41. /******************************************************************************
  42. * Constants and macros
  43. ******************************************************************************/
  44. #define VERIFIED_SECTOR                                32
  45. /******************************************************************************
  46. * Local types
  47. ******************************************************************************/

  48. /******************************************************************************
  49. * Local function prototypes
  50. ******************************************************************************/

  51. /******************************************************************************
  52. * Local variables
  53. ******************************************************************************/
  54. uint8_t  u8DataBuff[256];
  55. /******************************************************************************
  56. * Local functions
  57. ******************************************************************************/
  58. int main (void);
  59. void RTC_Task(void);
  60. /******************************************************************************
  61. * Global functions
  62. ******************************************************************************/


  63. /********************************************************************/
  64. int main (void)
  65. {
  66.         char ch;  
  67.     uint32_t i;

  68.                 /* Perform processor initialization */
  69.           sysinit();
  70.           printf("\r\nRunning the Flash_demo project.\r\n");
  71.     LED0_Init();  
  72.     LED2_Init();
  73.     FLASH_Init(BUS_CLK_HZ);
  74.    
  75.     /* Erase 99th sector */
  76.     FLASH_EraseSector(VERIFIED_SECTOR*FLASH_SECTOR_SIZE);
  77.    
  78.     for(i=0;i<256;i++)
  79.     {
  80.         u8DataBuff[i] = (uint8_t)i;
  81.     }
  82.    
  83.     /* write data to erased sector */
  84.     FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE,&u8DataBuff[0],256 );
  85.     FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE+256,&u8DataBuff[0],256 );
  86.     for( i=0;i<512/16;i++ )
  87.     {
  88.         for(ch =0;ch<16;ch++)
  89.         {
  90.             printf("0x%x,",*((uint8_t *)(i*16+ch+VERIFIED_SECTOR*FLASH_SECTOR_SIZE)));
  91.         }
  92.         printf("\r\n\r\n");
  93.     }
  94.     while(1)
  95.                 {
  96.                         ch = in_char();
  97.                         out_char(ch);
  98.             
  99.                 }
  100. }

  101. /*****************************************************************************//*!
  102. +FUNCTION----------------------------------------------------------------
  103. * @function name: RTC_Task
  104. *
  105. * @brief callback routine of RTC driver which does what you want to do at
  106. *        every RTC period.
  107. *        
  108. * @param  none
  109. *
  110. * @return none
  111. *
  112. * @ Pass/ Fail criteria: none
  113. *****************************************************************************/

  114. void RTC_Task(void)
  115. {
  116.     /* toggle LED1 */
  117.     LED0_Toggle();
  118. }
  119. /********************************************************************/
复制代码
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

64

帖子

0

注册会员

Rank: 2

积分
189
最后登录
2019-5-21
 楼主| 发表于 2017-8-16 18:52:40 | 显示全部楼层
      楼上的代码就是我的测试代码,为什么要分256字节 写呢?
还有我仿真的时候在memory窗口只看到了2longword 数据有写入,但是写的数据也是错的!
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24879
最后登录
2025-7-20
发表于 2017-8-17 09:22:34 | 显示全部楼层
yangganglone 发表于 2017-8-16 18:52
楼上的代码就是我的测试代码,为什么要分256字节 写呢?
还有我仿真的时候在memory窗口只看到了2long ...

92.    FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE,&u8DataBuff[0],256 );

93.    FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE+256,&u8DataBuff[0],256 );
这两行代码,在93处打断点,然后检查92写入是否正确,前提要保证DataBuff里面的数据是你要写的数据。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

64

帖子

0

注册会员

Rank: 2

积分
189
最后登录
2019-5-21
 楼主| 发表于 2017-8-18 14:35:43 | 显示全部楼层
小恩GG 发表于 2017-8-17 09:22
92.    FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE,&u8DataBuff[0],256 );

93.    FLASH_Progra ...

我稍后把我codewarrior 仿真截图给你看!
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

64

帖子

0

注册会员

Rank: 2

积分
189
最后登录
2019-5-21
 楼主| 发表于 2017-8-19 14:15:17 | 显示全部楼层
小恩GG 发表于 2017-8-17 09:22
92.    FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE,&u8DataBuff[0],256 );

93.    FLASH_Progra ...

版主,我想问一下,cw软件怎么生成s19文件呢,还有hex文件的格式的第一行不对啊!
第一行应该是:020000040004F6   
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

64

帖子

0

注册会员

Rank: 2

积分
189
最后登录
2019-5-21
 楼主| 发表于 2017-8-19 14:24:27 | 显示全部楼层
小恩GG 发表于 2017-8-17 09:22
92.    FLASH_Program( VERIFIED_SECTOR*FLASH_SECTOR_SIZE,&u8DataBuff[0],256 );

93.    FLASH_Progra ...

我在BOOTLOADER 里面写flash的时候 有以下几点疑问:
1、app的flash的中断向量也要写flash,还是直接改__init_hardware函数(kinetis_sysinit.c文件)的__vector_table地址,即在.ld文件设置中断地址
2、在boot擦写flash的时候 是可以全部擦除再分页去写、还是每1页擦除再写入
3、实现应用程序跳转到boot 调用哪个函数

盼版主回复。谢谢!
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24879
最后登录
2025-7-20
发表于 2017-8-22 10:49:55 | 显示全部楼层
yangganglone 发表于 2017-8-19 14:15
版主,我想问一下,cw软件怎么生成s19文件呢,还有hex文件的格式的第一行不对啊!
第一行应该是:0200000 ...

Project->properties.
然后这样配置:
1. 勾选生成image
25.jpg
点击右下角apply

2. 如下图,选择srec文件
26.jpg
点击OK。

3. 编译工程
生成的.hex就是srec文件,你把后缀给改成.srec,你看内容也是S开头的了。
27.jpg
回复 支持 反对

使用道具 举报

该用户从未签到

712

主题

6371

帖子

0

超级版主

Rank: 8Rank: 8

积分
24879
最后登录
2025-7-20
发表于 2017-8-22 10:54:16 | 显示全部楼层
yangganglone 发表于 2017-8-19 14:24
我在BOOTLOADER 里面写flash的时候 有以下几点疑问:
1、app的flash的中断向量也要写flash,还是直接改__ ...

1、app的flash的中断向量也要写flash,还是直接改__init_hardware函数(kinetis_sysinit.c文件)的__vector_table地址,即在.ld文件设置中断地址
答:你用的是什么IDE呢?
一般在链接文件里面修改,比如IAR, ld, MDK, sct,CW也是ld。
直接修改代码其实地址,已经中断向量地址,都偏移到BOOTLOADER规定的范围。
2、在boot擦写flash的时候 是可以全部擦除再分页去写、还是每1页擦除再写入
答: flash最小擦除单位是sector,如果要写的内容不足一个sector, 可以直接擦sector就可以了。
如果要写的比sector大的多,但是比block小,你可以擦除block。
不过,KEA128只有一个block,而且你还要放bootloader,所以你肯定是以sector去擦除了。
  
3、实现应用程序跳转到boot 调用哪个函数
答:一般是Bootloader里面的jump to 函数,你在主程序中就可以跟到的。
不知道你现在看的bootloader是哪个,我可以看下,然后告诉你具体的函数名称。
回复 支持 反对

使用道具 举报

该用户从未签到

13

主题

64

帖子

0

注册会员

Rank: 2

积分
189
最后登录
2019-5-21
 楼主| 发表于 2017-8-22 15:49:57 | 显示全部楼层
小恩GG 发表于 2017-8-22 10:54
1、app的flash的中断向量也要写flash,还是直接改__init_hardware函数(kinetis_sysinit.c文件)的__vect ...

我 看的是BootLoader_KEA128_CAN_V1  这个例程
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 20:11 , Processed in 0.113406 second(s), 31 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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