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.

28075的USB-BOOT问题

Other Parts Discussed in Thread: CONTROLSUITE

背景:之前是用SCI boot mode进行boot程序烧写的。现有的28075板子上GPIO72与GPIO84默认接高电平,当要进行SCI boot时将GPIO72拉低即可,正常跑flash时不对GPIO72进行操作。

现在想要通过USB boot mode进行boot程序烧写。

已知USB-boot模式的选择是在Get-mode下即GPIO72/84均为高电平,key=0x5A ,EMU_BMODE=0x0C。

问题与猜测:

1.key与EMU_BMODE的赋值需要软件操作,则在进入USB boot mode 前是否需要一次程序编译

2.由于现有28075板子上GPIO72/84默认为高电平,Get-mode设置完成后,是否每次对芯片上电都会进入USB boot mode,而无法进入flash跑程序

     2.1在2成立的情况下,为避免每次上电后不进入flash,现有思路为:通过USB boot mode烧写的程序内加入对key与EMU_BMODE的修改,使下次上电后可进入flash

     2.2在2.1成立的情况下,若需要第二次通过USB boot mode进行程序烧写,是否需要再次进行步骤1、2、2.1

3.已知通过将GPIO72/84均置低电平并上电后可进入Parallel boot mode,在无Valid KeyValue(0x08AA)时“Return Flash EntryPoint”,是否可理解为Parallel boot mode下不进行其他操作的话,可自动进入Flash。如此可行的话,便可通过硬件控制芯片进入USB boot mode或Parallel boot mode(即进入flash)

4.或其他解决USB boot 程序烧录与二次烧录的方法,望各位指点;有描述不清或理解错误的地方,还请指出。

谢谢

  • 现在想要通过USB boot mode进行boot程序烧写。

    已知USB-boot模式的选择是在Get-mode下即GPIO72/84均为高电平,key=0x5A ,EMU_BMODE=0x0C。

    ERIC: C2000的引导要分成两种情况,一种是带仿真器的情况,一种是不带仿真器的情况。 EMU_BMODE是有仿真器的情况下才用的,没有仿真器的情况,是要靠OPT_BMODE,即只能一次性编程。

    问题与猜测:

    1.key与EMU_BMODE的赋值需要软件操作,则在进入USB boot mode 前是否需要一次程序编译

    Eric:  如果是带仿真器,那么就要在仿真器时去膝盖这个寄存器,然后复位芯片再运行。

    2.由于现有28075板子上GPIO72/84默认为高电平,Get-mode设置完成后,是否每次对芯片上电都会进入USB boot mode,而无法进入flash跑程序

         2.1在2成立的情况下,为避免每次上电后不进入flash,现有思路为:通过USB boot mode烧写的程序内加入对key与EMU_BMODE的修改,使下次上电后可进入flash

         2.2在2.1成立的情况下,若需要第二次通过USB boot mode进行程序烧写,是否需要再次进行步骤1、2、2.1

    Eric: 如果你配置了从USB启动,那么每次就会从USB开始启动,当然你要是带仿真器的话,你想干嘛就干嘛。不带仿真器的情况,因为判断的寄存器都是在OTP上,所以修改不了。

    3.已知通过将GPIO72/84均置低电平并上电后可进入Parallel boot mode,在无Valid KeyValue(0x08AA)时“Return Flash EntryPoint”,是否可理解为Parallel boot mode下不进行其他操作的话,可自动进入Flash。如此可行的话,便可通过硬件控制芯片进入USB boot mode或Parallel boot mode(即进入flash)

    Eric: 是,你所得对,那么就是可以等待,然后应该就会进入flash入口地址,从说明上来讲。你可以用SCI boot先测试一下吧。

    4.或其他解决USB boot 程序烧录与二次烧录的方法,望各位指点;有描述不清或理解错误的地方,还请指出。

    Eric:另外的一个思路就是写在线升级bootloader, 把USB初始化成串口类,然后自己做一个USB串口类的bootloader。

  • 您解答的很详细,十分感谢!

    “Eric:另外的一个思路就是写在线升级bootloader,把USB初始化成串口类,然后自己做一个USB串口类的bootloader",

    但这部分不是很理解,”把USB初始化成串口类“是指软件程序编译吗?比如例程中的USB虚拟串口功能?

    或者是硬件的USB转串口模块?

  • 另外的一个思路就是写在线升级bootloader,把USB初始化成串口类,然后自己做一个USB串口类的bootloader",

    Eric:

    这个指的是用USB的例程如下,把USB配置成串口类,然后电脑接上USB之后,装上如下驱动,就会变成串口,上位机就可以用串口助手之类对它进行收发数据。

    然后你自己利用这个例程,还有FLASH API,可以自己写一个bootloader烧写在芯片的某个flash扇区,当接到升级指令之后,就跳转到你这个bootloader的入口,这样就可以升级啦。至于其中的协议,你可以自己随意定义。

    C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_examples_Cpu1\usb_dev_serial

    C:\ti\controlSUITE\device_support\F2837xD\v210\F2837xD_common\windows_drivers

  • 好的,再次感谢!