打印
[Kinetis]

KL26Z128**** flash编程遇到问题,初始化flash用不来,求指导!!

[复制链接]
4053|26
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fjpmbb|  楼主 | 2015-1-22 14:02 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
现在手中有一块KL26Z128***的芯片,想使用芯片自带的flash当成存储用,参考了野火的demo,他有一个void flash_init(void)函数,我现在拿来用,结果程序跑不下去,我的芯片是128K的flash,野火的demo是从最后的一块使用的,也就是地址是127页,另外我的代码是用PEx生成的,但是不是**作的,我到手的时候,只有生成好的代码,不知道建工程的人是怎么配置的。希望大侠给与支持,谢谢。

void flash_init(void)
{
    FTFA_FSTAT =    (0
                     |  FTFA_FSTAT_CCIF_MASK        // 指令完成标志(写1清0)
                     |  FTFA_FSTAT_RDCOLERR_MASK    // 读冲突错误标志(写1清0)
                     |  FTFA_FSTAT_ACCERR_MASK      // 访问错误标志位(写1清0)
                     |  FTFA_FSTAT_FPVIOL_MASK      // 非法访问保护标志位(写1清0)
                    );


/* FSTAT Bit Fields */
#define FTFA_FSTAT_MGSTAT0_MASK                  0x1u
#define FTFA_FSTAT_MGSTAT0_SHIFT                 0
#define FTFA_FSTAT_FPVIOL_MASK                   0x10u
#define FTFA_FSTAT_FPVIOL_SHIFT                  4
#define FTFA_FSTAT_ACCERR_MASK                   0x20u
#define FTFA_FSTAT_ACCERR_SHIFT                  5
#define FTFA_FSTAT_RDCOLERR_MASK                 0x40u
#define FTFA_FSTAT_RDCOLERR_SHIFT                6
#define FTFA_FSTAT_CCIF_MASK                     0x80u
#define FTFA_FSTAT_CCIF_SHIFT                    7

相关帖子

沙发
fjpmbb|  楼主 | 2015-1-22 14:04 | 只看该作者
先自己顶一顶,我才接触kinetis 2周不到,谢谢大家支持

使用特权

评论回复
板凳
FSL_TICS_ZJJ| | 2015-1-22 14:26 | 只看该作者
楼主用的是CW吗?
你可以直接用PE自己生成一个,使用FLASH_LDD就可以实现,选中FLASH_LDD模块后可以查看help.
另外,我这边有个之前做的基于KL16的FLASH_LDD的例程,你可以参考下。

使用特权

评论回复
地板
fjpmbb|  楼主 | 2015-1-22 14:26 | 只看该作者
忘记说了 我手中的代码包含了 MQX-lite,但是野火的是没有os的,不知道这个会不会影响?

使用特权

评论回复
5
FSL_TICS_ZJJ| | 2015-1-22 14:33 | 只看该作者
KL16_flash_test.rar (670.93 KB)
刚附件传不上,现在补传。

使用特权

评论回复
6
fjpmbb|  楼主 | 2015-1-22 14:33 | 只看该作者
我用的是IAR,“我这边有个之前做的基于KL16的FLASH_LDD的例程,你可以参考下。” 请提供链接谢谢
我也想用PE,但是现在PE还在熟悉中,不太清楚怎么生成。

使用特权

评论回复
7
FSL_TICS_ZJJ| | 2015-1-22 14:33 | 只看该作者
fjpmbb 发表于 2015-1-22 14:26
忘记说了 我手中的代码包含了 MQX-lite,但是野火的是没有os的,不知道这个会不会影响? ...

我的是不带系统的,bareboard的。

使用特权

评论回复
8
fjpmbb|  楼主 | 2015-1-22 14:35 | 只看该作者
或者 发我邮箱也可以 fjpmbb#126.com (#改成@) 谢谢了

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2015-1-22 14:41 | 只看该作者
fjpmbb 发表于 2015-1-22 14:33
我用的是IAR,“我这边有个之前做的基于KL16的FLASH_LDD的例程,你可以参考下。” 请提供链接谢谢
我也想用 ...

如果PE不熟悉,你可以先看看我之前写的经验分享帖:
【供初学者使用】基于CodeWarrior中PE系统新建CMP例程

使用特权

评论回复
10
fjpmbb|  楼主 | 2015-1-22 14:41 | 只看该作者
裸奔的和os的还有区别么??? 之前用的是st + ucos 没有这方面的问题,也就是对几个register 设置一下 就能按照地址使用了,MQX对flash编程有特殊要求???

使用特权

评论回复
11
fjpmbb|  楼主 | 2015-1-22 14:48 | 只看该作者
FSL_TICS_ZJJ 谢谢你的帮助  我参考一下你给的例子

使用特权

评论回复
12
FSL_TICS_ZJJ| | 2015-1-22 14:53 | 只看该作者
fjpmbb 发表于 2015-1-22 14:41
裸奔的和os的还有区别么??? 之前用的是st + ucos 没有这方面的问题,也就是对几个register 设置一下 就 ...

裸奔就是没上操作系统,当然如果到最底层,其实控制flash的编程都是一样,按照RM上面的操作命令实现flash编程。
你可以参考下我的代码,后续如果还有问题,欢迎继续交流。
也可以直接按照用户手册上面的写命令,直接写寄存器实现数据写入到flash

使用特权

评论回复
13
fjpmbb|  楼主 | 2015-1-22 15:57 | 只看该作者
我又来了,呵呵!  我现在参考了你的那个KL16的例程,从flash中读取的信息,不是自己写的内容,而是程序的rom中的内容,
  88 899 bytes of readonly  code memory
  21 133 bytes of readonly  data memory
  15 933 bytes of readwrite data memory
以上是我的编译的情况,也就是说程序大小没有超过120K(0x1e000)。我现在对0x1e000开始操作,写入参考例程中的“Hello world“字符;可是我再从这个地方读取写入的内容,结果不是写入的数据,其他地方也再没有操作flash的行为,读出的数据是readonly段的数据,我查看了bin文件,发现他输出的数据,存在我的bin件中,在我程序中有这句printf("heap remaining = %d\n", ath_memquery.heap);结果从0x1e000读取的数据显示是”remaining =“,所以我断定是从readonly处读出了数据,不知道为何是这样,应该是要读出0x1e000的数据才对。以下是代码片段,供参考

        MyFLASH_Ptr = FLASH1_Init(NULL);
       
        Error = FLASH1_Write(MyFLASH_Ptr, Data, 0x1E000, sizeof(Data));         /* Start writing to the flash memory */

/* Here some other application code can be placed */
do {
  FLASH1_Main(MyFLASH_Ptr);
  OpStatus = FLASH1_GetOperationStatus(MyFLASH_Ptr);
} while (!((OpStatus == LDD_FLASH_IDLE) | (OpStatus == LDD_FLASH_FAILED)));

// read data from MY_FLASH_LOCATION
Error = FLASH1_Read(MyFLASH_Ptr, 0x1E000, Buffer, sizeof(Buffer));        /* Start reading from the flash memory */
  do {
        FLASH1_Main(MyFLASH_Ptr);
        OpStatus = FLASH1_GetOperationStatus(MyFLASH_Ptr);
  } while (!((OpStatus == LDD_FLASH_IDLE) | (OpStatus == LDD_FLASH_FAILED)));

  if (OpStatus == LDD_FLASH_FAILED) {                                                                                  /* Check if the operation has successfully ended */
        /* Error state solution */
  }
C:\Users\antling\Desktop\test.png

使用特权

评论回复
14
fjpmbb|  楼主 | 2015-1-22 15:58 | 只看该作者
C:\Users\antling\Desktop\test.png

使用特权

评论回复
15
fjpmbb|  楼主 | 2015-1-22 15:59 | 只看该作者
本来想发图片的 结果图都裂了

使用特权

评论回复
16
fjpmbb|  楼主 | 2015-1-22 16:47 | 只看该作者
图片以附近形式上传了
刚刚发错到另一个帖子中去了

test.png (3.12 KB )

test.png

使用特权

评论回复
17
fjpmbb|  楼主 | 2015-1-22 18:04 | 只看该作者
我还等着回复呢 版主~~~~~~

使用特权

评论回复
18
陌小生| | 2015-1-22 20:29 | 只看该作者
支持一下

使用特权

评论回复
19
fjpmbb|  楼主 | 2015-1-23 10:22 | 只看该作者
版主今天 会有时间 回复不?

使用特权

评论回复
20
FSL_TICS_ZJJ| | 2015-1-23 10:29 | 只看该作者
fjpmbb 发表于 2015-1-23 10:22
版主今天 会有时间 回复不?

不好意思,刚看到你帖子的更新。
你写hello world到flash之后,有没有debug在memory里面看是否写进去了?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

61

帖子

0

粉丝