Part Number:CC2642ROther Parts Discussed in Thread:BLE-STACK, SYSCONFIG
我看官方例程配置(非安全模式),跳转进入用户程序的地址是0x50。然而看这份资料图片,0x1000后面816个字节好像也被占用。那么,我接收到手机APP下发下来的bin文件数据后,第一个包写入flash的起始地址是多少?呢?
Janet xu:
Memory Map — SimpleLink CC13XX/CC26XX SDK BLE5-Stack User's Guide 2.02.04.00 documentation
现在不能上传图片,只好给个链接。(为啥TI的datasheet文档中没有这些内容,太不习惯了!今天找到这个链接了,明天又找不到了,查个芯片内部资源真浪费时间)
The following table contains the memory map for the CC13xx or CC26xx.
Memory Section
Starting Address
Size (bytes)
DescriptionFlash
0x00000000
60
Cortex Interrupt Vecs0x00001000
816
TI RTOS ROM Jump TableApplication / Stack Code
SNV
1-2 pages
Simple Non-Volatile StorageLast Flash Page*
88
Customer ConfigurationROM
0x10000000
ROM_SIZE
TI-RTOS, BLE-Stack/BLE5-stack, Crypto, Driverlib, BootRAM
0x20000000
RAMVEC_SIZE
Interrupt Vector Table in RAM for dynamic Hwi creation0x20000100
RTOSRAM_SIZE
Reserved for pointers for TI-RTOS in ROM.bss and .data
ICall heap
TI-RTOS kernel system stack (CSTACK)
,
Janet xu:
问题一、CC2642每页是8k,等于最开始那页我不能用来存放用户程序了吗?
问题二、写flash,是不是必须整页写?还是可以单独写,整页擦除?
谢谢
,
Cherry Zhou:
您好您的问题我们已升级到英文论坛寻求帮助,如有答复将尽快回复您。上传图片的话,您可以点击回复框中的插入–图像/视频/文件–点击灰色的“上传”,然后上传您所需的文件或视频。
,
Cherry Zhou:
您好,请问您问的是片上还是片外负载?
Janet xu 说:那么,我接收到手机APP下发下来的bin文件数据后,第一个包写入flash的起始地址是多少?呢?
这取决于应用。 您请查看 OB.c 中该逻辑存在的位置。 特别要看一下 oadImgIdentifyWrite()。 以下是在 OAD 映像被验证并且复制过程准备就绪后来自此文件的代码片段:
// If image ID is accepted, set variables and pre-erase flash pagesif(idStatus == OAD_SUCCESS && verifStatus == OAD_SUCCESS){if(!useExternalFlash){imageAddress = 0;imagePage = 0;metaPage = 0;}else{ImageSizeInfo_t extFlInfo[OAD_EFL_MAX_META] = {0};// Warning: oadFindExtFlMetaPage needs to be called first// to populate the imageInfo structure.oadFindExtFlMetaPage(&metaPage, extFlInfo);// oadFindExtFlImgAddr will find a suitable region// based on ext metaimageAddress = oadFindExtFlImgAddr(extFlInfo , idPld->len);imagePage = EXT_FLASH_PAGE(imageAddress);}如果您只将应用程序连接到调试器,您可以在此时暂停调试器以查找 imageAddress 的内容,这个应该是您在问的问题(从片外 OAD的角度来说 )。
Janet xu 说:问题一、CC2642每页是8k,等于最开始那页我不能用来存放用户程序了吗?
应该不是的。
Janet xu 说:问题二、写flash,是不是必须整页写?还是可以单独写,整页擦除?
您可以看下默认示例,它允许写入任何空间,但会擦除整个页面。 在 flash_interface_ext_RTOS_NVS 中看到了函数 eraseFlashPg。
,
Janet xu:
谢谢你!我用的是片内OTA。但是已经完全没有用官方OAD的例程思路了!我好像已经找到了存储起始地址。
因为用的非安全模式,所以第一页的内容在擦前需要读出保存那些中断向量。我用readFlashPg(0,0,Temp,60); 读出前60个字节,然后打印出来,和用Flash Programmer 2读得的数据不一样。不知道哪里错了。
再请教几个问题:1、CC2642首页flash开始一些地址,都是装的cortex中断向量啥的,能读出来不?还是不可读的?2、如果用eraseFlashPg(0),会把这些中断向量擦掉吗?
谢谢
,
Cherry Zhou:
Janet xu 说:CC2642首页flash开始一些地址,都是装的cortex中断向量啥的,能读出来不?
您好,应该是可读的。不过通常不建议改变中断矢量部分,因为应用程序使用该部分来跟踪各种状态和堆栈指针。
Janet xu 说:如果用eraseFlashPg(0),会把这些中断向量擦掉吗?
是的,您不应擦除第一页。
,
Janet xu:
你好!这个flash擦写我已经弄好了,现在又出现另外一个问题:我是在官方persistent_app工程里进行裁剪写自己的OTA程序的。现在发现flash空间不够用(官方默认分配给persistent_app工程的flash只有少量剩余空间,而我们的私有协议,尤其是加个打印调试程序时,马上就报警flash不够,编译过不了),我想把默认的nvs分配的2pages,改成1page,可以吗?这样就能多出8k的flash用来写下载程序。然而,我在.syscfg和.cmd改好了SIZE和persistent_app起始地址后,还是报错地址重叠,不知道还要修改哪里?这个事情比较急,多谢!
,
Janet xu:
我的新程序是从第一页flash某处开始存放的,所以肯定要先页擦,然后页写。所以我擦之前,先把那些中断向量(系统配置)copy出来,然后和用户程序一起整页写入第一页flash
,
Cherry Zhou:
您好,只能使用 1nV 页面。 请问您是否还修改了 simple_peripheral_onchip 示例中的链接器文件? 请确保项目和 persistent _app 都被正确修改,以避免段重叠。
,
Janet xu:
我在用户程序multi_role里也同步修改了.cmd,.syscfg等相关的地方,可是就是报错。你说的链接器文件一共有哪些呢?能否列出来告诉我,我好一 一核对下。我就是怀疑我有哪个地方遗漏了修改,所以还是报错地址重叠。
另外,nvs只分配1page=0x2000后,SNV_ID 范围: 0x100~0x11F需不需要更改呢?谢谢
,
Cherry Zhou:
好的收到您的问题了哈,工程师这边应该会在下周二之前给到您答复。
,
Cherry Zhou:
您好,工程师这边在默认示例中无法重现该问题,不过您可以试下以下步骤:
在persistent_app中:
1. 在项目的预定义符号内定义 NVOCMP_NVPAGES=1。
2. 将 SysConfig NV 区域设置为 0x2000 (如您在上面的屏幕截图中所示)。
3. 打开项目的链接器文件 cc13x2_cc26x2_app.cmd (如果使用 CCS 、则位于 C : \ti\simplelink_cc13xx_cc26xx_SDK_6_10_00_21_eng\examples\RTOS\CC26X2R1_LAUNCHXL\ble5stack\persistent _app\tirtos\cs 内。
a. 编辑 IMG_A_FLASH_START 并将其设置为 0x00036000。
4. 打开项目的 RTOS 配置文件
a. persistent_app.cfg 将 m3Hwi.resetVectorAddress 修改为 0x00038090 ; (0x90 是用来考虑安全标头的。 默认情况下,persistent app会使能安全。)
b.
else{m3Hwi.resetVectorAddress= 0x00038090; //change this to 0x00036090; secure persistent appROM.constStructAddr = 0x39000; //tables TI rtos usesROM.externFuncStructAddr = 0x393C0;}在 Simple_peripheral_OG_ON_CHIP 中,重复上述步骤 (4 除外)。 请注意,对于3来说,需要单独修改 Simple_peripheral_OG_ON_CHIP 的链接器文件。 请导航至该项目路径以查找该链接器文件。 戏外也请注意直接更改链接器文件 (您将丢失原始 SDK 内容)。 确保备份链接器文件或保存副本,以便您可以恢复任何更改。
,
Janet xu:
我也是这样修改的呢!可是就是报错。然后我保持nvs分配2page=0x4000不变,只把用户APP空间压缩,结果还是报错(除了你上面步骤1没有,其它的都相应改了。0x00038000改成0x00034000)
,
Janet xu:
,
Janet xu:
我突然想到一个问题:我的.cmd等文件路径,在开发工程里是使用备份到我的工程目录下的那个,不是用安装默认的路径下的那个,会不会是这个问题导致的呢?
,
Cherry Zhou:
好的感谢您提供的信息,已经帮您跟进给工程师了哈。
,
Cherry Zhou:
Janet xu 说:我的.cmd等文件路径,在开发工程里是使用备份到我的工程目录下的那个,不是用安装默认的路径下的那个,会不会是这个问题导致的呢?
您好,只要您可以通过修改项目属性通向正确的链接器文件,应该是没有问题的。
Janet xu 说:我也是这样修改的呢!可是就是报错。然后我保持nvs分配2page=0x4000不变,只把用户APP空间压缩,结果还是报错(除了你上面步骤1没有,其它的都相应改了。0x00038000改成0x00034000)
要使用一页 nv,如上所述,请确保定义predefined symbol并将其设置为 1。请问您为什么将起始地址减少 0x4000? persistent app将会保存 0x2000 ,然后您还必须在另一侧 (Simple_peripheral 应用程序) 进行类似更改,并且也可以保存另一个 0x2000。
此外,请问您是只想要在persistent app中节省空间吗?
而且您给的屏幕截图显示了 0x30000 的region base,这个是为什么会这样?
,
Janet xu:
我是想扩大persistent app空间(不够写我的OTA私有协议程序了),而我的用户APP空间有很多余量。所以想压缩用户 APP flash空间,让给persistent app工程使用。我是想移16k(=0x4000)flash空间给persistent app使用。(从0x34000往小移0x4000,就是0x30000了啊),nv还是使用默认的2page配置
,
Cherry Zhou:
已经跟进给工程师了哈,有答复尽快给您。
,
Cherry Zhou:
您好,首先十分抱歉,由于国外假期在即,工程师在4/18之前无法给到您新的答复,为您带来的不便敬请谅解。
此外,能否请您再次查看链接器文件。 如果区域重叠的话,可能需要进行一些额外的修改。 日志中有一个错误是 the region is already specified..,您方便详细说下吗?以及能否再详细说明下针对链接器文件对项目属性所做的修改&对链接器文件进行的任何直接修改?
,
Janet xu:
非常感谢,flash扩充问题已经解决,因为太忙了,没有及时上来回复。请关闭该帖。再次感谢!