Other Parts Discussed in Thread: BLE-STACK, SYSCONFIG
我看官方例程配置(非安全模式),跳转进入用户程序的地址是0x50。然而看这份资料图片,0x1000后面816个字节好像也被占用。那么,我接收到手机APP下发下来的bin文件数据后,第一个包写入flash的起始地址是多少?呢?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
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) | Description |
---|---|---|---|
Flash | 0x00000000 | 60 | Cortex Interrupt Vecs |
0x00001000 | 816 | TI RTOS ROM Jump Table | |
Application / Stack Code | |||
SNV | 1-2 pages | Simple Non-Volatile Storage | |
Last Flash Page* | 88 | Customer Configuration | |
ROM | 0x10000000 | ROM_SIZE | TI-RTOS, BLE-Stack/BLE5-stack, Crypto, Driverlib, Boot |
RAM | 0x20000000 | RAMVEC_SIZE | Interrupt Vector Table in RAM for dynamic Hwi creation |
0x20000100 | RTOSRAM_SIZE | Reserved for pointers for TI-RTOS in ROM | |
.bss and .data | |||
ICall heap | |||
TI-RTOS kernel system stack (CSTACK) |
您好,请问您问的是片上还是片外负载?
那么,我接收到手机APP下发下来的bin文件数据后,第一个包写入flash的起始地址是多少?呢?
这取决于应用。 您请查看 OB.c 中该逻辑存在的位置。 特别要看一下 oadImgIdentifyWrite()。 以下是在 OAD 映像被验证并且复制过程准备就绪后来自此文件的代码片段:
// If image ID is accepted, set variables and pre-erase flash pages
if(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 meta
imageAddress = oadFindExtFlImgAddr(extFlInfo , idPld->len);
imagePage = EXT_FLASH_PAGE(imageAddress);
}
如果您只将应用程序连接到调试器,您可以在此时暂停调试器以查找 imageAddress 的内容,这个应该是您在问的问题(从片外 OAD的角度来说 )。
问题一、CC2642每页是8k,等于最开始那页我不能用来存放用户程序了吗?
应该不是的。
问题二、写flash,是不是必须整页写?还是可以单独写,整页擦除?
您可以看下默认示例,它允许写入任何空间,但会擦除整个页面。 在 flash_interface_ext_RTOS_NVS 中看到了函数 eraseFlashPg。
谢谢你!我用的是片内OTA。但是已经完全没有用官方OAD的例程思路了!我好像已经找到了存储起始地址。
因为用的非安全模式,所以第一页的内容在擦前需要读出保存那些中断向量。我用readFlashPg(0,0,Temp,60); 读出前60个字节,然后打印出来,和用Flash Programmer 2读得的数据不一样。不知道哪里错了。
再请教几个问题:1、CC2642首页flash开始一些地址,都是装的cortex中断向量啥的,能读出来不?还是不可读的?2、如果用eraseFlashPg(0),会把这些中断向量擦掉吗?
谢谢
你好!这个flash擦写我已经弄好了,现在又出现另外一个问题:我是在官方persistent_app工程里进行裁剪写自己的OTA程序的。现在发现flash空间不够用(官方默认分配给persistent_app工程的flash只有少量剩余空间,而我们的私有协议,尤其是加个打印调试程序时,马上就报警flash不够,编译过不了),我想把默认的nvs分配的2pages,改成1page,可以吗?这样就能多出8k的flash用来写下载程序。然而,我在.syscfg和.cmd改好了SIZE和persistent_app起始地址后,还是报错地址重叠,不知道还要修改哪里?这个事情比较急,多谢!
您好,工程师这边在默认示例中无法重现该问题,不过您可以试下以下步骤:
在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 app
ROM.constStructAddr = 0x39000; //tables TI rtos uses
ROM.externFuncStructAddr = 0x393C0;
}
在 Simple_peripheral_OG_ON_CHIP 中,重复上述步骤 (4 除外)。 请注意,对于3来说,需要单独修改 Simple_peripheral_OG_ON_CHIP 的链接器文件。 请导航至该项目路径以查找该链接器文件。 戏外也请注意直接更改链接器文件 (您将丢失原始 SDK 内容)。 确保备份链接器文件或保存副本,以便您可以恢复任何更改。
我的.cmd等文件路径,在开发工程里是使用备份到我的工程目录下的那个,不是用安装默认的路径下的那个,会不会是这个问题导致的呢?
您好,只要您可以通过修改项目属性通向正确的链接器文件,应该是没有问题的。
我也是这样修改的呢!可是就是报错。然后我保持nvs分配2page=0x4000不变,只把用户APP空间压缩,结果还是报错(除了你上面步骤1没有,其它的都相应改了。0x00038000改成0x00034000)
要使用一页 nv,如上所述,请确保定义predefined symbol并将其设置为 1。请问您为什么将起始地址减少 0x4000? persistent app将会保存 0x2000 ,然后您还必须在另一侧 (Simple_peripheral 应用程序) 进行类似更改,并且也可以保存另一个 0x2000。
此外,请问您是只想要在persistent app中节省空间吗?
而且您给的屏幕截图显示了 0x30000 的region base,这个是为什么会这样?
您好,首先十分抱歉,由于国外假期在即,工程师在4/18之前无法给到您新的答复,为您带来的不便敬请谅解。
此外,能否请您再次查看链接器文件。 如果区域重叠的话,可能需要进行一些额外的修改。 日志中有一个错误是 the region is already specified..,您方便详细说下吗?以及能否再详细说明下针对链接器文件对项目属性所做的修改&对链接器文件进行的任何直接修改?