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.

C6748 如何确定应用程序在FLASH中的位置

Other Parts Discussed in Thread: OMAP-L138

硬件: C6748 +NOR FLASH

我将应用程序+UBL 用AISgen软件生成AIS文件,然后用仿真器烧写入NOR FLASH。

我想设置或者确定,应用程序烧写到NOR FLASH的位置,UBL在NOR FLASH的位置,有什么方法吗?

  • user6310626 说:
    我将应用程序+UBL 用AISgen软件生成AIS文件,

    合成一个AIS文件?

    user6310626 说:
    我想设置或者确定,应用程序烧写到NOR FLASH的位置,UBL在NOR FLASH的位置,有什么方法吗?

    UBL是在flash的开始的。

    应用程序是你的UBL去搬的。自己在UBL与flash writer里约定好一样就行了。

  • 嗯,是的,如果应用程序+UBL 用AISgen软件生成AIS文件, 合成一个文件。

    应用程序在FLASH中的位置还有办法确认吗?
  • 这种情况下确定应用程序的位置也没有用,因为RBL通过AIS文件头里的长度信息一次将UBL和应用程序加载到内存,如果后续只是将flash中的应用程序更新,但AIS文件头信息没有更新,RBL是加载不成功的。

  • 懂了,那最好的方法就是: UBL生成AIS文件,应用程序不生成AIS文件。
    然后将这两个文件通过NORWrite工程烧到FLASH相应位置。

    这样就确定了位置,以后只更新应用程序,就不会有任何问题。
  • 是的., 应用程序用boot table格式就可以了. 这个贴子里关于boot的附件里的说明第五,六,七页, 关于如何生成boot table.

  • 好的,感谢回答。
  • 在UBL_NOR工程中,norboot.h定义了

    typedef struct _NORBOOT_HEADER_
    {
     Uint32  magicNum;
     Uint32  entryPoint; 
     Uint32  appSize;
     Uint32  ldAddress; /* Starting RAM address where image is to copied - XIP Mode */
    }
    NORBOOT_HeaderObj,*NORBOOT_HeaderHandle;

    ubl.h中定义了

    #define UBL_MAGIC_BINARY_BOOT       (0x55424CBBu)

    在norboot.c 中,hNorHeader将BLOCK1中信息赋值给hNorHeader。

      // Assume header is at start of Block 1 of NOR device (Block 0 has
      // this UBL)
      hNorHeader = (NORBOOT_HeaderHandle) (blkAddress + blkSize);

    我的问题是,根据BOOT TABLE格式:

    ENTRY POINT

    SECTION 1 SIZE

    SECTION1 DEST

    那么hNorHeader得不到UBL_MAGIC_BINARY_BOOT 这个信息,而且SIZE也只是SECTION1的SIZE,不是整个APPSIZE.

    可以帮忙看看吗

  • 在UBL_NOR工程中,norboot.h定义了
    typedef struct _NORBOOT_HEADER_
    {
    Uint32 magicNum;
    Uint32 entryPoint;
    Uint32 appSize;
    Uint32 ldAddress; /* Starting RAM address where image is to copied - XIP Mode */
    }
    NORBOOT_HeaderObj,*NORBOOT_HeaderHandle;
    ubl.h中定义了
    #define UBL_MAGIC_BINARY_BOOT (0x55424CBBu)

    在norboot.c 中,hNorHeader将BLOCK1中信息赋值给hNorHeader。
    // Assume header is at start of Block 1 of NOR device (Block 0 has
    // this UBL)
    hNorHeader = (NORBOOT_HeaderHandle) (blkAddress + blkSize);

    我的问题是,根据BOOT TABLE格式:
    ENTRY POINT
    SECTION 1 SIZE
    SECTION1 DEST
    那么hNorHeader得不到UBL_MAGIC_BINARY_BOOT 这个信息,而且SIZE也只是SECTION1的SIZE,不是整个APPSIZE.

    可以帮忙看看吗
  • 自己改一下不就行了。

  • 我不是这个意思。

    这个是OMAP-L138_FLASHAndBootUtils_2_40里面提供的UBL中的NOR_WRITE工程,

    按道理应该是正确的,他这种格式的写法是依据哪种格式写的?

  • #1. image格式在我前面指出的小总结里的第七页里有说明:

    #2. 这里更多的是借用了ARM端启动顺序UBL-> UBOOT , 因为UBOOT用的gcc编译器及链接文件,有兴趣可以去看一下.将入口地址与内存地址开始设置为一样的.这样目的地址与入口地址是同一个,所以上面的header就很好理解了.

    #3. 但是通常用户程序的cmd没有特殊处理/设置,编译出来的文件的入口地址通常不是内存的首地址.这样按照上面的header搬过去,就不能直接跳到目的地址了. 比如以starterware里有gipio例程编译结果的map文件:

    #4. 这样就需要将工程的入口地址固定到内存的首地址:: 

    #5. 再用hex6x.exe 用-image选项生成bin.

    #6. 再在bin文件前加上文件头就行了. 这个步骤可以用starterware里的命令行工具:

    C:\ti\OMAPL138_StarterWare_1_10_04_01\tools\ti_image\tiimage.exe

    格式为:  tiimage.exe Address NONE xxx.bin xxx_ti.bin

  • 我整理下思路:

    1#Hearder问题
    typedef struct _NORBOOT_HEADER_
    {
    Uint32 magicNum;
    Uint32 entryPoint;
    Uint32 appSize;
    Uint32 ldAddress; /* Starting RAM address where image is to copied - XIP Mode */
    }
    NORBOOT_HeaderObj,*NORBOOT_HeaderHandle;

    上面的文件头,是通过UBL-> UBOOT , 这样的方式实现的,所以有这样的格式。

    2#UBL工程
    a)用OMAP-L138_FLASHAndBootUtils_2_40中的UBL_NOR工程(更改头文件信息),生成.out文件
    b)用AISgen软件,生成AIS文件。


    3#应用程序生成
    a) 应用程序工程的入口地址固定到内存指定地址;
    b) hex6x.exe 用-image选项生成bin
    c) tiimage.exe Address NONE xxx.bin xxx_ti.bin
    经过这三步骤就生成了需要的BIN文件。

    4#NorWrite烧写
    在仿真器连接下,用NorWrite工程将 2# 3#生成的文件分别烧写FLASH到相应的位置

    这个流程对吗?
  • 用ti.image 工具能产生
    typedef struct _NORBOOT_HEADER_
    {
    Uint32 magicNum;
    Uint32 entryPoint;
    Uint32 appSize;
    Uint32 ldAddress; /* Starting RAM address where image is to copied - XIP Mode */
    }
    这样的头吗
  • 不能,仅仅是长度,地址。 这个地址是在运行tiimage.exe时输入的。

    另外的信息你在写flash里改一下程序自己写进去就好了。

    关键是明白了这个步骤的原理,剩下的自己改改程序就好了,基础的程序都有了。