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.

如何同时把SBL Bootloader和SimpleBLEPeripheral主程式下载到CC2540

Other Parts Discussed in Thread: CC2540

大家好!

有如下几个问题:

1. 如何同时把SBL Bootloader和SimpleBLEPeripheral主程式下载到CC2540?

2.我按TI官方的连接:processors.wiki.ti.com/.../SerialBootLoader

把SBL下载到CC2540,然后配置SimpleBLEPeripheral主程式能生成bin文件,通过串口可以下载主程式;

但问题是:把SBL下载到CC2540后退出debug模式,仿真器CCDebuger还跟2540连着电脑,可以通过SerialBootTool串口下载;

当把仿真器拔掉后,通过SerialBootTool串口不能下载,提示timeout。

还有为什么通过SerialBootTool串口下载一次成功后,再次通过SerialBootTool串口就不能在线更新程式了?

3.bootloader程序的memory map 方式?

知道的帮忙解答下,谢谢!

  • 串口下载的蓝牙代码可以正常运行吗?

    串口下载通常需要一个io引脚高低电平判断的!

  • Hi, zhihao~

    这个问题是因为,你通过仿真器下载SBL,芯片内部的主程式被清除,芯片跑在SBL程序内。所以此时你可以使用SerialBootLoader串口下载bin。

    但是,如果你下载完成了有效的bin,那么程序会跳转到主程式运行。

    换句话说,你不能再次用SerialBootLoader下载程序是因为芯片没有在运行SBL程序。

    你可以使用按键、蓝牙指令、UART等方式,在主程式中,调用appForceBoot()接口,使主程序跳回到SBL,然后就可以正常用SerialBootLoader烧写了。这个函数在主程式OnBoard.c/h文件中。给函数添加下代码实现:

    /*********************************************************************
     * @fn      appForceBoot
     *
     * @brief   Common force-boot function for the HCI library to invoke.
     *
     * @param   none
     *
     * @return  void
     *********************************************************************/
    void appForceBoot(void)
    {
      // Dummy function for HCI library that cannot depend on the SBL build defines.
      uint16 crc[2];
    
      // Make sure SBL is present.
      HalFlashRead(SBL_CRC_PAGE, SBL_CRC_OFFSET, (uint8 *)crc, 4);
    
      if ((crc[0] == 0xFFFF) || (crc[0] == 0x0000) ||
          (crc[1] == 0xFFFF) || (crc[1] == 0x0000) ||
          (crc[1] != crc[0]))
      {
        return;
      }
    
      HAL_DISABLE_INTERRUPTS();
    
      crc[0] ^= 0xFFFF;  // Only write to zero bits that are not already zero.
      crc[1] = 0xFFFF;   // No need to write any bits to zero.
      HalFlashWrite(HAL_SBL_IMG_CRC, (uint8 *)crc, 1);
    
      HAL_SYSTEM_RESET();
    }

     

    如果有幸帮到你,麻烦随手点下选择正确答案。(*^__^*)

  • 楼上正解,已确认:)

  • 通过串口下载的蓝牙代码可以正常运行。

  • 确保串口bootloader代码和蓝牙代码地址空间没有冲突,正确烧写程序后自动运行蓝牙,通常不会自动进入串口boot

  • Hi Viki:

    我举个例子,TI 的DSP 28062的flash有A,B,C,D,E,F,G,H八个区,用烧录器先烧录Main主程式,

    然后选中A区擦除烧录Bootloader,然后通过串口就可以在线烧录了;

    CC2540是不是不能同时烧录Bootloader和Main,只能先通过烧录器烧录Bootloader然后通过串口烧录主程式?

  • 楼主的升级功能用的多不?可以考虑用脱机烧录方式,速度很快的!

  • 这个问题有人遇到过吗?

    2.我按TI官方的连接:http://processors.wiki.ti.com/index.php/SerialBootLoader

    把SBL下载到CC2540,然后配置SimpleBLEPeripheral主程式能生成bin文件,通过串口可以下载主程式;

    但问题是:把SBL下载到CC2540后退出debug模式,仿真器CCDebuger还跟2540连着电脑,可以通过SerialBootTool串口下载;

    当把仿真器拔掉后,通过SerialBootTool串口不能下载,提示timeout。

  • 楼主按照标记答案的回答尝试了么?

    关于同时下载,请参考我对楼主另一个帖子的回答:

    http://www.deyisupport.com/question_answer/wireless_connectivity/bluetooth/f/103/t/132676.aspx