CC2640使用内部Flash进行OAD升级的问题
三个问题如下:
1. Image B是用户代码,它是不是不能用来升级,包括升级不能升级Image B,也不能升级OAD Target App(Image A)?
2. 如果问题1答案是不能的话,那么就是Image B必须通过OAD Target App来升级了,既然这样,为何还一定要让Image B包含OAD的Profile呢?我的理解是Image只要有下面这个操作就能回到OAD Target App了,然后用OAD Target App升级Image B。而其它的什么Profile或者Service都不用加到Image B了(好处不好用解释了)
uint16_t crc[2] = {0x0000, 0x0000}; // Invalidate the image. OADTarget_writeFlash(OAD_IMG_R_PAGE, OAD_IMG_R_OSET + AD_IMG_CRC_OSET,(uint8_t *)crc, 4); // Reset. HAL_SYSTEM_RESET();
3. 内部Flash方式的OAD是没有SNV的,如何添加?是否只要在OAD Target App的stack工程配置中的Preprocessor中将OSAL_SNV=0改为OSAL_SNV=1或者OSAL_SNV=2即可?link文件之类的需要改动吗?
Image 不需要包含OAD profile. 你后面的理解是正确的。
你的Q3是什么意思?请具体说一下。
所以问题1的答案就是“不能”的。
Image 不需要包含OAD profile
——我认为Image B也是不用包含OAD Profile的,但是你们的OAD文档下面两个黄色高亮的部分怎么理解?在你们的例程中,Image B也是加了OAD Profile的,这个加了干啥子用?!
Q3的意思就是内部Flash方式的OAD是没有SNV的,如OAD文档中下面的黄色高亮部分描述,那么如果想使用bond功能,并且应用层想用SNV功能,如何添加?是否只要在OAD Target App的stack工程配置中的Preprocessor中将OSAL_SNV=0改为OSAL_SNV=1或者OSAL_SNV=2即可?link文件之类的需要改动吗?
你好,
回答你的问题三。
首先在OAD Target App的stack工程配置中的Preprocessor中将OSAL_SNV=0改为OSAL_SNV=1或者OSAL_SNV=2只是用来设置你是否使用NV模块,是使用4K的还是使用8K的,但是光修改这个还是不够的。
因为app与stack的boundary是固定的,如果不用SNV的4K或者8K资源,可以把这个boundary的边界往下调整4K或者8k。
默认就是OSAL_SNV=0的,改成OSAL_SNV=1或者OSAL_SNV=2之后,boundary的边界要怎么调整?
你好,
你使用的是sdk2.1呢还是sdk2.2?
编译stack部分时,会自动生成iar_boundary.xcl。然后,这个.xcl会被app包含,所以,可以说是自动的。
所以只要设置OSAL_SNV=0/1/2,其它的自动完成,包括boundary的重生成,对吗?
都讲这么明白了,还不清楚啊。如果我截图的那两处没有变化。就是自动的。
哈哈,问题需要确认,多谢