【经验分享】如何在CW中使用OPENSDA实现烧录时flash数据保护 一,经验分享简介 在实际使用Codewarrior编译器下载程序的时候,大家有时候可能希望不要将芯片整个flash都擦除掉,而可以保留一部分flash里面的数据,比如以KL25为例,将flash高地址部分,也就是非程序所在的flash区域作为模拟的EEPROM使用,之前模拟EEPROM区域已经有些数据,但是实际需要,需要更新程序,所以这个时候就希望在下载程序的时候,将模拟EEPROM区域保护起来,不被擦除掉。那么如何才能实现这样的功能呢,如果使用OPENSDA方式下载,而且默认配置的话,通常都会把flash都擦掉,所以本经验分享就教大家如何实现使用CW以及opensda下载方式时,部分flash保护的功能。 二,OPENSDA下烧录flash数据保护设置 其实在CW的opensda界面中,有一个高级设置选项可以供大家选择所要保护的flash区域,一共有三块区域可以实现保护。下面讲解如何实现配置。 这里以FRDM-KL25开发板为例,IDE采用CW10.6,下载接口采用OPENSDA方式。 本次例程在一个flash控制读写的例程中实现,首先打开flash工程,然后按照如下步骤设置: 1:进入debug configuration 图1 2:点击connection中的edit按钮 图2 3 ,点击高级编程选项 图3 4:设置要包含区域 在高级选项的右上角有关于需要保护区域的设置,由于本例程是对flash的0x0001_f000地址开始写数据,所以这里保护的flash范围就设置为0x0001_f000到flash的最高地址0x0001_ffff。 图4 按照上图的设置,点击Done,即可完成相关flash地址的下载保护。 其实在CW的help中有关于Non-Volatile memory preservation的详细讲解。 图5 即每次下载的时候,都会读出保护区域的数据,然后重新编程进去,从而实现这些区域数据的保护。 三,结果测试 首先说一下程序的基本功能,本次程序KL25_FLASHLDD,是在CW10.6的PE上面做的,使用FLASH_LDD模块实现对flash地址0x0001F000以上写入“Helloworld”。测试分为三步走,第一步,不加保护下载程序,查看flash,并执行代码,使得0x0001F000以上地址写入数据。第二步,退出debug,不加保护下载程序,查看flash,看看0x0001F000地址是否有之前的数据,然后执行代码。第三步,加保护下载程序,查看flash。 当然,在测试之前,我们要保证,我们的代码大小并没有超过地址0x0001F000。现在我们来查看下代码大小,进入project->properties. 然后配置如下:
图6 然后点击apply,并且编译,即可生成代码大小: 图7 可以看到,总大小0x2148并没有超过0x0001F000,下面通过下载来验证结果。 1: 程序功能测试,非保护设置 (1)下载程序后查看0x0001F000 图8 可以看到这个时候,0x0001F000地址之后没有数据。 (2)运行代码后停止,查看0x0001F000 图9 可以看到,这个时候数据已经写进去了。退出debug。 2: 重新下载程序,非保护设置,并运行
图10 可以看到数据并没有保存,而是被刷掉了,所以运行在此写入数据,并退出。 3: 重新下载程序,保护设置 程序下载之后,发现如下,数据还是存在,说明保护成功。 图11 综上,通过设置高级配置,地址段保护,即可以实现具体flash地址段数据的下载保护。 四,附件 附件给出相关测试代码以及文档。
|