查看: 4892|回复: 11

[已解决] K61 EEPROM问题(已解决)

[复制链接]

该用户从未签到

6

主题

27

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
发表于 2013-11-19 09:59:27 | 显示全部楼层 |阅读模式
我使用MK61FX512VMJ12,目前打算使用内部的EEPROM。看了相关资料后,有几个问题不是太明白:
1.K61 Sub-Family Reference Manual 的30.4.12.15节写的很清楚,就是在执行Program Partition command命令时,不允许从flash      memory中装载指令。也就是说,是不是要在RAM里执行这个指令?如果是的话请问有没有这方面的资料和源码,我目前不太清楚如何将芯片配置在RAM中运行。
2.在执行Program Partition command 之前需不需要擦出整个Flash memory?
3.如何配置EEPROM生效呢,按照我下面的流程是否可以?  
   FlashInit() ---> FlashEraseAllBlock() --> DEFlashPartition() --> SetEEEEnable()
   我使用的是官方提供的那个Flash库,上面的函数都来自那里。
4.我打算做一个按照3来配置EEPROM生效的程序,对于每一个新片,先用JLINK运行那段配置程序,之后就可以烧录正常的程序了。我这    样的做法需要两次烧录,比较麻烦,有没有更方便的方法呢(考虑后续生产)?
我知道答案 目前已有10人回答
回复

使用道具 举报

该用户从未签到

6

主题

27

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
 楼主| 发表于 2013-11-19 10:04:56 | 显示全部楼层

RE:K61 EEPROM问题

对了,补充一下,我使用的是Keil平台。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-11-19 11:30:18 | 显示全部楼层

回复:K61 EEPROM问题

你好!我来回答你的问题。
1,关于EEPROM的配置,有一篇应用笔记,下载地址为:
http://cache.freescale.com/files/32bit/doc/app_note/AN4282.pdf?fsrch=1&sr=1
而且,你还可以参考K40的EEPROM代码,和K61的操作流程是一样的,请查看附件,这个代码不是调用库函数,是直接对寄存器操作,所以可以更清楚的了解过程。
2,不擦除,应该也是可以直接分配的。
3,使用和官方提供的flash库一样的流程,肯定是可以的。
4,可以首先判断下,是否已经分区,如果分区了就不用再分区,直接运行程序就行了;如果没有分区就分区使能eeprom。这个流程你可以参考附件里的方法。
希望能帮到你。
KINETIS512_SC_flexmem.zip (5.53 MB, 下载次数: 43)
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

27

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
 楼主| 发表于 2013-11-19 11:37:33 | 显示全部楼层

RE:K61 EEPROM问题

再次麻烦问一下,在我配置EEPROM时,是不是一定要在RAM中运行程序呢?
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

27

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
 楼主| 发表于 2013-11-19 11:42:52 | 显示全部楼层

RE:K61 EEPROM问题

文档K61 Sub-Family Reference Manual 的30.4.12.15节写着:
The Program Partition command must not be launched from flash memory, since flash memory resources are not accessible during Program Partition command execution.
就是说不能在FLASH运行中配置的。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-11-19 13:49:10 | 显示全部楼层

回复:K61 EEPROM问题

回复第 5 楼 于2013-11-19 11:42:52发表:
文档K61 Sub-Family Reference Manual 的30.4.12.15节写着:
The Program Partition command must not be launched from flash memory, since flash memory resources are not accessible during Program Partition command execution.
就是说不能在FLASH运行中配置的。 

你说的对,这个分区代码确实是要在RAM中操作,不能在flash中操作。在官方驱动里面,K40的代码里面有程序烧入flash后,再执行分区的代码。但是,这个代码是一开始就把程序拷贝到了RAM中去。所以,目前还是需要分区后再次烧录程序。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-11-19 15:12:05 | 显示全部楼层

回复:K61 EEPROM问题

回复第 5 楼 于2013-11-19 11:42:52发表:
文档K61 Sub-Family Reference Manual 的30.4.12.15节写着:
The Program Partition command must not be launched from flash memory, since flash memory resources are not accessible during Program Partition command execution.
就是说不能在FLASH运行中配置的。 

你好,经过我们的查询,还是可以一次烧写flash程序完成批量芯片的分区功能的。
官方有一个应用笔记讲到,可以只是把flash命令放到RAM中操作,即清除flash后运行代码,然后判断是否需要分区,如果需要分区,可以运行FlashLaunchCommand,这个命令可以在应用笔记的第8页看到,应用笔记的链接如下:
http://cache.freescale.com/files/32bit/doc/app_note/AN4695.pdf?fpsp=1&WT_TYPE=Application Notes&WT_VENDOR=FREESCALE&WT_FILE_FORMAT=pdf&WT_ASSET=Documentation
希望能帮到您!
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

27

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
 楼主| 发表于 2013-11-19 18:00:35 | 显示全部楼层

RE:K61 EEPROM问题

关于.icf的问题:
因为我想在KINETIS512_SC_flexmem.zip 提供的源码下修改为在我的芯片运行的问题,所以需要修改一下.icf文件。但是有点问题不能理解。在256KB_Pflash_256KB_Dflash.icf里面有如下代码:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__   = 0x00040000;
define symbol __ICFEDIT_region_RAM_start__ = 0x1FFF8410;
define symbol __ICFEDIT_region_RAM_end__   = 0x20000000;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x1000;
define symbol __ICFEDIT_size_heap__   = 0x200;
/**** End of ICF editor section. ###ICF###*/
define symbol __region_FlexNVM_start__  = 0x10000000;
define symbol __region_FlexNVM_end__    = 0x10040000;
define symbol __region_RAM2_start__ = 0x20000000;
define symbol __region_RAM2_end__ = 0x20008000;
define exported symbol __VECTOR_TABLE = 0x00000000;
define exported symbol __VECTOR_RAM = 0x1fff0000;
define exported symbol __BOOT_STACK_ADDRESS = __region_RAM2_end__ - 8;        //0x2000FFF8;
define symbol __code_start__ = 0x00000410;

……………………………….
……………………………..
问题是:按照上面代码,该芯片应该是256K的PFLASH,256K的DFLASH,64K的RAM,但是从上面配置看__VECTOR_RAM = 0x1fff0000,__ICFEDIT_region_RAM_start__ = 0x1FFF8410,
__ICFEDIT_region_RAM_end__  = 0x20000000。按照这样计算的话RAM1应该为
__ICFEDIT_region_RAM_end__  - __VECTOR_RAM  +1  = 0x10000 这样的话上半个RAM就有64K,而下半个RAM
__region_RAM2_end__ - __region_RAM2_start__  = 0x8000 也由32K。
照这样子算来,明显RAM大小不对啊。
回复 支持 反对

使用道具 举报

该用户从未签到

145

主题

4926

帖子

0

金牌会员

Rank: 6Rank: 6

积分
9267
最后登录
1970-1-1
发表于 2013-11-20 11:24:28 | 显示全部楼层

回复:K61 EEPROM问题

回复第 8 楼 于2013-11-19 18:00:35发表:
关于.icf的问题:
因为我想在KINETIS512_SC_flexmem.zip 提供的源码下修改为在我的芯片运行的问题,所以需要修改一下.icf文件。但是有点问题不能理解。在256KB_Pflash_256KB_Dflash.icf里面有如下代码:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x00000000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x00000000;
define symbol __ICFEDIT_region_ROM_end__ = 0x00040000;
define symbol __ICFEDIT_region_RAM_start__ = 0x1FFF8410;
define symbol __ICFEDIT_region_RAM_end__ = 0x20000000;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__ = 0x1000;
define symbol __ICFEDIT_size_heap__ = 0x200;
/**** End of ICF editor section. ###ICF###*/
define symbol __region_FlexNVM_start__ = 0x10000000;
define symbol __region_FlexNVM_end__ = 0x10040000;
define symbol __region_RAM2_start__ = 0x20000000;
define symbol __region_RAM2_end__ = 0x20008000;
define exported symbol __VECTOR_TABLE = 0x00000000;
define exported symbol __VECTOR_RAM = 0x1fff0000;
define exported symbol __BOOT_STACK_ADDRESS = __region_RAM2_end__ - 8; //0x2000FFF8;
define symbol __code_start__ = 0x00000410;

……………………………….
……………………………..
问题是:按照上面代码,该芯片应该是256K的PFLASH,256K的DFLASH,64K的RAM,但是从上面配置看__VECTOR_RAM = 0x1fff0000,__ICFEDIT_region_RAM_start__ = 0x1FFF8410,
__ICFEDIT_region_RAM_end__ = 0x20000000。按照这样计算的话RAM1应该为
__ICFEDIT_region_RAM_end__ - __VECTOR_RAM +1 = 0x10000 这样的话上半个RAM就有64K,而下半个RAM
__region_RAM2_end__ - __region_RAM2_start__ = 0x8000 也由32K。
照这样子算来,明显RAM大小不对啊。
 

 
你好,你这样计算上半部分的RAM大小是错误的,上半部分应该SRAM_L: 0x1FFF8410 – 0x1FFF_FFFF,是小于32K的,
32K的SRAM地址是:SRAM_L: 0x1FFF_8000 – 0x1FFF_FFFF
回复 支持 反对

使用道具 举报

该用户从未签到

6

主题

27

帖子

0

注册会员

Rank: 2

积分
77
最后登录
1970-1-1
 楼主| 发表于 2013-11-20 17:01:16 | 显示全部楼层

RE:K61 EEPROM问题

在KINETIS512_SC_flexmem的common_startup()函数里有下面的内容:
    /* Copy the vector table to RAM */
    if (__VECTOR_RAM != __VECTOR_TABLE)
    {
        for (n = 0; n < 0x410; n++)
            __VECTOR_RAM[n] = __VECTOR_TABLE[n];
    }
但是__VECTOR_RAM = 0x1fff0000,如果按照SRAM_L: 0x1FFF8410 – 0x1FFF_FFFF来理解的话,这个显然不是在有效RAM空间了(虽然寻址范围是RAM的)
回复 支持 反对

使用道具 举报

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

本版积分规则

关闭

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

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

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

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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