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.

CC2650MODA: off chip oad例程实验,BTool无法连接。

Part Number: CC2650MODA
Other Parts Discussed in Thread: CC2640, CC2650, LAUNCHXL-CC2650, LAUNCHXL-CC26X2R1

TI team,你们好!

  我这边在做CC2650MODA off chip oad例程实验,按照CC2640 BLE OAD User's Guide.pdf 5. Running the Out of the Box Demos,准备做OAD Downloader的setup,

将cc2650lp_host_test_rel.hex烧写到cc2650 launchPad之后,打开C:\ti\simplelink\ble_sdk_2_02_04_06\tools\btool下的BTool,按照图1参数进行连接

进入画面后,提示timeout。

另外,ccs下实现例程,需要simple_peripheral_oad_offchip下的app和STACK工程,这个文件夹我也没有找到,

这方面小白,

请指教!

  • 设备可以正常使用,就证明bim引导成功,但是沒辦法證明设备里面的oad修改部分没有问题

  • #ifdef FEATURE_OAD
    //add for oad
    LO_UINT16(OAD_SERVICE_UUID),
    HI_UINT16(OAD_SERVICE_UUID)
    //add for oad
    #else
    O_UINT16(DRMARKPROFILE_SERV_UUID),
    HI_UINT16(DRMARKPROFILE_SERV_UUID)
    #endif //!FEATURE_OAD

    这是我这边的代码,根据oad例程修改的,我想既可以oad又能顺利执行我本来的程序,应该怎么修改这部分?

  • 不大懂你的問題,加了oad相關的程序並不會影響到你本来的程序啊

  • FEATURE_OAD

    根据guide line,需要在oad的地方都加上这个define,

    #ifdef FEATURE_OAD
    //add for oad
    LO_UINT16(OAD_SERVICE_UUID),
    HI_UINT16(OAD_SERVICE_UUID)
    //add for oad
    #else
    O_UINT16(DRMARKPROFILE_SERV_UUID),
    HI_UINT16(DRMARKPROFILE_SERV_UUID)
    #endif //!FEATURE_OAD

    加了这个,在编译的时候就不走我原先程序的service UUID了

  • 看不出來為什麼加上OAD_SERVICE_UUID就不走你原先程序的service UUID,你原先的service UUID還是可以留著啊

  • // GAP - Advertisement data (max size = 31 bytes, though this is
    // best kept short to conserve power while advertisting)
    static uint8_t advertData[] =
    {
    // Flags; this sets the device to use limited discoverable
    // mode (advertises for 30 seconds at a time) instead of general
    // discoverable mode (advertises indefinitely)
    0x02, // length of this data
    GAP_ADTYPE_FLAGS,
    DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,

    // service UUID, to notify central devices what services are included
    // in this peripheral
    0x03, // length of this data
    GAP_ADTYPE_16BIT_MORE, // some of the UUID's, but not all
    #ifdef FEATURE_OAD
    //add for oad
    LO_UINT16(OAD_SERVICE_UUID),
    HI_UINT16(OAD_SERVICE_UUID)
    //add for oad
    #else
    LO_UINT16(DRMARKPROFILE_SERV_UUID),
    HI_UINT16(DRMARKPROFILE_SERV_UUID)
    #endif //!FEATURE_OAD
    };

    这是这个函数的完整代码,看例程同时只能处理一个service的UUID,我想不影响原来的程序,应该在什么位置加上原来的service UUID?

  • advertData填什麼並不會影响原来的程序

  • 那我想问一下,oad的service先被连接,那之后什么timing,原来的程序的service能被连接呢?不好意思bluetooth这块也不是很了解。

  • 你好,我还想确认一下关于external flash的pin方面的问题。

    oad guideline里面有下面的描述。

    6.1.4 [Optional] Changing the pins of the external flash device
    It is easiest to use the default pinout when interfacing to the external flash, but if the pins must be changed, the following steps are recommended. Note that the pins must be changed in the BIM image as well as any application images, and they must be in sync. If the images are out of sync in terms of the pins used for external flash, the system may be bricked from future OADs.
    1.1.1.1 Updating the BIM’s external flash pins
    BIM will use the pin definitions in bsp.h to define the external flash pins. BIM will interact with the external flash using a Driverlib only based bare metal interface.
    // Board external flash defines
    #define BSP_IOID_FLASH_CS IOID_20
    #define BSP_SPI_MOSI IOID_9
    #define BSP_SPI_MISO IOID_8
    #define BSP_SPI_CLK_FLASH IOID_10

    我这边bsp.h文件有两个,

    C:\ti\simplelink\ble_sdk_2_02_04_06\src\examples\util\bim_extflash\cc2640\board\cc2650stk\bsp.h

    C:\ti\simplelink\ble_sdk_2_02_04_06\src\examples\util\bim_extflash\cc2640\board\cc2650lp\bsp.h

    请问我应该使用哪一个呢?

  • 照理說你應該是用LAUNCHXL-CC2650的project下去改,所以應該用cc2650lp

  • 你好!

    我这里之前的timeout问题解决了,现在是发送一个bin文件之后,得到The external flash cannot be opened这样的回复,请问是怎么回事?

  • 建議先查一下external flash的讀寫是否正常

  • 建議先查一下external flash的讀寫是否正常

    读写是正常的,这个device原来就有这个external flash用作读写log的。

  • 如果读写是正常的,看不出來為什麼會有The external flash cannot be opened这样的回复

  • 你好,这个问题我用comment暂时回避了,传输显示全部结束,但是device没有重启,也没有更新到最新的程序,请问这是怎么回事?

  • device没有重启只能調試看是什麼原因了

  • 不好意思,还想请教一个问题。

     怎样能确认external flash里面是否写入了新的烧录文件?通过什么方法?

  • 每次写入一段external flash就讀出來比對看看跟写入的資料有沒有一樣

  • 谢谢,还有一个问题。

    现在我这边已经显示传输成功,没有reboot,经过调查发现似乎是crc校验结果不对导致没有走reboot这里,请问为什么会crc校验结果不对。

    oad.c里面最后6行有个

    // IAR note explains that poly must be run with value zero for each byte of
    // the crc.

    这样的comment,我这里是ccs,会不会有什么影响。

    /*********************************************************************
    * @fn crcCalcDL
    *
    * @brief Run the CRC16 Polynomial calculation over the DL image.
    *
    * @param None
    *
    * @return The CRC16 calculated.
    */
    static uint16_t crcCalcDL(void)
    {
    uint16_t imageCRC = 0;
    uint8_t page;
    uint8_t lastPage = oadBlkTot / OAD_BLOCKS_PER_PAGE;

    // Remainder of bytes not divisible by the size of a flash page in bytes.
    uint16_t numRemBytes = (oadBlkTot - (lastPage * OAD_BLOCKS_PER_PAGE))
    * OAD_BLOCK_SIZE;

    // Set last page to end of OAD image address range.
    lastPage += imagePage;

    // Read over downloaded pages
    for (page = imagePage; page <= lastPage; page++)
    {
    uint16_t offset;

    // Read over all flash words in a page, excluding the CRC section of the
    // first page and all bytes after remainder bytes on the last page.
    for (offset = (page == imagePage) ? HAL_FLASH_WORD_SIZE : 0;
    offset < HAL_FLASH_PAGE_SIZE &&
    (page < lastPage || offset < numRemBytes);
    offset += HAL_FLASH_WORD_SIZE)
    {
    uint8_t buf[HAL_FLASH_WORD_SIZE];
    uint8_t idx;

    // Read a word from flash.
    OADTarget_readFlash(page, offset, buf, HAL_FLASH_WORD_SIZE);

    // Calculate CRC of word, byte by byte.
    for (idx = 0; idx < HAL_FLASH_WORD_SIZE; idx++)
    {
    imageCRC = crc16(imageCRC, buf[idx]);
    }
    }
    }

    // IAR note explains that poly must be run with value zero for each byte of
    // the crc.
    imageCRC = crc16(imageCRC, 0);
    imageCRC = crc16(imageCRC, 0);

    // Return the CRC calculated over the image.
    return imageCRC;
    }

  • 一般crc校验结果不对問題大部分出在写入external flash有問題

  • 是的,看來连接上有问题,不過我剛剛看了一下CC2650配合的BTool好像不支持OAD的部份喔

    cc2650 launchpad可以连接btool,但是没有oad这个tab,这就是您之前说的不支持OAD的意思吗?

    另外,我这边通过TI的sensor tag已经可以off chip oad成功了。

  • 對,这就是我之前為什麼说不支持OAD

    後來CRC的問題是出在写入external flash有問題嗎?

  • 後來CRC的問題是出在写入external flash有問題嗎?

    crc的问题是因为external flash没有正确打开,我这里的device本身带有读写external flash这个功能,没有正确打开是因为oad和这个功能同时使用external flash,经过调整就可以了。

    對,这就是我之前為什麼说不支持OAD

    那有没有能支持oad同时cc2650 launchpad也可以使用的btool版本呢?

    还有想问一下,android上的sensor tag怎么使用oad功能?比如如何导入一个bin文件这样的,因为我这里显示都是disable的,有没有什么相关说明?谢谢!

  • 沒看到有支持oad同时cc2650 launchpad也可以使用的btool版本,android上的sensortag app可能要搭配cc2650stk的軟件才能使用oad功能,你現在不是已經可以做oad了,為什麼還需要用btool或是sensortag app?

  • 我现在是用iphone的sensor tag可以oad,所以想问问android是不是也可以。

  • 我這邊用Android的sensortag app搭配cc2650stk是可以做oad的

  • 我这边是disable的,没有地方可以选择bin文件,还有想问一下bin文件放在哪里?我放在了download文件夹里面。点击bin文件不能找到可以打开的app。

  • 我說了我猜是因為一定要搭配cc2650stk的軟體做oad,你要不要試試用cc2650stk的軟體

  • cc2650stk是ti sensortag的硬件,軟件在安裝ble stack後可以在C:\ti\simplelink\ble_sdk_2_02_06_07\examples\cc2650stk\sensortag 找到,你要修改相關的硬件設置讓它可以跑在你的硬體上

  • 哦,谢谢,看起来好麻烦还是算了吧。

  • 你好,我还有一个问题!

    关于外部flash的分配问题,我这边目标device其实有4k数据原来是保存在0x00000这个位置的,为了不和oad发生冲突,我移动到了0x60000这个位置,第一次oad可以正常读取该数据,第二次oad以后就不能正常读取了,后来我把位置改到0x90000,也是一样现象。请问是什么原因,我这边的外部flash是8m。

  • 檢查看看oad相關的程序有沒去對external flash做抹除的動作

  • if (OADTarget_validateNewImage(pValue + hdrOffset, &ImgHdr, oadBlkTot))
    {
    // Determine where image will be stored.
    imageAddress = OADTarget_imageAddress(pValue+hdrOffset);
    imagePage = imageAddress / HAL_FLASH_PAGE_SIZE;

    // Open the target interface
    if (OADTarget_open())//edit for oad test
    {
    uint8_t page;
    uint8_t lastPage = oadBlkTot / OAD_BLOCKS_PER_PAGE;

    // Set last page to end of OAD image address range.
    lastPage += imagePage;

    // Erase required pages
    for (page = imagePage; page <= lastPage; page++)
    {
    OADTarget_eraseFlash(page);
    }

    // Image accepted, request block 0.
    OAD_getNextBlockReq(connHandle, 0);
    }

    是有erase的动作的,但是似乎都是针对地址的erase,而不是所有内容吧

  • 你調試看看會不會去erase到你應用程序要用的部份吧

  • 你好!我想问一下,oad成功之后device不能自动重启,是怎么回事?

    可以手动启动,oad是成功的。

  • 你調試一下oad下載完成後程序有沒有調用reboot api

  • if (flagRecord & (OAD_IMG_APP_FLAG|OAD_IMG_STACK_FLAG))
    {
    OADTarget_systemReset();
    }

    没有停在这里。

  • 那你要檢查為什麼你的flagRecord 不符合條件吧

  • 不好意思,问你一个ccs的问题

    为什么我打在704行的断点会打到713行,打到689行单步跟的话,直接跳到715行。

  • 應該是compiler optimize level的問題,把它調低點試試

  • 你好,关于ccs,我也是小白。

    刚才好像设置一下debug as什么的之后,再次编译烧写进入后,device就不能power on了,通过debug倒是可以启动,但是scan搜索不到该设备,打断点在Bluetooth task也没有停,请问我是不是工程设置出了什么问题,ps,我没有修改source

  • 重燒bim試試

  • 全都重烧了,也不好用,是不是我工程设置哪里出现了问题呀?连接各个工程的设置

  • 即使有这个错误,build也能通过,这是不是不对呀

  • 你要不要把整個系統重啟再試試

  • 我刚才用旧的bim烧录文件,加上app和stack,重新烧录一下就好用。

    估计是bim project配置的问题

  • 这是我编译bim project的结果,应该用FlashOnly_LP编译不是吗?