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.
我们在用多块2802进行通信,但是官方给出2802的eCAN在ROM启动时会出现故障,这个是官方的勘误表www.ti.com.cn/.../sprz171q.pdf ,问题描述在20页。
官方的技术支持给了一个解决方法,把eCAN的配置程序写到OTP中。我的问题就是,把部分程序写到OTP的步骤,同时其他配置程序和main照常写到flash中。
在网上搜了一下,只是说明要改cmd,但是如何改,改完之后的操作没有给出。希望有人解答!
我自己没有做过OTP烧写实验,但是可以给你建议参考
1. OTP和flash的擦写是一样的
2.在CMD中,把相关eCAN配置程序定义到空余的OTP内存空间地址范围.使用#pragma CODE_SECTION 和 #pragma DATA_SECTION来定义程序和数据放置位置
“在CMD中,把相关eCAN配置程序定义到空余的OTP内存空间地址范围”
这句话不太理解,好像只是使用#pragma CODE_SECTION 这个语句就可以把eCAN的配置程序放到某个字段里。
不过还有一个问题,就是OTP的地址空间还没有定义字段,在CMD中所要做的是不是就是定义的部分。
CODE_SECTION是用于分配代码地址空间位置, DATA_SECTION用于分配变量地址空间位置
CMD的使用参考以下示例
比如定义DATA_LOG到OTP的地址0x3D7A00到0x3D7C00空间内
MEMORY
{
PAGE0:/*代码放到PAGE0 */
OTP:: origin = 0x3D7800, length = 0x000200 /* on-chip OTP */
PAGE 1:/*数据放到PAGE1*/
OTP_DATA:: origin = 0x3D7A00, length = 0x000200 /* on-chip OTP */
}
DATA_LOG : > OTP_DATA PAGE = 1
#pragma DATA_SECTION(bufferB, "DATA_LOG")
const char bufferB[512] = {0};
如果只是把eCAN的配置程序烧写到OTP中,系统在从flash启动的时候会不会自动读取到OTP中的程序?
另外,需不需要设置为从OTP启动?
http://www.ti.com/lit/an/spraaq3/spraaq3.pdf
这个链接的文档描述了勘误表中的问题解决方法,但是写的很复杂。这个文档还单独拿eCAN启动的问题写了一下。里面的设置很多,看这个文档的意思是要从OTP启动,设置成从OTP启动,那flash的程序还会不会读取到?
Ninghao Li 说:如果只是把eCAN的配置程序烧写到OTP中,系统在从flash启动的时候会不会自动读取到OTP中的程序?
是否读取或访问或执行,取决于你在cmd文件中是否有做相关的定义。
Ninghao Li 说:另外,需不需要设置为从OTP启动?
你自己希望应用程序从哪里开始运行,就从哪里启动。
Ninghao Li 说:http://www.ti.com/lit/an/spraaq3/spraaq3.pdf
这个链接的文档描述了勘误表中的问题解决方法,但是写的很复杂。这个文档还单独拿eCAN启动的问题写了一下。里面的设置很多,看这个文档的意思是要从OTP启动,设置成从OTP启动,那flash的程序还会不会读取到?
同上,从哪里启动只是表明程序从哪里开始运行,并不代表其它地方的代码不执行,如果cmd文件中有定义的话。
Ninghao Li 说:勘误表所列的上述问题,是从eCAN启动会工作不正常,还是从rom启动ecan就不能工作。
所有工作都是从BOOTROM开始执行的,在BOOTROM里决定从哪里启动,比如ECAN是指通过ECAN外设这个通信接口开始运行。
现在基本明确了,要把eCAN的配置程序写到OTP中,然后从flash启动,然后跳转到OTP的执行eCAN的配置程序,然后再跳转回flash执行下面的程序。那能不能简述一下跳转的过程,需要对cmd进行哪些操作。
如果这是你的需求,那跟CAN BOOT没有任何关系,就是正常的flash boot,然后简单跳转即可。
在cmd文件中,只需要将需要放到OTP的内容定义自己的段,然后映射到OTP,然后在flash程序中直接跳转,可以通过直接调用函数,或者通过函数指针到某一固定地址运行。
Ninghao Li 说:程序都写好后,第一次debug,把ecan的配置程序写到了OTP。如果要修改其他的程序,可以再次debug吗?
当然可以调试。OTP跟Flash没有任何其它本质差别,除了只能写一次,不能高速擦除之外。
我已经在cmd里,对OTP所在的地址进行了定义,并且在eCAN的配置程序所在的文件开头写了#progma CODE_SECTION()语句用来将该配置程序写到OTP中。现在并不知道程序是否确确实实已经写到OTP里,所以想知道如何确认。