- 1、本文档共9页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DA14580的RAM38K_40K_42K配置方法解读
32K code代码空间的扩展(试)
(38K、40K、42K)说明
本文得以发布,特别感谢Dialog WC.IP(叶伟忠先生)提供方法及代码支援!
一、 原理:
1、在Dialog配置代码中,内部有多个Case可设定
默认是在System_ARMM0.c中设为Case 23,即38K SysRam + 12K RetRam方式:
2、DA14580在上电后,即使没有下载程序,也会自行启动,扫描各端口有否启动代码,依次OTP、SPI(M)UART1/2/3/4、SPI(S)、IIC(S)。M即为有外部Master,DA14580为从端。S即为外部Slave,DA14580为主端。
若此时SPI_S(Flash)有启动代码,就会自动搬32K code到RAM中,并自动从0行。
注:为啥只搬32K,是要顾及到内部OTP仅32K空间,若超限会出错。该原始引导程序,被固化到DA14580中。
3、若有超过此32KB长度,需要在DA14580原始引导段搬好32K后,运行用户代码时,用户代码开始段(0的代码)来完成。合适的位置是在System_init之后,在main之前。
即在System_ARMM0.c中,Systeminit后,main之前,增加code_loader程序。让code_loader将Flash中0x8008后的代码下载到接下来的RAM空间0。
注:为啥RAM空间是0而对应的Flash中不是0x8000?因为Flash中最前面的8Byte是放识别数据,Flash放代码是从0x0008开始的,RAM放代码从0始。代码长度与Flash中的位置相差8Byte。
二、 扩展到38K代码空间:
1、若代码超过32K,但在38K内,不用改case,仍沿用CASE23即可。
2、将附件中system_ARMM0_38K.c及boot_vectors_38K.s文件,Copy到:
dk_apps\src\plf\refip\src\arch\boot\rvds目录与system_ARMM0.c及boot_vectors.s在同一目录内。
3、将附件中的scatterfile_common.sct_38K.sct文件,Copy到:
dk_apps\scatterfiles目录,与scatterfile_common.sct文件同一目录内。
4、在keil工程中,去掉原system_ARMCM0.c,及boot_vectors.s文件,增加system_ARMCM0_38K.c,及boot_vectors_38K.s文件,示例操作如下:
在keil工程中,点选boot打开,鼠标右击弹开,左击选中Remove File’system_ARMCM0.c’,删除:
再点选boot目录,增加system_ARMCM0_38K.c
同理删除boot_vectors.s,增加boot_vectors_38K.s
5、在keil工程中,选择调用scatterfile_common.sct_38K.sct文件(不再使用scatterfile_common.sct)
然后,没有然后了!重新编译,烧到Flash,上电,广播…… OK,恭喜您,答对了!
如果……,还是不OK,悲催了!别紧张,您的结果,与60%的扩内存用户相同!请参看附录1(内存扩展FAQ)
三、 扩展到42K代码空间:
若代码接近42K空间,与扩展38K代码空间的方法相同,不过是挂42K对应的文件,再增加如下操作:
1、 在system_ARMM0.c中,已改case到CASE7。
2、 在arch_main.c中增加,BLE_reserved_memory段变量,并将其初始化为0
3、据Ret_RAM分配的大小,修改em_map_ble.h中对OFFSET_BUFFERS的定义:
4、 修改da14580_scatter_config.h,使之指向Ret_RAM的底部,不至赿界:
5、若要修改PC仿真模式,如将23修改为7,则需要修改ini文件。Copy复制再修改:
1)将第二行CE对应23模式。模式Number,转化为16进制,再X2,如7*2=14=0x0e,参见附件sysram_case7.ini,如下图:
2)在如下设置菜单中,配置仿真模式:
然后,没有然后了!重新编译,烧到Flash,上电,广播…… OK!
如果不幸,又悲催了!别紧张,请参看附录1(内存扩展FAQ),若未能解决,找天午技术部!
一、 扩展到40K代码空间:
若代码超过38K,但在40K内,改case到CASE15。不过是挂40K对应的文件,类似扩展到42K的方法,仅参数略有不同,如下操作:
1
文档评论(0)