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.

CC2652R的開發板測OTA功能.

Other Parts Discussed in Thread: CC2652R, UNIFLASH, CC2538, CC2530, Z-STACK, CC2531, SIMPLELINK-CC13X2-26X2-SDK


HI YK

最近用CC2652R的開發板在測OTA功能.

請教一下以zc_ota_server專案的話

TI的OTA_USER_GUIDE有提到要寫入以下腳本.

For IAR, the post-build actions are a bit different:
"$PROJ_DIR$\build.cmd" "$TOOLS_OAD_DIR$" "$PROJ_DIR$" "$TARGET_BPATH$" "$TOOLS_OAD_ZIGBEE_DIR$" "$TARGET_DIR$" "BEBE" "2652" "00000001"

這個腳本要怎麼加在BUILD ACESS的Post-Build command line的腳本???
因為我加進IAR後,COMPILER最後都報錯???

以下是zc_ota_server原本的腳本Post-Build command line

ielftool.exe --ihex --verbose "$TARGET_BPATH$.out" "$TARGET_BPATH$.hex"

但不管是加在後面:
Variable expansion failed for Post-Build command line.
Offending text: "ielftool.exe --ihex --verbose "$TARGET_BPATH$.out" "$TARGET_BPATH$.hex" "$PROJ_DIR$\build.cmd" "$TOOLS_OAD_DIR$" "$PROJ_DIR$" "$TARGET_BPATH$"
"$TOOLS_OAD_ZIGBEE_DIR$" "$TARGET_DIR$" "BEBE"
"2652" "00000001""

還是替代掉原本的腳本腳本Post-Build command line
Variable expansion failed for Post-Build command line.
Offending text: ""$PROJ_DIR$\build.cmd" "$TOOLS_OAD_DIR$" "$PROJ_DIR$" "$TARGET_BPATH$" "$TOOLS_OAD_ZIGBEE_DIR$" "$TARGET_DIR$" "BEBE" "2652" "00000001" "


好像都報錯:Variable expansion failed for Post-Build command line??

好像不能用,這個情況是??

  • hi yk

    "我的作法是用host搭配znp去做OTA,所有的OTA都是在host上處理"-->

    請教一下這個ZNP的角色也是ZC_OTA_SERVER??

    "ZNP也儘量不去作其他功能,以免影響到正常功能"-->

    所以ZC_OTA_SERVER確實不能亂動??

    謝謝.

  • 我用Host/ZNP去做、ZC OTA Server算是在Host上面

  • HI YK

    剛K了一下書,ZNP是指說用CC的晶片,
    裡面保留最基本的Z_STACK FUNCTION但沒有上層APP的部份
    然後提供UART介面給其他HOST去對這個ZNP做控制,

    但PC上的軟體還是使用OtaServer沒錯??

    那我想問的是說就一定要有一個軟體(去吃.ZIGBEE檔案)去控一個
    OTA_SERVER對其他的ZED_OTA_CLIENT做OTA.

    但OTA完了以後.....要怎麼組自己的網??
    這才是我最想問的.

    因為現在主要都是在用Genericapp專案在使用.
    雖然現在試起來.CC2652R可以用OTA啊,
    但是無法和Genericapp專案一起.就... ............

    謝謝.

  • 我們的Host是自己寫的、你可以參考TI Z-Stack Linux GW reference design去修改成自己的應用

  • HI YK

    想再請教一下:
    1: 是 TI Z-Stack Linux GateWay reference design???
    這個好像前陣子我是用 BEAGLEBONE+CC2531 Dongle做實驗.....
    也有跟你請教過.......

    2:所以你們己經可以做到說平時跑你們自己的應用.
    但要更新FW時我就從OTA_SERVER丟新FW到裝置裡.
    裝置收完FW自己重開機跑新FW這樣子??

    謝謝.
  • 1. 是的、software-dl.ti.com/.../Z-Stack Linux Gateway - Developer's Guide.html
    2. 當然不是、OTA server其實就是發送 ZCL OTA cluster相關的封包、我們自己在Host去實作
  • HI YK

    我知道HOST你們是自己想辦法弄的.
    我是說先不管OTA_SERVER這邊.
    因為這樣子看可以用ZC_OTA_SERVER或是
    也可以用你講的ZNP去實現OTA_SERVER.

    我想問的是OTA可不可以做到以下的效果:-->

    "ZED裝置端平時跑自己的應用.
    但要更新FW時我就用OTA丟新FW到ZED裝置端
    ZED裝置端收完FW自己重開機跑新FW"

    這不就是OTA的目的??

    謝謝.
  • 你描述的完全就是可以達到的沒有問題
  • HI YK

    那就和DMM一樣了.純DEMO.....
    要實用的話...自己想辦法...

    謝謝.
  • TI 的例程基本上就是展示用途,要正式上場還是開發者得自行花功夫
  • HI YK

    了解.
    另一個想再問一下之前您和我提過說.
    您這邊己經不用AF_DATAREQUEST函式傳DATA了
    而是改用ZCL方法. ZCL方法的意思是....??

    謝謝.
  • ZCL就是Zigbee Cluster Library
  • HI YK

    了解.

    謝謝.
  • HI YK

    想再請教一下zr_ota_server的是對zc_sw_ota_client做OTA
    那可以對zED_sw_ota_client做嗎?? 謝謝.
  • HI YK

    想再請教一下
    所以要有一個COOR 讓zr_ota_server去BIND
    再用zED_sw_ota_client 去BIND上 zr_ota_server
    再用OTA_SERVER軟體去OTA??

    那COOR一定要zc_sw_ota_client嗎??
    還是zc_genericapp也可以?

    謝謝.
  • 1. 是的

    2. zc_genericapp也可以

  • HI YK

    可以了.
    用zr_ota_server做OTA
    再加一個自己的zc_genericapp當coordinator

    只是 zc_genericapp 只能給 zr_ota_server Bind.
    然後 zed_sw_ota_client 也只能 Bind 到 zr_ota_server

    有觀察到好像 zed_sw_ota_client 如果 Bind 到 coordinator
    OTA_SERVER軟體好像會看不到NODE.

    然後 zed_sw_ota_client OTA 完自己的CODE後,
    用AF_DataRequest丟 Data 回zc_genericapp.

    現在是 zc_genericapp ,
    zr_ota_server ,
    zed_sw_ota_client
    都用各用一顆,接下來就是把
    zed_sw_ota_client數目放大看看.

    先暫時用這個架構試看看.

    那 LINUX_GATEWAY的OTA跟
    zc_ota_server的OTA實用化. 可能要再研究.

    另外試下來 ZED OTA完,奇怪的是 ZED 的 UART0 CUI info:

    OTA Info: [Current File Version] 0x00000001

    Current File Version還是在001,奇怪,我是用0004去更新的.
    版本還是沒更新到,但是硬體動作確實有更新??.這個也要再看看.

    謝謝.
  • Current File Version是對應到OTA_APP_VERSION的定義,你有把OTA_APP_VERSION改成4嗎?
  • HI YK

    版本的話找到兩個:

    一個是IAR裡的那個Project option --> BUILD ACTION --> Post-Build command line:

    "$COM_TI_SIMPLELINK_CC13X2_26X2_SDK_INSTALL_DIR$/tools/zstack/iar/OTAPostBuild.cmd"
    "$COM_TI_SIMPLELINK_CC13X2_26X2_SDK_INSTALL_DIR$/tools/common/oad/"
    "$PROJ_DIR$" "$TARGET_BPATH$"
    "$COM_TI_SIMPLELINK_CC13X2_26X2_SDK_INSTALL_DIR$/tools/zstack/zigbee_ota_image_converter/"
    "$TARGET_DIR$" "BEBE" "2652" "00000004"

    另一個是 Project option --> C/C++ Compiler --> Preprocessor --> Defined symbols  --> OTA_APP_VERSION=0x00000001

    是哪個呀??
    謝謝

  • Project option --> C/C++ Compiler --> Preprocessor --> Defined symbols  --> OTA_APP_VERSION=0x00000001要改成4

  • HI YK

    是Preprocessor --> Defined symbols呀

    了解
    謝謝.
  • HI YK

    之前測試成功的好像是巧合.....
    把zed_sw_ota_client衝到四顆問題就來了.

    之前說要用
    用zr_ota_server做OTA
    再加一個自己的zc_genericapp當coordinator

    只是 zc_genericapp 只能給 zr_ota_server Bind.
    然後 zed_sw_ota_client Bind 到 zr_ota_server

    (有觀察到好像 zed_sw_ota_client 如果 Bind 到 coordinator
    OTA_SERVER軟體好像會看不到NODE.)

    結果現在又和之前ZC_OTA_SERVER出現一樣的問題.

    就是 zed_sw_ota_client 加入 zr_ota_server後.

    PC的OTA_SERVER沒有出現裝置??!! 所以也OTA不到.

    但是看zed_sw_ota_client 的CUI INFO, 確實有加入zr_ota_server,
    因為對照父節點是 zr_ota_server沒有錯.PID也對了.
    也拿到短位址了, 但就很奇怪,因為照說加入zr_ota_server後
    zc_genericapp 應該也要能看到zed_sw_ota_client.

    但變成只有zed_sw_ota_client 的訊息對了.
    zr_ota_server 和 zc_genericapp
    卻都看不到zed_sw_ota_client???

    還是PID都一定要固定的,因為上面試的PID全都是
    FFFF再由zc_genericapp另外產生.

    還在DEBUG中.

    謝謝.
  • 你一個一個升級會有問題嗎?Zigbee是low data rate的應用,本來就不建議同時作多個OTA升級

  • HI YK

    不是不是,我沒有要全部都一起做OTA
    只是那個PC軟體OTA_SERVER老是認到裝置三分鐘就自己衝下
    去OTA了, 我都要常常手動把下載停掉.

    之前成功的一次是有試到最高記錄一次三顆同時OTA.
    但那是加入ZR後,
    PC軟體OTA_SERVER看到裝置就自己三顆同時衝了.
    不過三顆OTA成功後又出新狀況,出現IMAGE錯誤,不給OTA了.

    現在都遇到很嚴重的問題是,ZED好像都有加入了,
    但是PC軟體OTA_SERVER現在都看不到裝置??!!
    變成時好時壞. 做起實驗來很不穩定.
    之前一顆都很穩定. 怎麼變成四顆就.......
    而不是說我要一次做好幾顆的OTA.

    而是現在連ZED BIND 進ZR讓 PC軟體OTA_SERVER認得到都出問題了.
    而且,我總是要先把ZED先BINDING進去ZR_OTA_SERVER吧???

    現在狀況一大堆,哈哈.

    謝謝.
  • OTA的原理基本上就是文件寫得那樣,TI的OTA_server用起來不順手,你就只能自己寫一套,我們就是自己寫
  • HI YK

    但是我記得你說你們是用LINUX GATEWAY去做.
    我是有看到裡面有API的指導.包含OTA的
    Z-Stack Linux Gateway - API document v1.1
    的OTA SERVER API SET.

    那TI有關於OTA_SERVER軟體端的教學嗎??
    如果PC上的OTA_SERVER軟體(V2.0.7)
    本來就不穩定的話??

    因為這個是純軟體不是FW
    因為有牽扯到檔案,所以OTA主體還是只能靠PC

    像BLE的話OTA主體就可以用手機去做OTA.

    還是我要發一篇英文的??

    謝謝.

  • 我們的Linux Host完全是自己寫的,沒有參考TI Linux GW,TI有關於OTA_SERVER軟體端的教學就是SDK內的文件,我不能說PC上的OTA_SERVER軟體不穩定,因為他只是個demo,要作產品,你還是得自己花力氣去做自己的程序
  • HI YK

    呃.......商用??
    我想我離那個還很遠,
    現在只是個人練功.

    而且我都還沒放自己的東西咧.
    zed_sw_ota_client 和 zr_ota_server
    我都是用原始SDK產生的專案.

    有改的只有zc_genericapp.
    (但也只是點OLED跟
    UART2定時10秒秀出BIND到的ED短位址跟
    顯示ED傳回協調器的DATA而己.)

    zr_ota_server我只能從OTA_SERVER軟體端去確認有沒有綁到zc_genericapp
    (這個倒是穩定.不會一下子綁得到, 一下子又綁不到了)

    但現在是zR_ota_server或zC_ota_server
    都會發生在OTA_SERVER軟體端"看不到"zed_sw_ota_client"
    這時好時壞而且最嚴重.

    但最妙的是zed_sw_ota_client的CUI看是有綁到的,因為:
    1:PID有了 2:父節點有了 3:短位址有了 4:狀態顯示in the network

    怎麼會zed_sw_ota_client端正常. 但OTA_SERVER軟體端看不到 ??
    這是我最納悶的點.

    除非是硬體.因為手上原廠開發板只有二塊,
    一塊當zc_genericapp, 一塊zr_ota_server.
    其他四顆zed_sw_ota_client是買別人的模組來用.

    謝謝.
  • 既然要練功,那就有了概念就自己寫最能練到內力
  • HI YK

    OK了,但好像就是要用固定PID,不能用FFFF

    但這個自動OTA怎麼把它停掉???

    好像只要OPEN了,它看到裝置一會兒就自己衝了.??

    都要手動放棄才行.

  • 正常要送出Image Notify才會開始作OTA,然後可以用Abort Download去停掉OTA

  • HI YK

    是這樣沒錯啦,但我這邊只要OPEN後有看到
    OTA_SERVER裝置和OTA_CLIENT裝置,
    大概十幾秒後它就自己衝下去OTA....

    就算手動放棄OTA後, 一樣過十幾秒後它就又自己衝了???

    謝謝.
  • 好像OTA真的會自行啟動,不過我這邊這樣測試下來就算OTA 自行啟動了好像也沒什麼問題啊

  • HI YK

    就會很久很久,本來

    一顆只要10-12分左右.
    二顆就要半小時,
    四顆全部衝就要一小時...............

    或者就要像你這張圖一,先不給他檔案,

    只是先看裝置在不在.....

  • 試試在ota_client.c的otaClient_ProcessQueryServerClkStructTimeoutCallback裡面把下面的程序去掉,device應該就不會主動開始OTA

      otaClientEvents |= ZCL_OTA_QUERY_SERVER_EVT;
    

  • HI YK

    好像有效哦.

    真的不會自己衝了,要手動才會衝.不過我的ota_client.c CODE長下面這樣子.

    "static void OTA_processQueryServerClkStructTimeoutCallback(UArg a0)
    {
      (void) a0;  // Parameter is not used

      // events |= ZCL_OTA_QUERY_SERVER_EVT;
      if ( reloadQueryServerTimer )
      {
          uint32_t queryImgJitter = OTA_NEW_IMAGE_QUERY_RATE;
          Timer_setTimeout(queryServerClkHandle, queryImgJitter);"

    謝謝.

  • 我用的是simplelink_cc13x2_26x2_sdk_4_30_00_54裡的例程,所以源碼跟你的可能不一樣,不過效果是相同的

  • hi yk

    了解'
    原來 sdk 10/5 有更新 v4.30.00.54
    現在才看到.

    謝謝.
  • 你可以按SIMPLELINK-CC13X2-26X2-SDK網頁上的"Alert Me"按鈕,下次有更新就應該會收到通知