打印
[技术问题解答]

KL36 PE生成的FLASH函数

[复制链接]
5012|34
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
FSL_TICS_ZJJ| | 2014-4-28 11:02 | 只看该作者
楼主,你可以使用FLASH_LDD去自己生成一个,配置好CPU后,添加一个FLASH_LDD

然后你右击模块,查看help

点击典型应用

然后就会出现如何操作这个模块了,你可以直接存储读取了。

楼主你自行练习下,如果生成有问题,可以再交流。
前提,请你使用CW10.6,因为我们发现10.5以下的使用这个模块生成会有点问题。

使用特权

评论回复
板凳
jiahongjian|  楼主 | 2014-4-28 11:06 | 只看该作者
好的 我现在装的是10.4  我先升级一下

使用特权

评论回复
地板
FSL_TICS_ZJJ| | 2014-4-28 11:16 | 只看该作者
jiahongjian 发表于 2014-4-28 11:06
好的 我现在装的是10.4  我先升级一下

对,下载个10.6的使用。然后按照help的代码你就可以直接执行了。
如果遇到问题,告诉我。

使用特权

评论回复
5
jiahongjian|  楼主 | 2014-4-28 13:11 | 只看该作者
FLASH1_Write(FLASH1_DeviceData,&qq,0,4);  qq这个变量为4个字节  这样就写进地址0里面去了吗?

使用特权

评论回复
6
FSL_TICS_ZJJ| | 2014-4-28 13:40 | 只看该作者
MyFLASH_Ptr = FLASH1_Init(NULL);                                            /* Initialization of FLASH1 component */
  Error = FLASH1_Write(MyFLASH_Ptr, Data, MY_FLASH_LOCATION, sizeof(Data));   
你的地址最好往后面写写,可以放到block1的尾巴处,因为这样flash开始的地方会放向量表以及一些只读数据,还有程序等。
所以你地址往后选。

使用特权

评论回复
7
jiahongjian|  楼主 | 2014-4-28 14:38 | 只看该作者
Error = FLASH1_Write(MyFLASH_Ptr, &qq, 1000, 4); 这样可以吗
Error = FLASH1_Read(MyFLASH_Ptr,1000,&qq1,4);       读出来qq1不对

使用特权

评论回复
8
FSL_TICS_ZJJ| | 2014-4-28 14:46 | 只看该作者
代码如下写:

MyFLASH_Ptr = FLASH1_Init(NULL);                                            /* Initialization of FLASH1 component */
  Error = FLASH1_Write(MyFLASH_Ptr, Data, MY_FLASH_LOCATION, sizeof(Data));   /* Start writing to the flash memory */
  /* Here some other application code can be placed */
  while (!DataWritten标志寄存器) {                                                   /* Wait until the data are written */
    FLASH1_Main(MyFLASH_Ptr);                                                 /* Run the main method */
  }
  DataWritten标志寄存器 = FALSE;
  if (FLASH1_GetOperationStatus(MyFLASH_Ptr) == LDD_FLASH_FAILED) {           /* Check if the operation has successfully ended */
    /* Error state solution */
  }

  Error = FLASH1_Read(MyFLASH_Ptr, MY_FLASH_LOCATION, 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 */
  }

你把地址写到0x0001F000试试,不知道你flash是多大的。

使用特权

评论回复
9
FSL_TICS_ZJJ| | 2014-4-28 14:56 | 只看该作者
我这边用KL46做个代码把,待会给你。
你先自己试着做。

使用特权

评论回复
10
FSL_TICS_ZJJ| | 2014-4-28 15:28 | 只看该作者
楼主你好,我的平台是FRDM_KL46,芯片是KL46Z256VLL4,
FLASH 范围:MKL46Z256VLL4 256KB, BLOCK0: 0x0000_0000 – 0x0001_FFFF BLOCK1: 0x0002_0000 – 0x0003_FFFF
我定义的地址为#define MY_FLASH_LOCATION 0x0003f000
然后测试的结果是:




buff就是把写进去的数据读回来的。
可见我的结果是正确的,附件我上传了我的代码,你可以跑跑看。
当然,你要注意你的flash地址,改为你实际的地址哦,尽量使用比较高的地址哦。
KL46_FLASHLDD.rar (545.36 KB)


使用特权

评论回复
11
FSL_TICS_ZJJ| | 2014-4-28 16:13 | 只看该作者
亲,问题解决了没?
解决了帮我及时结贴。
还有问题,欢迎提问!

使用特权

评论回复
12
jiahongjian|  楼主 | 2014-4-29 10:11 | 只看该作者
MyFLASH_Ptr = FLASH1_Init(NULL);                                            /* Initialization of FLASH1 component */
   Error = FLASH1_Write(MyFLASH_Ptr, Data, MY_FLASH_LOCATION, sizeof(Data));   /* Start writing to the flash memory */
   while (!DataWritten标志寄存器) {                                                   /* Wait until the data are written */
     FLASH1_Main(MyFLASH_Ptr);                                                 /* Run the main method */
   }
   DataWritten标志寄存器 = FALSE;
  if (FLASH1_GetOperationStatus(MyFLASH_Ptr) == LDD_FLASH_FAILED) {           /* Check if the operation has successfully ended */
     /* Error state solution */
   }
   
   
   Error = FLASH1_Read(MyFLASH_Ptr, MY_FLASH_LOCATION, 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 */
      }
while(1);

111.jpg (27.84 KB )

写入正确

写入正确

222.jpg (23.53 KB )

读出无数据

读出无数据

使用特权

评论回复
13
FSL_TICS_ZJJ| | 2014-4-29 10:21 | 只看该作者
jiahongjian 发表于 2014-4-29 10:11
MyFLASH_Ptr = FLASH1_Init(NULL);                                            /* Initialization of FL ...


把你芯片的完整型号,以及你写入的flash地址给我。
你查看有没有写入是看memory的flash地址,不是看data。

使用特权

评论回复
14
jiahongjian|  楼主 | 2014-4-29 10:22 | 只看该作者
数据写入的地址 0x00007f00

444.jpg (59.87 KB )

数据确实写进去了

数据确实写进去了

使用特权

评论回复
15
jiahongjian|  楼主 | 2014-4-29 10:32 | 只看该作者
kl25z128vlk4

使用特权

评论回复
16
FSL_TICS_ZJJ| | 2014-4-29 10:58 | 只看该作者
jiahongjian 发表于 2014-4-29 10:32
kl25z128vlk4

那你题目还弄KL36的,所以我给你KL46的。你板子是FRDM_KL25吗?
如果是KL25我就给你个flash的代码。

使用特权

评论回复
17
jiahongjian|  楼主 | 2014-4-29 11:10 | 只看该作者
我先用KL25调程序 后续产品里面是用的KL36 因为有段式液晶  

使用特权

评论回复
18
FSL_TICS_ZJJ| | 2014-4-29 11:13 | 只看该作者
jiahongjian 发表于 2014-4-29 11:10
我先用KL25调程序 后续产品里面是用的KL36 因为有段式液晶

你debug看看,程序有没有读取成功flash,看看是不是程序是不是挺在哪里,有没有跑到结束。
我待会有空帮你生成个。

使用特权

评论回复
19
jiahongjian|  楼主 | 2014-4-29 12:53 | 只看该作者
单独的读 是没问题的 先写后读不行,我加了1S的延时也不可以,目前是这样  我在试试

使用特权

评论回复
20
FSL_TICS_ZJJ| | 2014-4-29 13:57 | 只看该作者
我现在就做个KL25的代码,验证一下,待会给你!

使用特权

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

本版积分规则

24

主题

140

帖子

1

粉丝