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的程序烧写到OTP中的操作步骤

我们在用多块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};


  • OTP操作时,要注意OTP中有的地址存放TI出厂的校验信息,不能擦除已有的信息

  • 非常感谢!

  • 还有一个问题。烧写到OTP跟烧写到flash有什么区别,需要把一些引脚上拉之类的吗

  • 不需要。

  • 如果只是把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文件中有定义的话。

  • 勘误表所列的上述问题,是从eCAN启动会工作不正常,还是从rom启动ecan就不能工作。

    我现在感觉对这个勘误表理解有问题。

    此外,下图中的ecan-a boot mode in boot rom怎么理解。既然是boot rom,怎么还会有从ecan启动?

  • Ninghao Li 说:

    勘误表所列的上述问题,是从eCAN启动会工作不正常,还是从rom启动ecan就不能工作。

    所有工作都是从BOOTROM开始执行的,在BOOTROM里决定从哪里启动,比如ECAN是指通过ECAN外设这个通信接口开始运行。

  • 现在基本明确了,要把eCAN的配置程序写到OTP中,然后从flash启动,然后跳转到OTP的执行eCAN的配置程序,然后再跳转回flash执行下面的程序。那能不能简述一下跳转的过程,需要对cmd进行哪些操作。

  • 如果这是你的需求,那跟CAN BOOT没有任何关系,就是正常的flash boot,然后简单跳转即可。

    在cmd文件中,只需要将需要放到OTP的内容定义自己的段,然后映射到OTP,然后在flash程序中直接跳转,可以通过直接调用函数,或者通过函数指针到某一固定地址运行。

  • 程序都写好后,第一次debug,把ecan的配置程序写到了OTP。如果要修改其他的程序,可以再次debug吗?

  • 怎么检验程序已经写到OTP中?

  • Ninghao Li 说:

    程序都写好后,第一次debug,把ecan的配置程序写到了OTP。如果要修改其他的程序,可以再次debug吗?

    当然可以调试。OTP跟Flash没有任何其它本质差别,除了只能写一次,不能高速擦除之外。

  • Ninghao Li 说:

    怎么检验程序已经写到OTP中?

    不明白这个问题是什么?

  • 我已经在cmd里,对OTP所在的地址进行了定义,并且在eCAN的配置程序所在的文件开头写了#progma CODE_SECTION()语句用来将该配置程序写到OTP中。现在并不知道程序是否确确实实已经写到OTP里,所以想知道如何确认。