CC2530使用串口下載(SBL)


工作環境:

WIN7 64位

IAR 版本: 8.10.3 (8.10.3.10338)

ZStack-CC2530-2.3.1-1.4.0協議棧,下載地址:http://download.csdn.net/detail/loveliyun/4143607

 

為了節約板子的空間,在上面放一個大的仿真接口不被允許,這種情況下,可以使用串口下載,

批量生成時,則可以先將SBL的bootloader程序下載進入FLASH的bootloader區(0x0000-0x2000),然后在使用串口燒錄我們用戶自己的應用程序到FLASH

 

詳細可以參考:1、http://processors.wiki.ti.com/index.php/CC253x_Serial_Boot_Loader

                   2、協議棧目錄: C:\Texas Instruments\ZStack-CC2530-2.3.1-1.4.0\Documents\CC2530\Serial Boot Loader for CC253x.pdf

 

我也參考上面的文件做了自己的實驗,具體如下:

第一步:首先安裝好協議棧,進入C:\Texas Instruments\ZStack-CC2530-2.3.1-1.4.0\Projects\zstack\Utilities\BootLoad\CC2530,打開Boot.eww工程

        不做任何修改,直接使用仿真機將程序燒錄至板子里面(如果硬件有不一樣,則自己參考自己的硬件相關設置的代碼,其他完全不修改),

        此時,SBL的bootloader程序被下載到FLASH的第一個bank的最開始的位置(0x0000-0x2000).

第二步:進入C:\Texas Instruments\ZStack-CC2530-2.3.1-1.4.0\Projects\zstack\Samples\GenericApp\CC2530DB,打開GenericApp.eww工程

        調整工程的option里面的配置(具體可以參考上面提供的參考文檔,非常詳細),另外工程配置完畢后,編譯。

        打開生成的GenericApp.map文件,如下圖所示,復制checksum到onboard.c里面的const CODE uint16 _crcShdw = 0x418f;,我這里是0x418f。

        更改后重新編譯,這時候生成的GeneralApp.bin才是我們使用串口工具來燒錄所需的文件.

           

        打開GeneralApp.bin的文件,如下圖所示

        0090-0091為編譯計算出來的cheaksum(可以從上面圖片的計算方法看出,計算沒有計算2090-2093,剛好這個地方存放就是Cheaksum),

        0092-0093為我們在onboard.c里面寫入的_crcShdw=0x418f,

        此兩處的cheaksum一定要一樣,因為在SBL程序里面會核對這兩次校驗是否一樣,只有一樣的情況下,才能跳轉到正常程序執行。

        

第三步:進入C:\Texas Instruments\ZStack-CC2530-2.3.1-1.4.0\Tools\SBL Tool,打開SBDemo.exe,點擊下載,即可開始下載,

下載具體過程如下:

    首先數據格式為:

      | 數據頭部SOF | 數據長度LEN | 命令1 | 命令2 | 數據 | 幀校驗FCS|

       例如:FE 01 4D 10 00 5C,和上面一一對應

在SBL的程序中有如下定義:

  // Bootloader Serial Interface Subsystem
  #define SB_RPC_SYS_BOOT 0x4D

  // Commands to Bootloader
  #define SB_WRITE_CMD 0x01
  #define SB_READ_CMD 0x02
  #define SB_ENABLE_CMD 0x03
  #define SB_HANDSHAKE_CMD 0x04

 

1、先發送一個

     FE 01 4D 10 00 5C

     命令2為10,對比上面的定義發現這個在SBL程序里面沒有,所以我也不知道是干什么用的,可能是給我們用戶自己使用,用於擴展功能的,暫時忽略。

2、在發送

     FE 01 4D 04 02 4A

     命令2為04,對比上面的定義,是握手命令,PC和板子建立下載鏈接,如果發一段時間的握手信號,都沒有程序,PC會顯示超時。

3、接着是發送

    FE 42 4D 01 00 00 02 2A 62 02 21 D3 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 02 28 A3 FF FF FF FF FF 02 25 F9 FF FF FF FF FF FF FF FF FF FF E3

    命令2為01,對比上面的定義,是寫命令,命令的第二個字節代表數據長度是42轉化為十進制是66,其中2個字節是寫入地址(這里是00 00),另外64個字節就是寫入的數據內容。這個命令會連續發送,直到整個程序都寫入完畢。

4、程序寫入完畢后,再發送,

    FE 02 4D 02 00 00 4D

    命令2為02,對比上面的定義,是讀命令,命令的第二個字節是02,即數據長度為2位,表示需要從FLASH讀數據的位置(這里是00 00),讀出數據進行校驗。

5、所有地址的數據校驗完畢后會根據你在SBL燒錄軟件上是否勾選No Reset Vector Verification(8051 only),選擇是否發送復位命令

    FE 00 4D 03 4E,

    命令2位03,串口啟動使能命令,復位芯片。

    

6、復位芯片后,會進入等待狀態(LED1和LED2交替閃爍),等待狀態下,有3種方式進入應用程序

     1、如果等待一段時間無操作(具體多長時間可以用過跳轉SBL程序static uint8 sblWait(void)里面的uint32 dlyCnt = 0x260000;的大小來調整等待時間),則程序跳轉到0x2000,開始運行我們的應用程序,

   2、在等待狀態下,我們也可以通過S1 和 S2按鍵來控制進入下載模式還是正常工作模式,S1如果是高電平,則進入下載模式; 如果S1為低電平,S2為高電平,則進入正常工作模式

     3、在等待狀態下,也可以通過串口發送0xF8進入下載模式,發送0x07(0xF8^0xFF)進入正常工作模式。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM